Master Mind


Du ska skriva ett program som spelar Master Mind. Användaren tänker på en kombination av fyra bokstäver där varje bokstav väljs i intervallet A till E och programmet ska lista ut vilken kombination som är korrekt. Det kan t.ex. se ut så här:

    Tänk på en kombination av 4 bokstäver mellan A och E, så ska
    jag lista ut vilken det är. För varje gissning ska du ange
    rätt och fel med t ex RFF, där
      R innebär att en bokstav är rätt och står på rätt plats
      F innebär att en bokstav är rätt men står på fel plats

    Jag gissar på BABC och du svarar: F
    Jag gissar på DBED och du svarar: RRF
    Jag gissar på DEEB och du svarar: RR
    Jag gissar på DEAD och du svarar: RRRR
    Det tog 4 gissningar.

(Texterna "F", "RFF", "RR" och "RRRR" är här användares svar.)

Programmet ska inte gissa på omöjliga kombinationer, dvs. sådana som inte stämmer med svaren på tidigare gissningar. Det enklaste sättet att klara detta är att hålla reda på samtliga kvarvarande möjligheter (från början alla möjliga kombinationer) och efter varje nytt svar plocka bort dem som inte längre är möjliga.

Programmet ska välja sina gissningar slumpmässigt, så att man för samma korrekta kombination inte alltid får samma sekvens av gissningar.

Om programmet inte längre har någon möjlig kombination måste användaren ha gjort fel. I detta läge ska detta rapporteras, t.ex:

    Tänk på en kombination av 4 bokstäver mellan A och E, så ska
    jag lista ut vilken det är. För varje gissning ska du ange
    rätt och fel med t ex RFF, där
      R innebär att en bokstav är rätt och står på rätt plats
      F innebär att en bokstav är rätt men står på fel plats

    Jag gissar på CAAC och du svarar: RF
    Jag gissar på AEAD och du svarar: RR
    Jag gissar på ABAB och du svarar: RR
    Jag verkar inte kunna lösa det. Vad tänkte du på? ABCD
    På min gissning CAAC svarade du 'RF', skulle vara 'FF'!

Det ska vara enkelt att byta såväl längden av kombinationerna som antalet bokstäver som används. Det bör också vara enkelt att byta ut in- och utmatning t.ex. om man vill göra en variant som använder grafik.