Programozás‎ > ‎Feladatok‎ > ‎Mastermind‎ > ‎

Megoldás

Algoritmus

Gondoljuk meg, hányféle szám lehet a gondolt szám! Mivel a jegyek különböznek, összesen 6 ∙ 5 ∙ 4 ∙ 3 = 360 lehetőség van. Mivel Bori tippelhet azonos jegyekre is, ő  6 ∙ 6 ∙ 6 ∙ 6 = 1296-féle kérdést tehet fel, vagyis ez a legnagyobb lehetséges bemenet mérete.Mindkét szám elég kicsi ahhoz, hogy végig lehessen próbálgatni az összes lehetőséget.

Vázlatosan

a tippek és válaszok beolvasása
Ciklus az összes lehetséges gondolt X számra
    Ha X minden eddig tippre adott válasszal összhangban van
        akkor X felvétele a listára
Ciklus vége
lista méretének és tartalmának kiírása

Ismétlődő jegyek kizárása

Az algoritmus tervezésekor szóba került, hogyan lehetne hatékonyan generálni a lehetséges ismétlés nélküli variációkat. Végül úgy döntöttünk, hogy négy elem esetén a "buta" algoritmus tökéletesen megfelel: minden variációt legyártunk, és kizárjuk azokat, ahol vannak egyenlő elemek.

Ciklus a := 1 - től 6 -ig
    Ciklus b := 1 - től 6 -ig
        Ciklus c := 1 - től 6 -ig
            Ciklus d := 1 - től 6 -ig
                Ha NEM( a=b vagy a=c vagy a=d vagy b=c vagy b=d vagy c=d) akkor
                    (a,b,c,d) vizsgálata
                Elágazás vége
            Ciklus vége
        Ciklus vége
    Ciklus vége
Ciklus vége

Kódok

Mikó Péter (pascal): mp_master.pas
Mezei Balázs (c++): mb_master.cpp
Ódor Gergő (c++): og_master.cpp
Erben Péter (java): ep_master.java
Lipták Bence (pascal): lb_master.pas
Varga Erik (c++): ve_master.cpp