Newsgroup: it.hobby.enigmi
Titolo: Programmino Master Mind

Ciao a tutti,
ho scritto una versione di Master Mind classico (6 colori e 4 buchi). 
Qualche tempo fa chiesi informazioni sulle regole di questo gioco quindi se 
qualcuno che lo conosce volesse provarlo e dirmi se le informazioni che il 
gioco da sono corrette, mi farebbe un piacere :)
Il programma e' per DOS/Windows ed occupa solo 5 KiloByte.
Lo trovate su 
www.geocities.com/noixe82/MasterMind.zip
Grazie 

Il programma e' per DOS/Windows ed occupa solo 5 KiloByte.
Uhm... questo "solo" m'insospettisce: in che linguaggio
l'hai fatto? non sara' visual basic?
Pensa che e' stato il primo programma (dopo Salve Mondo)
che ho fatto con ogni linguaggio che ho cercato d'imparare.
Con lo z80 l'avevo dovuto contenere in 100 passi! in pascal
ce li dovrei ancora avere i sorgenti, ma l'eseguibile era
piccolissimo (DOS puro) pero' era senza colori.
-- 
Saluti, Dalet

 piccolissimo (DOS puro) pero' era senza colori.
Non so, io ho aggiunto delle caratteristiche per gestire ad es. l'input, 
onde evitare caratteri errati. I colori sono anch'essi gestiti da una 
libreria per applicazioni DOS infatti sono soltanto 16 quelli disponibili.
Ciao 

 ho scritto una versione diMasterMindclassico (6 colori e 4 buchi).
Ciao,
qualche anno fa (beh ormai piu di dieci, sigh...) ne avevo scritto una
versione per Windows, con una grafica semplice ma funzionale. Se vuoi
dare un'occhiata lo trovi qui assieme ad altri giochetti:
http://www.gferrari.com/wingames.html
è scritto in Borland Delphi, che è in pratica un Pascal visuale e
object-oriented, se vuoi vedere i sorgenti te li posso mandare senza
problemi (devo prima cercarli però :-). Tra l'altro da poco è uscita
un versione gratuita del compilatore che si chiama TurboDelphi.
Ciao
Giulio

un versione gratuita del compilatore che si chiama TurboDelphi.
Ciao, adesso li vedo. Conosco Delphi, ho letto una guida qualche anno fa 
(Delphi 4).

dare un'occhiata lo trovi qui assieme ad altri giochetti:
Li ho visti sono carini. Ma conosci bene Delphi immagino. Sei un 
programmatore?
Ciao 


Al momento solo per hobby, anche se per un po' di tempo l'ho fatto
anche per lavoro. Quei giochi sono i miei primi esperimenti con il
linguaggio Delphi, dopo tanto Pascal. Delphi è un linguaggio
meraviglioso, che uso da anni e conosco abbastanza bene.
Se ti piace il Pascal e la sua filosofia, non puoi non provare
TurboDelphi...
Ciao
Giulio

 
Ciao

 [cut]
Ah, poi, nella sequenza da indovinare non mi risulta si possa usare più 
volte un colore.
Ciao!
il p.

10 numeri anziché con 6 colori)
Ma non e' strike e spare?
Di solito a mano si gioca con le cifre 1...6 al posto dei
colori e il simolo X per strike=NERO ed invece / per
spare=BIANCO.
Con 10 invece non e' l'originale.
-- 
Saluti, Dalet

volte un colore.
Come codice segreto puoi mettere anche tutti e quattro
dello stesso colore ed altrettanto nei tentativi, anche se
non ti conviene in entrambi i casi.
Questo da regolamento ufficiale son sicuro.
-- 
Saluti, Dalet

 "ball", parole più corte e fanno meno disordine
Non sapevo si usassero tali termini. Comunque ho cercato di calcolare la 
posizione in cui devono apparire tutte le scritte in modo da avere tutto in 
maniera più ordinata possibile.
Ciao 

Al momento solo per hobby,
Ah, pensi di diventarlo? Studi informatica?
Ciao 

 
Ciao!
il p.

 
Ah, allora è un po' diverso. Insomma, io solitamente gioco alla versione 
  con 10 numeri (0..9) e nella combinazione da indovinare non si possono 
ripetere numeri. Poi, l'ho sempre sentito chiamare Strike&ball, con il 
segno X per lo strike e O per il ball.
Ciao!
il p.

"Noixe" <no...@TOGLIMIemail.it> wrote

