Warning
This page is located in archive. Go to the latest version of this course pages.

Task 2 - CS - Malované křížovky

Zadání

Vaším úkolem je napsat algoritmus, který vyřeší malovanou křížovku. Malované křížovky jsou logické hlavolamy, při kterých je kolem mřížky umístněná legenda s čísly pomocí nichž lze vytvořit obrázek. Každé číslo v legendě určuje počet za sebou následujících vyplněných čtverečků barvy, která přísluší danému číslu. Platí následující pravidla: (1) mezi jednotlivými bloky čtverečků vyplněných stejnou barvou je vždy minimálně jeden prázdný, (2) mezi čtverečky, které jsou vyplněny různou barvou nemusí být prázdný čtvereček, (3) pořadí čísel v legendě určuje pořadí bloků.

Pokyny k vypracování

Vstup

Program by měl číst ze standardního vstupu, vstup má následující formát:

NUMBER_OF_ROWS,NUMBER_OF_COLUMNS
CONSTRAINTS_FOR_ROW_1
CONSTRAINTS_FOR_ROW_2
...
CONSTRAINTS_FOR_ROW_M
CONSTRAINTS_FOR_COLUMN_1
CONSTRAINTS_FOR_COLUMN_2
...
CONSTRAINTS_FOR_COLUMN_N

přičemž každá podmínka má tvar

COLOR_1,NUMBER_1,COLOR_2,NUMBER_2,...,NUMBER_K

kde položka “color” se vztahuje k následujícímu číslu a má formát znaku, který reprezentuje barvu, kterou při vykřeslování použijete (např. #). Položky “number” označují velikost daného bloku.

Příklady vstupu: csp_example.txt, input.txt, krtkek.txt, dino.txt

Příklady výstupu: csp_example.txt.out input.txt.out krtek.txt.out, dino.out.txt

Výstup

  • Obrázek vypište na standardní výstup.
  • Obrázek vykreslujte po řádcích - pro plné políčko vypište znak příslušné barvy, pro prázdné políčko vypište _.
  • Pokud je výsledných obrázků více, oddělte je prázdnou řádkou.
  • Pokud řešení neexistuje, vypište “null”.

Postup

Promyslete si zejména způsob formalizace – co zvolit jako proměnnou, jak budou vypadat podmínky a zda půjde jednoduše implementovat algoritmy hranové konzistence. Začněte s jednoduchým prohledáváním do hloubky a ten vylepšujte pomocí CSP technik.

Do hlavní třídy/souboru do komentáru napište jakou formalizaci jste zvolili, jakým způsobem reprezentujete podmínky a které z CSP algoritmů/technik jste implementovali.

Vaše implementace bude automaticky vyhodnocena na 6 problémech, s celkovým časovým limitem 15 minut.

Ohodnocení

Za úkol můžete získat maximálně 14 bodů:

  • 4 body za správnou implementaci (vyhodnoceno automaticky)
  • 4 body za správnou CSP implementaci
  • 3 body za správnou AC3 implementaci
  • 2 body za implementované pokročilé heuristiky (Forward checking, MCV, LCV)
  • 1 bod za dokumentaci popisující jak jste formalizovali CSP (proměnné, domény, omezující podmínky) a stručně shrnující vaši implementaci. Stačí napsat do komentářů u hlavní třídy.

Je důležitější mít správnou formulaci/implementaci CSP a AC-3, než vyřešit co možná nejrychleji dané křížovky.

Detaily implementace

  • Vaše třídy vytvořte v package “student”
  • Ve této package vytvořte hlavní třídu CSPMain, která bude implementovat metodu main
  • Váš algoritmus musí vypsat všechna řešení
  • Odevzdejte zabalenou balíčkovou strukturu se všemi Vašimi třídami

Termín odevzdání

Týden 5 - 08/04/2018 23:59

courses/b4b36zui/tasks/task2-malovane-krizovky.txt · Last modified: 2018/04/09 23:50 by schaemar