2016-08-02 1 views
3

自己割り当てのプロジェクトでは、tic-tac-toeのすべての可能なゲームを試してみることにしました。これらのゲームをそれぞれ保存して表現するために、私は9列と362880行の行列を使うことにしました。各行は1つのゲームであり、奇数列は「X」の動きであり、偶数列は「O」の動きである。重複する整数を含まない9桁の数字の行列を作成

(1,2,3,4,5,6,7、NULL、NULL)は、Xが勝つゲームを表します。

enter image description here

私は重複整数は、プレイヤーが既に占有されている位置をマークしようとしたことを意味するように、重複した整数が含まれていないすべての9桁の番号を生成したい理由です。以下は

一つの可能​​な方法の始まり

#create matrix that can contain all possible arrangements of moves on a tic-tac-toe board 
tictactoematrix <- matrix(ncol = 9, nrow = 362880) 

j = 1 
k = 1 

#create list of possible moves 
move <- list(1,2,3,4,5,6,7,8,9) 

#populate every row with numbers 1-9 
for(i in 1:362880){ 
    tictactoematrix[i,1] <- move[[1]] 
    move[1] <- NULL 
    tictactoematrix[i,2] <- move[[1]] 
    move[1] <- NULL 
    tictactoematrix[i,3] <- move[[1]] 
    move[1] <- NULL 
    tictactoematrix[i,4] <- move[[1]] 
    move[1] <- NULL 
    tictactoematrix[i,5] <- move[[1]] 
    move[1] <- NULL 
    tictactoematrix[i,6] <- move[[1]] 
    move[1] <- NULL 
    tictactoematrix[i,7] <- move[[1]] 
    move[1] <- NULL 
    tictactoematrix[i,8] <- move[[1]] 
    move[1] <- NULL 
    tictactoematrix[i,9] <- move[[1]] 
    move[1] <- NULL 

    move <- list(1,2,3,4,5,6,7,8,9) 
} 

出力されます:

enter image description here

は今、明らかに問題は、私はなりそれぞれにそれらをしたいしながら、すべての行が、同一であることですユニーク。そして、私は私の人生のために把握することはできませんすることは、すべての可能な組み合わせに

move <- list(1,2,3,4,5,6,7,8,9)

内のすべての番号を再配置する方法です。

+4

あなたはすべての順列を生成したいです。この[SO答え](http://stackoverflow.com/questions/11095992/generating-all-distinct-permutations-of-a-list-in-r)が行います。 – aichao

+1

ツリーは、最終的な移動の前にゲームが終了することを考慮して、より自然な構造のように見えます。また、すべての回転と反転の対称性を崩壊させることもできます。最初の移動を「コーナー」、「サイド」または「ミドル」とし、それに対する相対的な移動を定義します。 – Frank

+1

良いデータ構造は、いくつかの子と値(あなたの場合は行列)を持つ再帰的な木です。ブランチは、そのポジションからの許可された移動、またはすべての可能な移動のみであり、次にそれをクリーンアップします。 – FisherDisinformation

答えて

1

あなたが別のパッケージを使用して喜んでいる場合は、経由して直接これを行うことができます:あなただけのテーブルを探しているなら

library(combinat) 

temp <- permn(c(1,2,3,4,5,6,7,8,9)) 
fullTable <- do.call("rbind", temp) 
+1

9つのセルがあるので、0は必要ありません。 – Frank

+1

はい、それは 'permn(seq_len(9))'でなければなりません。つまり、 '10'要素のすべての順列を生成しているので、' 10! '行はあり、要求された' 9! '行はありません。私はOPがすでにあなたの答えを受け入れていることを知っていますが、修正してください。 – aichao

+1

これは機能しましたが、私は "0"を削除してしまいました。私はあなた自身の答えからそれを削除しようとしましたが、編集が小さすぎて私に許可することができません。 – user2533660

1

library(permute) 
all_games <- allPerms(1:9, how(maxperm=1e10))