Úloha 18: Věštění (matematické čtení myšlenek)

Mírně pokročilý rand() modulo 9 ciferný součet MathML

Cíl úlohy

Vytvořte interaktivní webovou aplikaci pro zdánlivé „čtení myšlenek“. Uživatel si v duchu zvolí libovolné dvojciferné číslo, odečte od něj součet jeho číslic, v tabulce vyhledá symbol odpovídající výsledku a počítač tento myšlený symbol s naprostou jistotou uhodne.

Matematický princip a důkaz (MathML)

Každé dvojciferné číslo s číslicí desítek a a jednotek b má hodnotu 10a+b. Jeho ciferný součet je a+b.

Pokud od čísla odečteme jeho ciferný součet, získáme:

(10a+b) − (a+b) = 10a−a+b−b = 9a

Závěr: Bez ohledu na to, jaké dvojciferné číslo si uživatel zvolí, výsledek bude vždy násobkem devíti: 9,18,27,36,45,54,63,72,81!

Skriptu tedy stačí přiřadit všem násobkům čísla 9 (imod9=0) jeden a tentýž náhodně vygenerovaný symbol a ten si uložit do $_SESSION['spravny'].

Úvahy a doporučený postup řešení

  • Generování náhodného symbolu: Na začátku vyberte náhodný symbol pomocí rand(1, count($symboly)) a uložte jej do session.
  • Sestavení tabulky ve sloupcích: Čísla vypisujte do sloupců od 1 do 100 (první sloupec shora dolů obsahuje čísla 1 až 10, druhý 11 až 20 atd.). Pokud je $cislo % 9 === 0, přiřaďte vybraný tajný symbol. V ostatních případech přiřaďte náhodný jiný symbol, aby tabulka působila pestře a náhodně.
  • Session persistence: Prohlížeč si v session pamatuje, který symbol byl přiřazen násobkům devíti v okamžiku zobrazení tabulky.

Doplňující otázky k zamyšlení a náměty na rozšíření

  • 1. Jak s dělitelností devíti souvisí pravidlo pro kontrolu dělitelnosti libovolného čísla devíti (tzv. devítkový zbytek a ciferný součet)?
  • 2. Co by se stalo, kdyby uživatel zvolil jednociferné číslo (např. 7)? Platí pravidlo i pro něj (7−7=0, což je také násobek 9)?
  • 3. Proč se při každém novém načtení stránky musí symbol pro násobky 9 znovu náhodně vylosovat? (Aby si uživatel při opakování nevšiml, že symbol je stále stejný).
  • 4. Proč při responzivním zobrazení na mobilních zařízeních (přeskupení do menšího počtu sloupců) nesmí být počet sloupců nikdy roven 9? (Při 9 sloupcích by se všechny násobky devíti seřadily přesně do jednoho sloupce pod sebe a trik by byl na první pohled odhalen!).

Vyzkoušejte funkční řešení: Otevřít vzorovou úlohu vesteni.php