Homework 3 - vincere il MasterMind

Vedi anche: DomandeHomework3

Il terzo homework consiste nell'implementazione di una semplice strategia per giocare a MasterMind (dal lato di chi indovina il codice).

Il codice da indovinare è di 5 cifre,

L'esercizio non è difficile, visto che potete usare il codice del MasterMind già pubblicato per confrontare il codice corrente con ciascuno dei tentativi già fatti.

Discussione della strategia

Supponete che siano stati eseguiti già alcuni tentativi, questo separa lo spazio dei codici in due insiemi, i codici che sono in accordo con le proposte precedenti e quelli che non lo sono.

Vogliamo proporre solo codici che sono in accordo con tutti i tentativi precedenti.

Il programma gioca contro di voi, che conoscete il codice segreto, e cerca di trovarlo proponendovi una successione di tentativi (un po' come faceva alto-basso) e ricevendo da voi in risposta il numero di strike e ball.

Strategia da implementare

La strategia da implementare consiste nell'esplorare consecutivamente tutti i codici a partire da 00000 e proporre il primo codice che è in accordo con tutti i tentativi fatti:
  • all'inizio la prima proposta (non essendoci tentativi) sarà il codice 00000
  • ottenuta la risposta del giocatore la si memorizza assieme al codice proposto
  • successivamente si esaminano i codici 00001, 00002, 00003 .... e li si confronta con tutti i codici proposti in precedenza
    • se il codice in esame, confrontato con ciascuno dei tentativi fatti, produce le proprio la risposta corrispondente, lo si propone come nuovo tentativo e memorizza assieme alla risposta del giocatore
    • altrimenti (se il confronto con uno dei tentativi precedenti dà un risultato diverso da quello che il giocatore umano aveva risposto) si passa ad esaminare il codice successivo.
  • Si eseguono al massimo 20 tentativi

Terminazione

Il programma termina (e esce) se:
  • ha trovato il codice segreto (ha letto 5 strike e 0 ball)
  • oppure se non ci sono più codici disponibili (si è arrivati al codice 99999)
  • oppure se ha proposto già 20 tentativi senza successo

Output

Il programma stampa solo i tentativi, ciascuno come un numero decimale di 5 cifre seguito da accapo.

Input

Il programma legge in input 2 interi separati da spazio che indicano, nell'ordine:
  • il numero di strike ottenuti (un numero tra 0 e 5 compresi)
  • il numero di ball ottenuti (un numero tra 0 e 5 compresi)

Gestione degli errori

NON gestite alcun errore, si assume che l'input sia sempre corretto.

Esempio di Input-Output

Credo che questi siano degli esempi corretti, sono le 2.30AM ed ho sonno, domani controllo di nuovo.

In rosso il numero di strike e ball che voi battete sulla tastiera fornendoli in input al programma.

Esempio 1 (13732)Esempio 2 (98765)Esempio 3 (10016)
00000
0 0
11111
1 0
12222
2 0
12333
2 2
13234
3 1
13253
2 2
13632
4 0
13732
5 0
00000
0 0
11111
0 0
22222
0 0
33333
0 0
44444
0 0
55555
1 0
56666
1 1
75677
0 3
86758
1 3
87569
1 4
97856
1 4
98765
5 0
00000
2 0
00111
2 2
01012
2 2
01103
0 4
10014
4 0
10015
4 0
10016
5 0

Scadenza

L'esercizio va consegnato entro mercoledì 19 novembre (PROROGATO).

Consegna degli esercizi

  • Attenzione: viste numerose richieste, ho deciso di prorogare la scadenza dell'homework 4 a mercoledì 22 dicembre sempre alle 23:59.
  • La scadenza dell'Homework 5 è stata (ri)fissatta per venerdì 14 gennaio 2005 sempre alle 23:59.
  • Dovete essere iscritti a twiki
  • Dovete aver mostrato un documento di identità a Ivano Salvo (oppure mandatemene una scansione per email)
  • Vi devo aver abilitato (controllate in StudentiProg1Group o ArchitettureUnoGroup )
  • Gli esercizi vanno consegnati esclusivamente usando la pagina di consegna: ATTENZIONE in questo momento sono attive due pagine, una per l'homework 4 e una per l'homework 5.
Evitate di fare confusione!

    • Io registro/abilito nuovi iscritti e aggiorno password solo fino al venerdì sera
    • quindi fate una prova durante la settimana per controllare che tutto vi funzioni!
  • Non verranno accettati esercizi consegnati per email
  • Ora sono le 15:10

-- AndreaSterbini - 27 Oct 2003


This topic: Programmazione1/AA0506/PZ > HomeWork3
Topic revision: r11 - 2003-11-19 - AndreaSterbini
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback