Table of Contents

Kdo je kdo?

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í)

Úloha

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í.

Vstup

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ýstup

Výstupem je právě jedno řešení zapsané jako permutace 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:

  1. Jarda je na fotce na pozici 3
  2. Mirek je na pozici 2
  3. Luda je na pozici 6
  4. Beda je na pozici 5
  5. Cenek je na pozici 4
  6. Mates je na pozici 0
  7. Kvido je na pozici 1

Porovnej s Obrázkem 2.

Zadání a řešení

Pomůcky a tipy

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

Hodnocení

Celkově můžete získat za tuto úlohu 20 bodů rozdělených takto