Moje vlastní Nerdle

8.5.2023 Kategorie: Ostatní

Jednou jsem již psal o svém zápalu do hry Nerdle. Snad to nevyzní hloupě nebo vychloubačně ale přivedl mě k ní sám velký Bill Gates. Bylo to tak, že jsem četl nějaký úryvek z rozhovoru s ním, kde se svěřil, že je posedlý hrou Wordle. Na závěr zmínil, že jakožto technicky uvažující člověk má raději její matematickou variantu, tedy Nerdle. Po delší době hraní, jsem jakožto amatérský programátor začal přemýšlet, co se děje na pozadí. A výsledek tohoto přemýšlení najdete na Vlkově GitHub účtu.

Moje Nerdle

Rozhodně netvrdím, že je to bezchybný program. Mnoho věcí určitě lze udělat lépe. Na druhou stranu, dělám na tom po večerech a zkrátka tolik znalostí zase nemám.

Moje Nerdle

Program se skládá ze třech tříd plus třída Program, kde se odehrává logika související s interakcí s uživatelem.

Naprosto stěžejní je třída GenerátorRovnic, která se stará o vygenerování náhodné rovnice. To je ta část, u které jsem rád. Že jsem ji nakonec dal dohromady. Zároveň jsem si vědom nedostatků. Tím hlavním je asi to, že ona náhodná rovnice, vlastně není úplně náhodná. A hlavně, kód negeneruje úplně všechny teoretické možnosti. Ale i tak, je to na běžného člověka zcela dostatečný rozsah. No, a génius se nudí asi i u normální Nerdle.

Třída Rovnice reprezentuje samotnou rovnici. Nejdůležitější jsou zde asi metody slouží k určení rovnosti. On totiž princip Generátoru spočívá v tom, že vygeneruje výsledek a první číslo v rovnici. Metody pro určení rovnosti následně vyhodí true či false, dle toho zda se dle zadaných parametrů levá strana rovná pravé. Pokud ne, Generátor vygenerovaná čísla upraví, tak se obě strany rovnaly. Jednoduchý ale jak vidíte funkční princip.

Poslední třída VykreslovačRovnic se stará hlavně o kontrolu uživatelského vstupu a jeho porovnání s vygenerovanou rovnicí. Stejně jako u originální hry i v mém programu je obarven každý znak zvlášť, jednou ze tří barev. Pokud se znak v rovnici vůbec nevyskytuje, podbarví se šedě, pokud se vyskytuje na jiné pozici tak červeně a jestliže se vyskytuje přesně na tomto místě tak zeleně. Uživatel je vyzván k zadání nového vstupu pokud se v rovnici obsahuje neplatný znak. Jednodušší bude, když vypíšu povolené znaky. Jsou to číslice od 0 do 9 a k tomu operátory +, -, *, / a =. Cokoliv jiného je neplatný znak. Důležitá věc je samozřejmě rovnost. Pokud se levá strana nerovná pravé, opět je uživatel vyzván k zadání nového vstupu.

Samotná logika ve třídě Program obsahuje mimo jiné kolekci pro uložení rovnice ve formě textu. Nachází se zde i kolekce s povolenými znaky a instance všech ostatních tříd. Celá interakce s uživatelem je uložena v hlavním cyklu while, který je řízen přes logickou proměnou. Opět vlastně nic složitého.

Tolik tedy k rychlému popisu. Pokud se budete dívat do kódu, povšimnete si jistě některých ne zrovna malých zakomentovaných částí. Ty vznikly při samotné tvorbě programu. Když jsem napsal větší část kódu, často jsem dospěl k efektivnějšímu řešení. Předchozí části, které mě stály nějaké úsilí, mi bylo následně líto smazat. Proto jsem je nechal zakomentované. Tyto části nemusí zachytávat všechny možnosti, které nám matematika teoreticky nabízí, buďte si toho proto vědomi, pokud je budete chtít použít. Všechny další části kódu by měli být plně otestované a všechny výjimky ošetřené.

To jest ode mě dnes asi vše. Pokud máte nějaké připomínky, kontaktujte mě. Jinak se na vás těším v dalším příspěvku a zatím jdu pracovat zase na něčem jiném.