Kamarádi z vojny, Jarda, Mirek, Luďa, Béďa, Čeněk, Mates a Kvído mají sraz po mnoha letech a na závěr si udělají společné foto. Vzpomenou si na svého bývalého velitele a fotku mu pošlou. S trochou škodolibosti mu ovšem neprozradí přímo, kdo je kde na obrázku. Poskytnou mu pouze nápovědu, která ho při troše důvtipu dovede k cíli.
Obrázek 1. Fotka beze jmen.
Nápověda se skládá z kusých informací typu:
Příklad nápovědy k Obrázku 1:
Poznáš kdo je kdo podle zadané nápovědy? (Pro ověření, zde je řešení)
Je dána posloupnost postav v pořadí, v jakém se vyskytují na fotce. Každá postava je definovaná barvou kalhot a barvou košile. Dále je definována množina omezení, která musí být všechna splněna. Cílem je nalézt přiřazení pozic všem postavám tak, aby byla dodržena všechna definovaná omezení.
Vstupní soubor obsahuje dva řádky
následováno seznamem postav, uvozeným řádkem s textem “postavy:”, v pořadí jak jsou na obrázku (z pohledu pozorovatele), kde
následováno seznamem omezení těchto typů
Ne všechna omezení musí být v dané úloze definována.
Příklad vstupního souboru k Obrázku 1:
Jarda Mirek Luda Beda Cenek Mates Kvido zluta hneda cervena modra postavy: hneda-modra cervena-hneda modra-zluta modra-cervena cervena-zluta zluta-hneda zluta-zluta omezeni: sousedi(Jarda, Mirek) nesousedi(Beda, Mirek) nalevoOd(Mirek, Luda) nalevoOd(Cenek, Beda) nalevoOd(Kvido, Jarda) napravoOd(Luda, Kvido) maKosiliBarvy(Mirek, Zluta) maKosiliBarvy(Beda, hneda) maKosiliBarvy(Cenek, zluta) nemaKosiliBarvy(Mates, cervena) maKalhotyBarvy(Jarda, modra) maKalhotyBarvy(Kvido, cervena) nemaKalhotyBarvy(Luda, modra)
Výstupem je posloupnost celých čísel od 0 do N-1 (N je počet postav vystupujících v dané úloze), podle které jsou postavám v pořadí, v jakém byly uvedeny ve vstupním souboru, přiřazeny pozice, na kterých se mají vyskytovat na fotce.
Příklad správného výstupu k úloze definované v ukázkovém vstupním souboru viz výše (pozor: čísluje se od 0):
3 2 6 5 4 0 1
Takže tato posloupnost čísel přiřazuje pozice postavám ze vstupní posloupnosti “Jarda Mirek Luda Beda Cenek Mates Kvido” následujícím způsobem:
Porovnej s Obrázkem 2.
Zde si můžete stáhnout základní třídy napsané v Javě pro načtení zadání hádanky a další jednoduché operace, včetně třídy s jednoduchým řešičem, který je ovšem tak jednoduchý, že správné řešení nenajde
Při návrhu řešení se můžete inspirovat metodami prohledávání stavového prostoru, viz
Celkově můžete získat za tuto úlohu 20 bodů rozdělených takto