L'obiettivo di questa sfida è scrivere un programma in grado di indovinare una parola nel minor numero possibile di tentativi. Si basa sul concetto dello show televisivo Lingo ( http://en.wikipedia.org/wiki/Lingo_(US_game_show) ).
Regole
Data una lunghezza della parola passata come primo argomento sulla sua riga di comando, il programma giocatore dispone di cinque tentativi di indovinare la parola scrivendo un'ipotesi sul suo output standard seguito da un singolo \n
carattere.
Dopo aver fatto un'ipotesi, il programma riceve una stringa sul suo input standard, seguito anche da un singolo \n
carattere.
La stringa ha la stessa lunghezza della parola da indovinare ed è composta da una sequenza dei seguenti caratteri:
X
: il che significa che la lettera data non è presente nella parola da indovinare?
: il che significa che la parola data è presente nella parola per indovinare, ma in un'altra posizioneO
: il che significa che la lettera in questa posizione è stata indovinata correttamente
Ad esempio, se la parola da indovinare è dents
, e il programma invia la parola dozes
, riceverà OXX?O
perché d
e s
sono corretti, e
è fuori luogo e o
e z
non sono presenti.
Fai attenzione che se una lettera è presente più volte nel tentativo di indovinare che nella parola da indovinare, non sarà contrassegnata come ?
e O
più volte del numero di occorrenze della lettera nella parola da indovinare. Ad esempio, se la parola da indovinare è cozies
e il programma invia tosses
, riceverà XOXXOO
perché ce n'è solo una s
da individuare.
Le parole sono scelte da un elenco di parole inglesi. Se la parola inviata dal programma non è una parola valida della lunghezza corretta, il tentativo viene considerato un errore automatico e X
vengono restituiti solo quelli.
Il programma del lettore dovrebbe presumere che un file con nome wordlist.txt
e contenente una parola per riga sia presente nella directory di lavoro corrente e possa essere letto secondo necessità.
Le ipotesi devono comprendere solo caratteri alfabetici minuscoli ( [a-z]
).
Non sono consentite altre operazioni di rete o file per il programma.
Il gioco termina quando O
viene restituita una stringa composta solo da o dopo che il programma ha effettuato 5 tentativi e non è stato in grado di indovinare la parola.
punteggio
Il punteggio di una partita è dato dalla formula indicata:
score = 100 * (6 - number_of_attempts)
Quindi, se la parola viene indovinata correttamente al primo tentativo, vengono assegnati 500 punti. L'ultimo tentativo vale 100 punti.
Non riuscire a indovinare la parola concede zero punti.
Fossa
I programmi del giocatore saranno valutati cercando di indovinare 100 parole casuali per ogni lunghezza di parole compresa tra 4 e 13 caratteri inclusivamente.
La selezione casuale delle parole verrà effettuata in anticipo, quindi tutte le voci dovranno indovinare le stesse parole.
Il programma vincente e la risposta accettata saranno quelli che raggiungeranno il punteggio più alto.
I programmi verranno eseguiti in una macchina virtuale Ubuntu, usando il codice su https://github.com/noirotm/lingo . Le implementazioni in qualsiasi lingua sono accettate purché vengano fornite istruzioni ragionevoli per la compilazione e / o l'esecuzione.
Sto fornendo alcune implementazioni di test in ruby nel repository git, sentiti libero di prendere ispirazione da loro.
Questa domanda verrà periodicamente aggiornata con classifiche per le risposte pubblicate in modo che gli sfidanti possano migliorare le loro voci.
La valutazione finale ufficiale avrà luogo il 1 ° luglio .
Aggiornare
Le voci possono ora assumere la presenza di wordlistN.txt
file per accelerare la lettura dell'elenco di parole per la lunghezza della parola corrente per N compresa tra 4 e 13 inclusivamente.
Ad esempio, esiste un wordlist4.txt
file contenente tutte le parole di quattro lettere e wordlist10.txt
contenente tutte le parole di dieci lettere e così via.
Risultati del primo turno
Alla data del 01/07/2014, sono state presentate tre voci, con i seguenti risultati:
4 5 6 7 8 9 10 11 12 13 Total
./chinese-perl-goth.pl 8100 12400 15700 19100 22100 25800 27900 30600 31300 33600 226600
java Lingo 10600 14600 19500 22200 25500 28100 29000 31600 32700 33500 247300
./edc65 10900 15800 22300 24300 27200 29600 31300 33900 33400 33900 262600
** Rankings **
1: ./edc65 (262600)
2: java Lingo (247300)
3: ./chinese-perl-goth.pl (226600)
Tutte le voci sono state eseguite in modo coerente, con un chiaro vincitore, essendo la voce C ++ di @ edc65.
Tutti i concorrenti sono davvero fantastici. Finora non sono stato nemmeno in grado di battere @ chinese-perl-goth.
Se vengono inviate più voci, verrà effettuata un'altra valutazione. Le voci correnti possono anche essere migliorate se ritieni di poter fare di meglio.