All'epoca avevo scritto anch'io un programmino di mastermind, risale a un
paio di anni fa, mi sembra di averlo scritto dopo che l'argomento mastermind
era stato trattato qui sul ng (periodicamente il tema ritorna). E' scritto
in C# (?), ho provato a dare un'occhiata al codice sorgente ma non ho capito
niente di quello che fa! Mi ricordo però l'idea che all'epoca avevo voluto
implementare: il programma svolge, a richiesta, il ruolo di codificatore e
di decodificatore. Come decodificatore implementa la seguente strategia:
adotta di volta in volta come tentativo quello che, nell'ipotesi di risposta
peggiore da parte dell'avversario, riduce al minimo la rosa delle scelte
rimanenti. Come codificatore implementa una strategia un po' perfida (e
penso anche un po' illegale...): invece di scegliere inizialmente a caso un
codice, non sceglie niente e basa le sue risposte sui tentativi
dell'avversario, fornendo sempre la risposta peggiore per l'avversario
(naturalmente tra quelle coerenti con l'andamento della partita).
Come interfaccia utente è quanto di peggio si possa concepire: interfaccia a
carattere, input non controllato (se ci si sbaglia a digitare si inchioda o
procede a casaccio), i colori sono rappresentati da cifre da 0 a 5 su 4
posizioni, le risposte vengono fornite in termini di Neri (cifra giusta nel
posto giusto) e Bianchi (cifra giusta nel posto sbagliato). Se barate nel
dare le risposte, non se ne accorge e va avanti tranquillo. Al termine di
ogni round il programma termina.
Trattandosi di un programma in C#, credo proprio che abbia bisogno del
Framework .NET installato sulla macchina ospite.
All'epoca non lo avevo testato più di tanto, quindi spero che faccia
effettivamente quello che ho detto, ma non garantisco. Siccome è un file
molto piccolo (4 KB zippato), tento di allegarlo qui. Se non dovesse
passare provo a metterlo sul "nostro" newsgroup:
http://it.groups.yahoo.com/group/enigmi/
. Se poi qualcuno lo vuole prendere
da lì e metterlo in un posto più accessibile, non c'è problema (sempre che
la cosa interessi a qualcuno).
Ciao
Giorgio

 (naturalmente tra quelle coerenti con l'andamento della partita).
Eheh va be, in effetti credo non sia legale. In questo caso il gioco lo 
dovresti chiamare Bastard Mind! :-)
Ciao

 associa un numero tra parentesi. Che cosa indica?
Dovrebbe essere un'indicazione del numero delle possibili soluzioni che 
rimangono nel caso che la risposta sia quella indicata dalle due cifre che 
seguono (e che il programma considera la peggiore dal suo punto di vista).
Ciao
Giorgio

dovresti chiamare Bastard Mind! :-)
Esiste, e' una variante del mastermind, e spesso viene
chiamato mastermind attivo.
Ma in pratica e' un altro gioco in cui viene eliminata la
fortuna. Pero' con 6 colori si giunge in fretta all'
esperienza sufficiente a pareggiare tutte le partite (sempre
6 da entrambi) e quindi a togliere ogni interesse al gioco.
-- 
Saluti, Dalet

 un'occhiata.
Ok ho riprovato e in 5 tentativi in effetti ci è riuscito, probabilmente ho 
sbagliato io a inserire Neri e Bianchi.
Ma l'algoritmo che hai applicato è di tua invenzione o è reperibile in rete? 

 rete?
Se sia reperibile in rete non saprei. Non vorrei averti fuorviato con il 
fatto che guardando il codice sorgente non ho capito che cosa facesse: 
questa è proprio la dimostrazione che l'ho concepito io! :-)
Guarda che non è niente di stravolgente, l'avrò scritto in un mezzo 
pomeriggio, solo che volendo usare C# (e non ricordo perché), l'ho condito 
con classi strane e cose forse anche inutili e non mi viene molto voglia di 
capirne la logica. Se lo riscrivessi oggi lo farei in tutt'altro modo (e 
domani in un altro modo ancora).
Comunque, se ti interessa il sorgente, te lo do, a patto che non mi chiedi 
chiarimenti e che non lo consideri un esempio di come si debba programmare e 
che non lo divulghi in giro dicendo che l'ho scritto io! :-)
Fammi sapere, anche in privato (il mio indirizzo è valido).
Ciao
Giorgio

 Fammi sapere, anche in privato (il mio indirizzo è valido).
