Dart logo Jsou případi, kteří by si rádi třeba trochu něco zaprogramovali a zrovna je nic konkrétního nenapadá. Něco malého a krátkého, na čem by se mohli ten Dart trochu naučit. Jednu takovou malou úlohu jsem sepsal, částečně i pro vnitřní potřebu Multimedia atelier.

Zadání

Je to taková malá roztomilá Dartem řízená HTML single-page-application a současně rozcvička z genetických algoritmů.

Na obrazovce je mřížka cca 6x10 boxů, v každém boxu je jedno slovo (takže 60 slov). Každé slovo má 6 písmenek a na začátku jsou všechna slova zcela náhodně sestavená.

Uživatel klikne na slovo a tím ho vybere. Pak klikne na další a vybere druhé - tím máme tatínka a maminku a můžeme spustit orgie. Tedy generování další generace slov. Děti vzniknou takhle:

  • 10% dětí ma stejnou genetickou informaci (= 6 písmenek slova) jako tatínek
  • 10% dětí ma stejnou genetickou informaci jako maminka
  • 30% dětí ma první půlku z tatínka a druhou půlku z maminky
  • 30% dětí ma první půlku z maminky a druhou z tatínka
  • 20% dětí ma genetickou informaci poskladanou z tatínka a maminky zcela náhodně - u každého z šesti písmen se hodí 50:50, jestli bude z tatínka, nebo z maminky

Dá se stranou jedno dítě, které je stejné jako tatínek a jedno, které je stejné jako maminka a na ostatní se pustí mutace.

U každého ze zbývajících (ééé 58) dětí se hodí random <0-1) a testuje se:

  • <0-0.1) k mutaci nedojde
  • <0.1-0.6) náhodně se vybere jedno písmenko a to se náhodně změní na jiné
  • <0.6-0.9) náhodně se vyberou 2 písmenka a ta se změní
  • <0.9-1) náhodně se změní 3 písmenka

Slova se promíchají, vyrenderují a čeká se na další uživatelský vstup. A takhle se iteruje, dokud nevznikne nejaké fajné nové slovo. Což pozná uživatel a projeví se to tak, že přestane klikat.

Úloha je to malá, v podstatě odpolední, ale i tak by bylo dobré si s tím pohrát, udělat si “library”, slova by měla být objekty s vhodnými továrními konstruktory apod.

Rozšíření

Výše popsaný algortimus moc úspěšný nebude, při náhodném sestavování slov nebo mutaci písmenek by asi bylo dobré zajistit, aby se (s nějakou velkou pravděpodobností) střídaly souhlásky a samohlásky (plus slabikotvorné L a R). Také by se písmenka neměla opakovat.

Parametry, které jsou v zadání, jsem si ale kompletně vycucal, určitě bude dobré si s tím pohrát a trochu poladit, aby to dávalo pěkné výsledky.

Na začátku by si uživatel mohl vybrat délku slova (default je těch 6), případně další parametry algoritmu.

Také by to celé mohlo být v Polymeru - “slovo” nebude jen objekt, ale i Polymerová webcomponenta, která se umí pěkně vyrenderovat. Ale to až úplně nakonec.