Audamir

časť 10

Hlavolamy bez náhody, kde riešič dokazuje, že úloha má riešenie

V hre plnej kociek vznikol režim, v ktorom sa nehádže vôbec. Ako sa dá dokázať, že hlavolam má riešenie, a prečo bola prvá sada hlavolamov takmer celá príliš ľahká.

· 8 min čítania

Dice Wars je hra o riziku. Útok so šancou 45 % môže vyjsť a nemusí. Práve to sa na nej niekomu páči a inému nie. Tretia skupina hráčov chce niečo iné: úlohu, ktorú vyrieši rozmýšľaním, bez toho, aby o jej výsledku rozhodol hod kockou.

Zadanie pre tento režim znelo približne: Puzzle Lab ako v Hearthstone, pevné hody, elitná úloha nie je lotéria, ale riešiteľný hlavolam. Z jedného riadku vznikli laboratóriá (dnes štyri), riešič, nápoveda a meranie obtiažnosti. A jedna užitočná chyba.

Čo znamená „pevné hody“

Zadanie sa dalo pochopiť tromi spôsobmi.

  1. Pevné náhodné hody. Tá istá situácia dá vždy ten istý hod. Hra ostáva rovnaká a hod je len „zmrazený“. Hráč ho však vopred nevidí, takže by hlavolam riešil skúšaním a opakovaním. Bola by to lotéria s pamäťou, nie myslenie. Zamietnuté.
  2. Viditeľné hodnoty kociek. Každá kocka na mape má svoju stenu a útok porovná súčty. Najbohatšia možnosť, no mení stav hry, ukladanie aj kreslenie a je najďalej od skutočnej hry. Zamietnuté ako prvý krok, ostáva ako možnosť do budúcnosti.
  3. Laboratórne kocky. Zvolené. V hlavolame sa nehádže. Útok vyhrá ten, kto má viac kociek, pri remíze obranca. Bonusy v bodoch sa prepočítajú na kocky (3,5 bodu je jedna kocka), takže pevnosť bráni ako stoh o kocku silnejší.

Rozhodlo to, že pri laboratórnych kockách je výsledok každého útoku čitateľný z čísel na mape, hlavolam sa rieši myslením, a hlavne sa dá dokázať, že má riešenie.

Riešič

Dôkaz robí modul puzzle.js. Prehľadáva všetky ťahy do hĺbky a pamätá si už videné pozície. Používa pritom tie isté pravidlá ako hra (nie ich kópiu), takže sa nemôže rozísť s tým, čo hráč uvidí. Pre každú úlohu vie povedať:

  • či má riešenie a aké je najkratšie (to je par, ktorý sa neodhaduje, ale počíta),
  • koľko je riešení a koľko je variantov (množín ťahov bez ohľadu na poradie nezávislých),
  • ktoré prvé ťahy sú pasce, teda víťazné útoky, po ktorých cieľ už nejde dosiahnuť,
  • koľko pozícií preskúmal.

Jeden nástroj má štyri funkcie: kontrola úloh (neplatný hlavolam sa nedostane do hry), nápoveda (z aktuálnej pozície povie, či sa dá vyhrať, a ukáže ťah), Späť (nič nie je náhodné, takže sa hra postaví znova a prehrajú sa ťahy okrem posledného) a vymýšľanie nových hlavolamov príkazom node tools/puzzles.js --search.

Šachisti poznajú príbuzný pojem. Autor šachového problému musí overiť, že úloha má riešenie a že nemá cook, teda nezamýšľané druhé riešenie. Problém s iným riešením, než autor chcel, je chybný. Riešič robí tú istú prácu automaticky.

Ukážka: Snehová guľa

Mapa hlavolamu je malý text. Prvá číslica je majiteľ (0 si ty, 1 súper), druhá je počet kociek, n je neutrálne políčko. Takto vyzerá skutočný hlavolam z hry, Snehová guľa z Majstrovskej triedy:

14 n2 15 12
 04 03 n2 n2