Ok eventualmente puoi mandarlo a noixe at 
email.it
Pensavo applicassi qualche algoritmo noto, qualcosa insomma che ottimizza i 
tentativi necessari. Ma avevo in mente di inventarne uno io, forse ci penso 
un po'.
Ciao 

 (naturalmente tra quelle coerenti con l'andamento della partita).
Quindi e' come se la costruisse gradualmente, in base alle richieste?
Ciao 

 
Boh... considerando il basso numero di possibilita' in gioco, io credo 
che un semplice algoritmo di risoluzione del master mind con M su N 
colori preveda di generare numeri in base N di M cifre, e incrementare 
fino al successivo numero compatibile con le precedenti risposte.
Nel caso di 4 su 6 colori si prendono tutti i numeri in base 6
da 0000 a 5555
il primo lo si prende casualmente e poi si incrementa sempre
quando si arriva a 5555 si riparte da 0000.
Algoritmo molto stupido ma decisamente efficiente, e non credo che si 
possa fare molto meglio.

 possa fare molto meglio.
Sì, questo è il primo approccio a cui di solito si pensa ed è anche molto
facile da implementare (questo stesso tuo algoritmo lo avevo implementato in
un mio primo programma di mastermind che ormai risale a oltre 25 anni fa
:-( ). Però è vero che non dà le prestazioni migliori. Come esempio basta
pensare al caso (abbastanza frequente) in cui hai battezzato con certezza 3
neri e ti rimangono 3 scelte possibili per il quarto piolo. Se provi solo
tentativi compatibili puoi risolverlo in 1, 2 o 3 tentativi (in media 2).
Se invece l'algoritmo prevede l'utilizzo di tentativi non compatibili, con
un'opportuna scelta hai la certezza di disambiguare il piolo in un tentativo
(sicuramente sbagliato) e di indovinarlo con certezza al secondo. In
generale ci sono molti altri casi in cui un tentativo sicuramente sbagliato
fornisce indicazioni maggiori anche del miglior tentativo compatibile (nel
mio listato c'è una riga commentata che esclude i tentativi non compatibili,
se la decommento i tempi migliorano di molto ma la efficacia peggiora).
Naturalmente questo algoritmo "migliorato" (che di ogni tentativo (anche non
compatibile) valuta la "bontà") è un po' più complesso da implementare ma
l'idea base è la stessa: si devono provare tutte le possibilità scegliendo
per ogni turno quella che promette le informazioni migliori. Con 4 pioli e 6
colori i tempi rimangono accettabili; con 5 pioli e 8 colori (Super Master
Mind?), i tempi si allungano e bisognerebbe studiare qualche forma di
ottimizzazione (non dovrebbe essere difficile, anche perché il mio attuale
programmino non è stato concepito per l'efficienza in termini di esecuzione,
però non ho davvero voglia di riprenderlo in mano).
Ciao
Giorgio

 quando si arriva a 5555 si riparte da 0000.
In questo modo si andrebbero eliminando tutti i casi che non possono essere 
soluzione? 

 però non ho davvero voglia di riprenderlo in mano).
5 pioli e 8 colori producono meno di 10.000 combinazioni (10.000 
combinazioni sono prodotte da 5 pioli e 10 colori).
E un computer a generare 10.000 numeri consecutivi oggigiorno ci mette 
meno del tempo con cui tu leggi ba!
Il mastermind e' un gioco talmente limitato che coi computer di oggi non 
ha senso parlare di tempo di elaborazione.
Forse lo era anni fa ai tempi del tuo vecchio programmino.

Noixe ha scritto:

Si.
Tu parti da un numero qualunque, es 1234, quindi continui ad 
incrementare fino al successivo che rispetta tutte le condizioni, e poi 
incrementi fino al successivo...
quandi arrivi a 5555 riparti da 0000 e vai incrementando...
Alla fine arrivi al risultato.
Oppure ritorni a 1234 e vuol dire che l'avversario ti ha fornito 
indicazioni errate.

 indicazioni errate.
Ok ma in quanti tentativi scopre la soluzione? Ci riesce in 5/6 tentativi? 

 combinazioni sono prodotte da 5 pioli e 10 colori).
Dati p pioli e c colori le combinazioni sono c^p quindi
5 pioli e 8 colori vuol dire 8^5 = 32.768 combinazioni.
5 pioli e 10 colori vuol dire 10^5 = 100.000 combinazioni.
Ciao 

Noixe ha scritto:

Tendenzialmente si.
Il numero di tentativi dipende molto dalla casualita' del primo 
tentativo, ma in 5/6 ci si sta comodi.
Si puo' provare a fare una simulazione.

 Forse lo era anni fa ai tempi del tuo vecchio programmino.
Il fatto è che il mio programma non si limita a generare a caso uno di quei 
tentativi (che sarebbero 32678 con 5 pioli e 8 colori), ma li passa in 
rassegna tutti per stabilire quale riduce al minimo le possibilità 
successive; quindi per ognuno valuta le possibili risposte e prende il 
tentativo che, in caso di risposta più sfavorevole, minimizza il numero dei 
tentativi rimanenti. Come ti ho detto, sarà anche migliorabile, ma qualche 
ciclo annidato da gestire c'è e questo allunga i tempi di elaborazione.
Ciao
Giorgio

 per ogni turno quella che promette le informazioni migliori. Con 4 pioli e 6
Qua c'e' uno studio che parla anche della strategia migliore per il
master mind a 6 colori (e fa delle stime per versioni piu' generali):
http://www.tnelson.demon.co.uk/mastermind/

 Grazie
Dove posso scaricarlo?
che con questo indirizzo 
www.geocities.com/noixe82/MasterMind.zip
yahoo mi dice che la pagina non esiste o similia
grazie


https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&ved=2ahUKEwij9MLyqsrpAhUksKQKHdMrCnYQFjAAegQIARAB&url=https%3A%2F%2Fdocs.google.com%2Fviewer%3Fa%3Dv%26pid%3Dsites%26srcid%3DZGVmYXVsdGRvbWFpbnxhbHZhcm9kZWdhc2FycXVpdm9zfGd4OjIyMWE0ZjljNTNkYmUwYWM&usg=AOvVaw1av9iV2NP6BEjh_pDw6_92