čtvrtek 26. února 2015

Logický Minesweeper 2

Heuristiky jsem opravil a, i když generování hádanek stále trvá hodně dlouho a nedá se to dělat na mobilním zařízení , konečně generuji dostatečné množství dostatečně složitých hádanek. Aplikace na Android je už bezmála hotová.Netrpělivci to mohou vyzkoušet hned.
| ? 3 ? 1 0 ? 1 ? ? ? |
| ? 3 ? ? ? 2 ? 2 4 2 |
| ? 1 ? ? ? ? 3 ? ? ? |
| ? ? ? ? 3 ? ? 5 ? 2 |
| 1 ? ? 4 2 ? ? ? ? ? |
| ? 4 ? ? ? 4 4 ? ? 3 |
| ? 3 ? 3 ? ? ? ? ? ? |
| 1 3 ? ? ? ? 3 3 2 ? |
| ? 2 ? 3 ? 2 ? ? 2 ? |
| ? ? ? ? 1 2 1 ? ? 1 |


| ? ? 2 ? 1 ? 1 1 1 ? |
| ? 4 ? ? ? ? ? ? ? ? |
| ? ? 3 3 ? 2 ? ? ? ? |
| ? 2 ? ? ? ? 4 5 ? 4 |
| 2 ? ? 4 4 ? ? 4 ? ? |
| ? 2 ? ? 3 ? 4 ? ? ? |
| ? ? ? ? 2 1 ? ? 2 ? |
| 0 ? ? 0 ? ? ? ? 2 ? |
| 0 ? 1 ? ? 1 ? 2 ? ? |
| ? ? ? ? 0 1 1 1 ? 1 |


| ? 3 ? ? ? ? ? ? ? ? |
| 2 4 ? 4 2 2 ? 2 2 ? |
| ? ? 2 2 1 ? 2 ? ? 1 |
| ? 3 2 2 ? ? ? 3 ? ? |
| ? ? ? ? 3 2 2 3 ? ? |
| 1 ? 3 ? ? ? ? ? ? 3 |
| ? 1 ? ? 2 ? ? 3 ? 2 |
| ? ? ? 3 2 2 ? 3 ? ? |
| ? 2 ? ? ? 3 ? ? ? 2 |
| 1 2 ? 2 ? ? 3 ? 3 ? |


| 1 ? 3 ? ? 2 ? 2 ? 1 |
| ? 4 5 ? ? ? ? ? ? ? |
| ? ? ? 3 ? 3 ? 2 ? ? |
| 2 ? ? ? 2 3 ? 2 2 ? |
| ? ? ? ? 3 ? ? 2 ? 2 |
| 0 ? ? 1 ? ? 2 ? ? ? |
| ? ? ? ? 1 ? ? 1 ? ? |
| 2 ? 2 0 ? ? ? 3 ? 2 |
| ? ? ? ? ? 1 ? ? ? 2 |
| ? 1 ? ? 1 ? 1 ? 2 ? |


| ? ? ? 1 ? 1 2 ? 3 ? |
| 4 ? 5 3 2 2 ? ? 3 ? |
| ? ? ? ? ? 3 ? ? 2 ? |
| 1 ? ? ? 2 ? ? ? ? 0 |
| 1 2 ? ? ? ? 2 ? ? 1 |
| ? 3 ? ? 1 1 1 ? ? 2 |
| ? ? 2 ? ? ? 1 ? ? 3 |
| 3 ? ? ? ? ? 2 ? 3 ? |
| ? ? 6 5 4 3 ? ? 2 ? |
| 2 ? ? ? ? ? ? ? 0 ? |


| ? ? 4 ? ? 1 1 1 ? ? |
| 2 ? ? ? ? ? ? ? 2 ? |
| 0 ? ? ? ? 0 ? 1 ? 0 |
| ? 2 ? ? 1 ? 0 ? ? ? |
| 0 2 ? ? 1 ? 1 ? ? 1 |
| ? ? 2 1 ? ? ? 2 ? ? |
| 1 ? ? 1 1 ? ? 2 ? 2 |
| 2 ? ? ? ? 2 ? 3 ? ? |
| ? 2 ? 2 ? 1 ? ? ? 1 |
| ? 1 ? ? ? ? 1 1 1 ? |


| ? ? 3 ? 3 ? ? 4 ? 3 |
| 1 ? ? ? ? ? ? 4 ? ? |
| 1 ? ? 3 ? 3 ? ? ? ? |
| 1 ? ? 2 ? 0 ? 1 1 ? |
| 2 3 ? ? 2 ? 0 ? ? ? |
| ? ? 2 ? ? ? ? 1 ? ? |
| 2 ? ? ? ? ? ? ? 1 ? |
| 2 ? 3 ? 2 2 ? ? 2 ? |
| ? 2 2 ? ? 2 3 4 5 ? |
| ? ? ? ? 2 ? ? ? ? ? |


| ? 3 2 ? ? 3 ? 2 ? 0 |
| ? 3 ? ? 4 ? ? ? ? ? |
| 1 3 3 ? 4 ? 3 ? ? ? |
| 2 ? ? ? ? ? 2 2 ? 1 |
| ? ? ? 5 ? 4 ? ? 1 ? |
| 3 ? ? ? ? ? ? ? 2 ? |
| ? ? 3 2 3 ? 2 ? ? 1 |
| 2 ? 2 ? 2 ? 1 1 ? ? |
| ? 3 4 3 ? 1 ? 1 ? 3 |
| 1 ? ? ? ? 1 ? ? ? ? |


| ? 1 ? 0 ? ? 1 1 ? ? |
| 1 ? 0 ? ? ? ? ? 4 ? |
| 1 ? ? ? 1 ? ? ? ? ? |
| ? ? 1 ? 1 ? 1 1 1 1 |
| 2 ? 1 ? ? 3 ? ? ? ? |
| ? ? 1 ? ? ? 2 ? 2 ? |
| ? 3 ? ? ? ? 2 4 ? ? |
| 1 ? ? ? ? 3 ? ? ? ? |
| ? 3 4 ? 2 ? ? ? 3 ? |
| ? ? 2 1 ? 0 ? ? ? 2 |

úterý 24. února 2015

Opět Zlatovláska

Rád hledám při psaní prózy inspiraci v českých pohádkách. V jedné z nejznámějších je místo, které není moc logické a to ani vzhledem k tomu, že v něm zvířata mluví.

Navrchu na jedli bylo krkavčí hnízdo a dole na zemi dvě krkavčata pištěla a naříkala: „Otec i matka nám uletěli; máme si sami potravu hledat, a my ubohá písklata ještě lítat neumíme! Och pomoz, Jiříku, pomoz, nasyť nás, sic umřeme hladem.“ Jiřík se dlouho nerozmýšlel, skočil z koně a vrazil mu do boku meč, aby krkavčata měla co žrát. „Až budeš potřebovat,“ krákorala vesele, „vzpomeň si na nás, a taky ti pomůžem.“ Potom dál už musil Jiřík pěšky.
Karel Jaromír Erben - Zlatovláska

Četl jsem nejrůznější výklady tohoto místa. Nejdivočejší výklad předpokládal, že krkavec byl totemové zvíře, kterému bylo takto obětováno. Problém takových to výkladů ovšem je, že to by možná dávalo smysl lidem v době vzniku vyprávění, ale ne už lidem osmnáctého či devatenáctého věku, od kterých to Erben sebral. Těžko hledat v podobných a propracovanějších vyprávění jako je vyprávění o Siegfriedovi. Ale v norských pohádkách je něco dost podobného. Vypravěč se zřejmě snažil nelogičnosti co nejvíce zahladit.

Poté, co ujel hodně velký kus cesty, potkal vlka. Vlk byl tak hladový, že ležel jak široký tak dlouhý uprostřed cesty. “Milý zlatý! Dej mi svého koně,” promluvil. “Mám takový hlad, že mi kručí v břiše, už dva roky jsem neměl nic pořádného k jídlu.” “To nejde,” řekl Popeláček. “Nejdříve jsem potkal krkavce, tomu jsem dal svačinu, pak lososa, tomu jsem pomohl do vody, a ty teď chceš mého koně. To nemůžu, protože bych neměl na čem jet.” “Musíš mi pomoct,” řekl Šedivec, “můžeš si pak sednout na mě a já ti pomůžu, až to budeš nejvíc potřebovat.”
Peter Christian Asbjørnsen, Jørgen Moe - O obrovi, který neměl srdce v těle

Něco takového mohl snadno udělat i český vypravěč. Není mi proto jasné, proč to neudělal. Mimochodem, Popeláček je v norských pohádkách docela oblíbená postava, ale není to mužská obdoba Popelky.

pátek 20. února 2015

Rébus s hledáním min