12 15 14 11
Mapa hlavolamu Snehová guľaDvanásť políčok v troch radoch. Horný rad zľava: súper 2, súper 5, neutrálne 2, súper 4. Stredný rad: neutrálne 2, neutrálne 2, tvoje políčko s 3 kockami, tvoje políčko so 4 kockami. Dolný rad: súper 1, súper 4, súper 5, súper 2.425243222541
Snehová guľa tak, ako ju kreslí hra. Červené políčka sú tvoje (stohy so 4 a s 3 kockami), modré patria súperovi, sivé sú neutrálne; číslo je počet kociek. Hra mapu zrkadlí tak, aby hráč začínal na východe, preto je obrázok oproti textovému zápisu prevrátený sprava doľava.

Cieľ: mať v jednom ťahu aspoň 8 políčok. Máš dva stohy, so 4 a s 3 kockami. Dva bonusy sú súčasťou úlohy: Predvoj (prvý útok ťahu sa počíta s dvoma kockami navyše) a Korisť (prvé dobyté políčko ťahu dostane dve kocky navyše). Obe patria len prvému útoku, takže otázka znie, ktorý stoh má ísť prvý.

Riešič nájde, že najkratšie riešenie má šesť útokov. Riešení je päť, ale všetky tvoria jediný variant. Prvých ťahov je sedem a šesť z nich je slepá ulička: vyhráš síce políčko, ale k ôsmim sa už nedostaneš. Správny je len prvý útok zo stohu so 4 kockami na súperov stoh s 5 kockami v spodnom rade. Vďaka Predvoju vyhrá (4 + 2 proti 5) a dobyté políčko narastie na 5 kociek, a z neho sa dá pokračovať ďalej. Stoh, ktorý prvou výhrou narastie, dal hlavolamu meno.

Hráč, ktorý by vyberal ťahy náhodne, by hlavolam vyriešil v 0,7 % pokusov.

Prvá sada bola príliš ľahká

Najpoučnejšie je, čo sa stalo s prvou sadou. Nástroj tools/puzzles.js má sedem jednoduchých pravidiel („najväčší stoh na najslabšieho“ a podobne), ktorými sa dá každý hlavolam skúsiť vyriešiť. Prvá sada dopadla takto: 11 z 15 hlavolamov riešilo jediné pravidlo, najväčší stoh na najsilnejšieho.

Takýto hlavolam nie je hlavolam. Je to cvičenie, a kto nájde pravidlo, vyrieši aj ďalších desať. Preto sa obtiažnosť od tej chvíle neodhaduje, ale meria. Pri každom hlavolame sa zisťujú tri veličiny:

VeličinaČo hovorí
jednoduché pravidlákoľkými zo siedmich sa hlavolam vyrieši (od úrovne 2 musí byť 0)
rozhodnutiapočet bodov, kde si treba vybrať (od úrovne 3 aspoň 3)
náhodný výberpresná šanca, že náhodný výber ťahov hlavolam vyrieši

Úroveň sa určuje z poslednej veličiny: 20 % a viac je úroveň 1, 4 až 20 % úroveň 2, 1 až 4 % úroveň 3, 0,1 až 1 % úroveň 4 a pod 0,1 % úroveň 5. Test v projekte vyžaduje, aby zapísaná úroveň zodpovedala nameranej.

Takto vyzerá meranie dnes (výber z node tools/puzzles.js --check, 20. 10. 2026):

Hlavolamnajkratšie riešeniepreskúmané pozícierozhodnutianáhodný výber
Dva stohy (Základy)3 útoky12223 %
Zadné vrátka (Terén)4 útoky2935,6 %
Snehová guľa (Majstrovská trieda)6 útokov10450,7 %
Dlhá cesta (Majstrovská trieda)8 útokov a presun4 99080,0 %
Veľká skúška (Majstrovská trieda)10 útokov a presun15 69290,0 %

Riešič prejde aj najväčší hlavolam so 15 692 pozíciami za zlomok sekundy. Limit je čitateľnosť (mapa do 15 políčok), nie výpočet.

Po prvom hraní: všetky boli ľahké

Meranie hovorilo, že hlavolamy sú v poriadku, a pritom pri prvom hraní pôsobili všetky ľahké. Boli dobré ako učebná pomôcka, ale na hlavolamy je to málo. Stupnica obtiažnosti mala vtedy tri stupne a najťažší hlavolam mal náhodnú šancu okolo jedného až štyroch percent.

