Autorské riešenie
[stiahni]

Skôr ako začneme programovať riešenie tejto úlohy, mali by sme trochu porozmýšľať. Tak ako každá úloha, tak aj táto sa dá riešiť šikovne, ale aj menej šikovne.

Každá z korytnačiek si môže strihnúť jedno zo štyroch náradí. Celkovo tak pri strihaní si dvoch korytnačiek môže nastať 16 rôznych prípadov. Môžeme otestovať, ktorý z týchto 16 prípadov nastal (teda, akú dvojicu náradí si korytnačky strihli) a podľa toho určiť víťaza. Toto je však zbytočne komplikované riešenie. Nás ani tak nezaujíma, aká je dvojica náradí, ale v akom sú vzťahu. Teda, ktoré náradie prebíja to druhé.

Ak sa náradia nachádzajú vedľa seba (predstavme si ich, ako keby boli umiestnené na kružnici), korytnačka so silnejším náradím vyhrala. V opačnom prípade nastáva remíza. Aby sme zistili, či sú náradia vedľa seba, stačí si ich očíslovať. Jedno takéto číslovanie vidíte na obrázku. Každé náradie prebíja náradie s číslom o 1 menším. Výnimkou je náradie 1 (skrutkovač), ktoré prebíja náradie 4 (pílka).

naradie

Najskôr teda každému hráčovi priradíme číslo jeho náradia.

viem vyhodnot
  akJe :hrac1 [
    skrutkovač [urobTu "h1 1]
    dláto [urobTu "h1 2]
    kladivo [urobTu "h1 3]
    pílka [urobTu "h1 4]
  ]

  akJe :hrac2 [
    skrutkovač [urobTu "h2 1]
    dláto [urobTu "h2 2]
    kladivo [urobTu "h2 3]
    pílka [urobTu "h2 4]
  ]
koniec

Ak je číslo náradia prvého hráča o 1 väčšie ako číslo náradia druhého hráča (:h2 + 1 = :h1), vyhral prvý hráč. Prvý hráč vyhráva aj v prípade, ak je číslo jeho náradia o 3 menšie ako číslo náradia druhého hráča (:h2 - 3 = :h1). Podobnú úvahu vieme spraviť aj pre prípad, kedy vyhráva druhý hráč. V ostatných prípadoch nastáva remíza.

Výsledná procedúra môže vyzerať takto:

viem vyhodnot
  akJe :hrac1 [
    skrutkovač [urobTu "h1 1]
    dláto [urobTu "h1 2]
    kladivo [urobTu "h1 3]
    pílka [urobTu "h1 4]
  ]

  akJe :hrac2 [
    skrutkovač [urobTu "h2 1]
    dláto [urobTu "h2 2]
    kladivo [urobTu "h2 3]
    pílka [urobTu "h2 4]
  ]

  ak2 alebo :h2 + 1 = :h1 :h2 - 3 = :h1 [
    pis "Hráč1
  ][
    ak2 alebo :h1 + 1 = :h2 :h1 - 3 = :h2 [
      pis "Hráč2
    ][
      pis "Remíza
    ]
  ]
koniec

Najčastejšie chyby, komentár k vašim riešeniam

Väčšina z vás zbytočne a prácne testovala, ktorá zo 16 možností nastala. Niektorí riešenie vylepšili tak, že na remízu otestovali, či sa náradia oboch hráčov zhodujú (na niektoré prípady remízy nemusíme ani vedieť, aké to boli náradia). Samozrejme, ostatné možnosti pre remízu treba otestovať tiež.

Pri takýchto "zložitých" porovnaniach je výhodnejšie používať navzájom vnorené AK2 a nie niekoľko po sebe idúcich AK (tak, ako to mnohí z vás robili). Ak použije viac AK za sebou, môže sa stať to, že na niektorú hodnotu sa pýtate viackrát, čo je zbytočné.