Chystám se naučit se programovat aplikace pro android. Moje první aplikace by měla být jednoduchá a zároveň i k něčemu. Napadlo mě proto udělat něco jako Minesweeper, ale ne jako hru, protože těch jsou stovky a hra je to celkem jednoduchá. Minesweeper, podobně jako šachy, lze hrát i jako rébus. Dostanete herní plochu s několika označenými čísly a úkol je zakreslit miny tak, aby čísla seděla. Žádná další políčka hráč nemůže odkrýt (může si je nějak označit, ale, zda je tam mina nebo kolik jich je v okolí, se už nedoví). Je to o dost zábavnější než prosté hledání min a existují zadání, které dají opravdu zabrat.

Aplikace a její logika bude příjemně jednoduchá, ale automaticky vygenerovat náhodnou hru s jednoznačným řešením a zároveň s dostatečnou složitostí je tvrdý oříšek. Zatím si s ním nevím zcela rady. Napsal jsem program, který řeší úlohu tak, jak by ji řešil člověk. To mi dovoluje změřit složitost. Program zároveň dokáže, zda má úloha právě jedno řešení. Pomocí tohoto programu lze v náhodně vygenerované hře postupně odkrývat políčka tak dlouho, až má hra jednoznačné řešení. Dostatečnou složitost však takto zaručit nelze. Náhodně vygenerované hry mívají složitost poměrně nízkou, i když generátoru pomáhám různými heuristikami. Krom toho vše trvá nesmírně dlouho a generování musí být provedeno předem na slušném počítači, protože na mobilním zařízení by byla brzy vyčerpána buď trpělivost uživatele, anebo baterie.

Následují ukázky vygenerovaných her. Jsou dost jednoduché a složitostí mnoho nepřesahují obvyklé nerébusové hraní minesweeperu. Poslední hra není bohužel ode mne. Tak by to mělo vypadat. Složitost je slušná a hra mi dala docela zabrat. Zatímco moje hry mají složitost 2, tahle má složitost 4.
| ? ? 1 2 ? ? ? ? 1 1 |
| ? 0 1 ? ? ? 1 ? ? 2 |
| ? ? ? ? ? 3 2 ? ? ? |
| 2 ? ? ? 2 3 ? 1 ? 1 |
| 3 ? 2 ? 1 ? ? ? 1 ? |
| ? ? 2 ? ? ? ? ? ? 1 |
| ? 4 3 ? ? 1 1 1 ? ? |
| ? ? 4 ? 4 ? ? ? ? 2 |
| ? 4 ? ? 4 2 ? ? 2 ? |
| 2 ? 2 ? ? ? ? ? ? 2 |


| 2 ? 3 ? ? 0 ? ? ? ? |
| 2 ? 4 ? ? ? ? ? 0 ? |
| ? ? 3 ? ? 2 1 ? ? ? |
| 3 ? 4 ? ? 2 ? ? 1 1 |
| ? ? 3 ? ? 2 2 ? ? 3 |
| ? ? ? ? ? ? 2 ? ? ? |
| 2 2 ? 3 ? ? ? ? ? 2 |
| ? 3 1 3 ? 5 ? 1 ? ? |
| ? ? ? ? ? ? ? ? 2 1 |
| 2 ? 1 ? 1 ? 1 ? ? 1 |


| 0 ? ? ? 1 ? ? 2 3 ? |
| ? 2 ? ? 3 ? 2 2 ? ? |
| 1 ? 5 ? 4 ? ? ? ? ? |
| 2 ? ? ? 4 ? ? 0 ? 1 |
| ? 3 3 ? ? 2 ? ? ? ? |
| ? 2 ? ? 2 1 ? ? 3 2 |
| ? 2 3 ? 1 ? 1 2 ? 2 |
| ? ? ? ? ? ? ? ? ? ? |
| ? 3 2 2 1 3 ? ? ? ? |
| 1 ? ? 1 1 ? ? 3 ? 0 |


| 1 ? 0 ? ? 1 ? ? 2 ? |
| ? ? ? 2 ? ? 1 ? ? ? |
| ? ? ? ? 1 1 ? 1 2 ? |
| 2 ? 3 ? 1 ? 1 ? 2 ? |
| 2 ? 2 ? ? ? 3 3 ? ? |
| ? ? ? ? 2 ? ? ? ? 2 |
| 3 ? ? ? ? 3 ? ? 3 ? |
| 3 4 ? 3 ? ? 2 ? 3 ? |
| ? ? ? 3 ? ? ? ? 3 ? |
| 3 ? ? 1 ? 1 ? ? 1 ? |