Odpoveďou je Majstrovská trieda, štvrté laboratórium. Sú to úlohy, ktoré kombinujú dve alebo tri mechaniky naraz (Pevnosť a korisť, Veža nad portálom), s riešeniami dlhými 6 až 10 útokov a so stupňami obtiažnosti 4 a 5. Nástroj pri tom dostal kontrolu dekoratívnej mechaniky: ak sa hlavolam dá vyriešiť aj bez niektorej z jeho mechaník, je tá mechanika len ozdoba a hlavolam sa odmietne.

Z pôvodných 31 hlavolamov sa neskôr tri najjednoduchšie (Prvý krok, Najsilnejší najprv, Ostrostrelec) stali lekciami úvodu, kam patria, a v laboratóriách ostalo 28.

Laboratórium, ktoré sa postaví inak, lebo to ukázalo meranie

Najlacnejšia oprava hlavolamu je tá, ktorá príde pred prvým riadkom kódu. Plán má piate laboratórium, Pohlcovač: po výhre hrdina pripočíta kocky porazeného súpera, ako v reklamách mobilných hier typu Hero Wars. Skôr než vznikol kód, sa to odsimulovalo na 6 000 náhodných doskách (zjednodušený model):

RežimVyrieši ho jednoduché pravidlo
Políčko rastie, výhra len pridáva100 %
+ bonusy +k100 %
+ násobiče ×299,9 až 100 %
Jediná cesta bez návratuzhruba 80 %

Čisté pohlcovanie nemá rozhodnutie, lebo pridávanie nemôže uškodiť, takže na poradí nezáleží. Rozhodnutia vznikajú až pri jedinej ceste bez návratu. V Dice Wars sa tá podľa plánu vytvára sama, lebo útočiť a presúvať sa môže len stoh, ktorý má aspoň dve kocky (v laboratóriu sa to ešte musí overiť). Návrh laboratória sa preto zmenil skôr, než sa začalo stavať.

Denný hlavolam

Hlavolam dňa (tá istá úloha pre všetkých, bez servera) sa nevolí zo zoznamu. Generuje sa za behu z dátumu, v samostatnom vlákne, a riešič ho overí skôr, než sa ukáže. Obtiažnosť rastie od pondelka do nedele. Ak sa nepodarí nájsť hlavolam podľa zadania, hľadanie podmienky zmäkčí, a ak nenájde nič, povie to. Testy majú pripnuté hodiny stránky na „ľahký deň“, aby výsledok sady nezávisel od dňa v týždni, v ktorom sa spustia.

Čo si z toho odnášam

  • Hlavolam bez dôkazu je nádej. Ak ho nikto nevyriešil, nevieš, či sa dá.
  • Autor je najhorší sudca obtiažnosti. Pozná trik, ktorý ostatní nepoznajú. Odmeraná šanca naslepo je objektívnejšia než pocit.
  • Najprv simuluj, potom stavaj. Pohlcovač by bez simulácie vznikol ako hra bez rozhodnutí.
  • Hraj vlastné hlavolamy. Meranie povie, že úloha je v poriadku. Až hranie povie, že je nudná.

Zdroje a poznámky

  • Rozhodnutia: docs/DESIGN.md §17 (§17.1 pevné hody, §17.3 riešič, §17.6 a §17.9 meranie a Majstrovská trieda), postup docs/TUNING.md §16. Tabuľka: node tools/puzzles.js --check z 20. 10. 2026.
  • Pohlcovač: docs/ROADMAP.md, kapitola 2 (simulácia 6 000 dosiek, zjednodušený model; laboratórium ešte nie je postavené).
  • Obrázok Snehovej gule: kreslenie hry (Scenario.svg) pre hlavolam snowball, 5. 11. 2026; farby štandardnej palety, hráč červený.
  • Pojem cook v šachových problémoch je v komponovaní bežný; v texte je použitý ako analógia.
  • Puzzle Lab v kartovej hre Hearthstone vyšiel 21. augusta 2018, dva týždne po rozšírení The Boomsday Project (tlačové správy Blizzardu, Hearthstone wiki). V texte ide len o inšpiráciu úlohami bez náhody.