Ho potuto trovare solo sfide di code-golf per Mastermind, quindi ecco una versione di code-challenge che mi sarebbe piaciuto affrontare.
Una strategia ottimale per il normale gioco Mastermind, MM (4,6), è stata trovata da Koyama e Lai nel 1993, con un numero medio di ipotesi = 5625/1296 ~ 4.34. MM (5,8) è ancora irrisolto, ma si stima che abbia un numero medio di ipotesi ~ 5,5.
Il tuo compito è quello di creare una strategia MM (5,8), ovvero per 5 fori e 8 colori, che copra tutte le pow(8,5) = 32768
possibili soluzioni distinte. Ovviamente, non deve essere ottimale. Hai due scelte:
- Pubblica un programma deterministico che genera la strategia. Il programma deve essere compilabile / eseguibile su Windows 7, Mac OS X o Linux senza software aggiuntivo non libero.
- Pubblica la tua strategia (insieme al tuo nome StackExchange) da qualche parte su Internet e pubblica qui l'URL.
In entrambi i casi, indica il punteggio (vedi sotto) nell'intestazione della risposta.
La strategia deve essere codificata secondo la seguente grammatica:
strategy : guessing-strategy | known-solution-strategy
guessing-strategy : '{' guess ':' branches '}'
known-solution-strategy : guess
guess : color color color color color
color : 'A'..'H'
branches : '{' branch (',' branch)* '}'
branch : reply ':' strategy
reply : number-of-blacks number-of-whites
number-of-blacks : number-of-key-pegs
number-of-whites : number-of-key-pegs
number-of-key-pegs : '0'..'5'
L'algoritmo utilizzato per decidere il numero di pioli di tasti bianco / nero è descritto in http://it.wikipedia.org/wiki/Mastermind_(board_game)
Si noti che la risposta "50" (ovvero ipotesi corretta) è implicita e non fa parte della grammatica.
Punteggio: N = la somma del numero di ipotesi per ciascuno dei 32768 percorsi / soluzioni. Vince la strategia con la N più bassa. Primo pareggio: il numero massimo più basso di ipotesi. Secondo tie-break: la prima risposta pubblicata. La competizione termina il 1 agosto 2014 alle 0:00 GMT .
Un esempio di strategia per MM (2,3) con punteggio = 21:
{AB:{10:{AC:{10:AA,01:CB,00:BB}},02:BA,01:{BC:{01:CA}},00:CC}}
Usando questa strategia, i 9 giochi possibili andranno così:
- AB 20
- AB 10, AC 20
- AB 10, AC 10, AA 20
- AB 10, AC 01, CB 20
- AB 10, AC 00, BB 20
- AB 02, BA 20
- AB 01, BC 20
- AB 01, BC 01, CA 20
- AB 00, CC 20
Presto pubblicherò un verificatore di strategia MM (5,8) basato su Java per vostra comodità.
{AB:{10|01:BB}}
? Ho una risposta, ma è abbastanza ingenuo e, a causa della struttura ad albero della grammatica, non si ridimensiona affatto bene (4 fori, 3 colori, genera una strategia di 147 MB, che potrei ridurre significativamente combinando parti di l'albero).