Oppgava er svært enkel, og basert på spelet Master Mind, med enkelte modifiseringer.
Brettet du skal spele på har her 5 felt bortover, organisert slik:
I tillegg er det uendelig langt. I kvart av felta <tall> vil det vere eit tall mellom 0 og F (heksadesimalt). Det burde gi 16^5 kombinasjoner, altså 1048576. Ved vill gjetting (bruteforce) burde det ta i snitt 524288 forsøk. Imidlertid så skal det gå fint å lage ei god algoritme som løser dette på betydlig færre forsøk.
Oppgava er å lage et program som gjetter seg fram til kombinasjonen av dei 5 talla så fort som mulig, med færrast mulig forsøk. Når programmet blir starta vil det begynne med å printe ei linje med fem valgfrie tall slik:
Deretter vil "spillet", mastermind, svare med 0, 1 eller 2 for kvart felt. 0 vil sei at tallet er heilt galt. 1 vil sei at tallet finst i koden, men er feil plassert. 2 vil sei at tallet er rett plassert. Dersom vi tenker oss at det tallet vi skal gjette oss fram til er A 0 3 2 9 så vil spillet svare med følgande:
som da indikerer at A er rett plassert, D ikkje finst i tallet en skal gjette seg fram til, og at 9 finst, men er feilplassert.
La oss ta et fullt eksempel fram til ferdig løst kode. Det hemmelige tallet vi skal gjette oss fram til er 1 2 3 4 5 her, for enkelheitsskuld.
Når programmet er ferdig skal det printe kor mange forsøk det brukte på å komme fram til rett resultat.
Kjøretid er uviktig, det viktige her er tall forsøk som blir brukt.
Programmet vil bli testa med 10 ulike, tilfeldige, tallsett. Det er gjennomsnittlig tall forsøk i løpet av dei 10 rundane som teller.
Når det gjelder tillate språk så er det veldig enkelt. Eg har eit par vilkår:
Brettet du skal spele på har her 5 felt bortover, organisert slik:
Kode
|<tall>|<tall>|<tall>|<tall>|<tall>
Oppgava er å lage et program som gjetter seg fram til kombinasjonen av dei 5 talla så fort som mulig, med færrast mulig forsøk. Når programmet blir starta vil det begynne med å printe ei linje med fem valgfrie tall slik:
Kode
A D 2 9 4
Kode
2 0 1 1 0
La oss ta et fullt eksempel fram til ferdig løst kode. Det hemmelige tallet vi skal gjette oss fram til er 1 2 3 4 5 her, for enkelheitsskuld.
Kode
$ start MasterMindSolver M er ditt program sin utdata, S er input til ditt program. 1 2 3 4 5 M: 9 4 8 1 4 S: 0 1 0 1 0 M: 1 0 4 5 2 S: 2 0 1 1 1 M: 1 2 5 4 3 S: 2 2 1 2 1 M: 1 2 3 4 5 S: 2 2 2 2 2
Kjøretid er uviktig, det viktige her er tall forsøk som blir brukt.
Programmet vil bli testa med 10 ulike, tilfeldige, tallsett. Det er gjennomsnittlig tall forsøk i løpet av dei 10 rundane som teller.
Når det gjelder tillate språk så er det veldig enkelt. Eg har eit par vilkår:
- Eg skal kunne kjøre det uten alt for mykje bry.
- Du kan bruke eksterne bibliotek dersom du vil. I såfall må dei finnast til Linux
- Ikkje lag GUI. Eg vil ha tekst-versjon for å automatisere testinga av dei.
- Du må skrive ut tall forsøk du brukte på slutten
- Kildekoden må vere tilgjengelig for meg, ellers vil det ikkje bli kjørt!
- Generelt blir eg glad om det blir i ett av følgande språk: c, c++, java, php, perl eller brainfuck. Gigantisk bonus til dei som gjennomfører det i BrainFuck.