Per imparare Clojure Sto lavorando a un piccolo gioco Tic Tac Toe. Dopo aver completato la prima parte del gioco con relativa facilità, ho faticato a provare a costruire un riproduttore di computer intelligente.Clojure: Iterating su un vettore di vettori per trovare il primo vettore che soddisfa una determinata condizione
Per la prova che sto scrivendo per aiutare a guidare questo, voglio verificare che il computer raccoglie punto 9 se è il turno del computer e questo è il consiglio:
X | O | 3
4 | X | O
7 | 8 | 9
per iniziare il gioco, la scheda viene definito in questo modo, come una mappa con coppie chiave-valore che rappresentano la posizione sulla scheda e il contenuto di quello spazio:
(def board {1 "1" 2 "2" 3 "3" 4 "4" 5 "5" 6 "6" 7 "7" 8 "8" 9 "9"})
ho avuto alcuni pensieri su come risolvere questo problema. Uno era di definire i set vincenti come questo:
(def winning-sets
[[(board 1) (board 2) (board 3)],
[(board 4) (board 5) (board 6)],
[(board 7) (board 8) (board 9)],
[(board 1) (board 4) (board 7)],
[(board 2) (board 5) (board 8)],
[(board 3) (board 6) (board 9)],
[(board 1) (board 5) (board 9)],
[(board 3) (board 5) (board 7)]])
iterare su ogni set:
(for [set winning-sets]
(filter #(= symbol %) set))
Ma questo non mi sembra giusto ... non so dove sarei andato da lì . Il problema che sto cercando di risolvere può essere descritto in questo modo:
dire al computer di guardare oltre gli 8 set vincenti e trovare un set che ha due dei vostri simboli e un punto aperto.
Sono abbastanza nuovo per Clojure, quindi non sono sicuro di aver capito il modo migliore per affrontare questo problema. Ho esaminato lo ClojureDocs (verificando le funzioni iterating come for
e loop
e case
), ma non sono riuscito a farlo funzionare.
Quale sarebbe il modo migliore per scorrere su quei set vincenti, attualmente in forma vettoriale, e trovare il set che ha due di un simbolo specifico e un'apertura? O sarebbe meglio memorizzare i set vincenti in una struttura dati diversa?
NOTA: Ho letto le risposte a this question, ma non sono stato in grado di applicarle al mio.
Penso che tu voglia una qualche funzione. – Kevin