Für ein selbst zugewiesenes Projekt habe ich beschlossen, jedes mögliche Spiel von Tic-Tac-Toe zu erstellen. Um jedes dieser Spiele zu speichern und darzustellen, entschied ich mich für eine Matrix mit 9 Spalten und 362880 Zeilen. Jede Reihe ist ein Spiel, in dem die ungeraden Spalten "X" sind und die geraden Spalten "O" sind.Erstellen Sie eine Matrix aller neunstelligen Zahlen, die keine doppelten Ganzzahlen enthalten.
(1,2,3,4,5,6,7, NULL, NULL) repräsentiert ein Spiel, bei dem X gewinnt.
diesem Grund habe ich jede neunstellige Zahl erzeugen möchten, die keine doppelten Zahlen enthält, als eine doppelte ganze Zahl, dass ein Spieler eine Position zu markieren bedeuten würde versucht, die bereits belegt ist.
Im Folgenden finden Sie die Anfänge einer möglichen Methode
#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)
}
Der Ausgang:
Jetzt offensichtlich das Problem mit ist, dass jede Zeile identisch ist, während ich sie zu jeder möchte sein einzigartig. Und was kann ich nicht für das Leben von mir herauszufinden, ist, wie jede Zahl in der
move <- list(1,2,3,4,5,6,7,8,9)
in jede mögliche Kombination neu zu ordnen.
Sie wollen alle Permutationen erzeugen. Dies wird [SO Antwort] (http://stackoverflow.com/questions/11095992/generating-all-distinct-permutations-of-a-list-in-r) tun. – aichao
Ein Baum scheint eine natürlichere Struktur zu sein, wenn man bedenkt, dass Spiele vor dem letzten Zug enden können. Sie können auch alle Rotations- und Klappsymmetrie reduzieren: Lassen Sie die erste Bewegung "Ecke", "Seite" oder "Mitte" sein und definieren Sie andere Bewegungen relativ dazu. – Frank
Eine gute Datenstruktur wäre ein rekursiver Baum, der einige Kinder und einen Wert (Matrix in Ihrem Fall) hat. Die Zweige wären die erlaubten Bewegungen von dieser Position oder nur alle möglichen Bewegungen, die du dann sauber machst. – FisherDisinformation