Soutěž: Machr na algoritmy - Mastermind
Zadání
V dnešním machrovi si zkusíte napsat program, který vyřeší logickou hru Mastermind. Jedná se o logickou hru, v česku známou pod názvem Logik a určitě ji všichni znáte z dětství. Kdo ne, připomenu Logik.
My si ovšem hru trochu zobecníme. V původní verzi se vyskytovalo 6 barev a byly 4 pozice, do kterých bylo možné barvy umístit. Pro machra může být pozic i barev variabilní množství. Počet pozic a barev program dostane na standardním vstupu. Následně bude program vypisovat kombinace (opět na standardní výstup). Pro každou kombinaci program na standardním vstupu dostane počet barev, které program uhádl, ale neumístnil na správnou pozici. Následně dostane číslo udávající počet barev, které jsou uístěny na správné pozici. Protože by se z barvami špatně pracovalo, nahradíme je čísly indexovanými od nuly. Uvedu příklad.
Budeme předpokládat standardní pravidla, tedy 4 místa a 6 barev. Můj program si vymyslí kombinaci "2 0 3 4".
>4 6 #počet míst, počet barev
<0 1 2 3 #kombinace vypsaná programem
>3 0 #3 ze 4 barev správých barev použity, žádná z nich není na správním místě
<2 1 4 3
>2 1 #2 barvy nejsou na správním místě, 1 barva je na svém místě
<2 0 3 4
>0 4 #všechny 4 barvy jsou na svém místě
Použití operátor větší a menší (<,>) pouze symbolizuje vstup a výstup z programu.
Pravidla:
- Nejlépe bude vyhodnocen program, který vyřeší zadané kombinace v nejmenším počtu kroků (pro 4 místa a 6 barev stačí 5 tahů)
- Jedna barva může být v jedné kombinaci použita vícekrát (například kombinace "0 0 0 0" je také platná)
- Program se musí po obdržení vstupu "0 k" kde k je počet míst (tedy ve chvíli, kdy program uhádne všechny barvy a jejich pozice) ukončit.
Ještě jednou opakuji, že se pracuje pouze ze standardním vstupem a výstupem (pro C++ cin/cout; pro C# třída Console, pro Javu System.out a System.in, atd.). Kromě zadaných hodnot nic jiného nevypisujte. Vstupy budou přesně ve formátu, jak je popsáno výše, není tedy potřeba ošetřovat vstupy.
Povolené jazyky jsou: C, C++, C#, Java, Python, JavaScript (pod NodeJS).
EDIT: Není přesně řečeno, jak se bude vyhodnocovat vzor, ve kterém se vyskytuje více stejných barev. Doporučuji přečíst komentáře, kde je to blíže popsáno.
Výhra
Vítěz dostane placku Machr, pár samolepek a ocenění do portfolia.
Výsledky
Jméno | bodů | Řešení ( Stáhnout vše ) |
---|---|---|
John Doe | 100 | Stáhnout řešení |
Libor Šimo (libcosenior) | 49 | Stáhnout řešení |
Zobrazeno 5 zpráv z 55.