This is about "hacking" the Finnish word game Sanuli which is a clone of Wordle with Finnish language words.
Tällä näpsäkällä tiedonmurskaajalla saa pyöräytettyä Sanuliin sopivat aloitussanat eli alkumuuvit. Hyvä alkumuuvi on sellainen, joka käy läpi yleisimmät kirjaimet eikä sisällä samaa kirjainta useampaan kertaan. Ideaalisti kahdella sanalla saa testattua 10 eri kirjainta ja kolmella 15, kun viiden sanan peli on käytössä.
- Luetaan sanat Kotuksen nykysuomen sanalistasta.
- Lisätään ja/tai poistetaan sanoja, jotta lista saadaan vastaamaan Sanulin käyttämää listaa. Erot määritetty tiedostossa sanuli-patch.yaml.
- Poimitaan tietyn mittaiset sanat, esim. viisi kirjainta pitkät.
- Suodatetaan pois sanalistasta merkit, joita Sanulissa ei käytetä, kuten Š.
- Lasketaan kirjainten frekvenssi näistä tietyn mittaisista sanoista.
- Poimitaan useimmin esiintyvät kirjaimet. Esim. kolmen sanan haussa poimitaan 15 yleisintä kirjainta.
- Poimitaan sanalistasta sanat, jotka koostuvat näistä kirjaimista.
- Suodatetaan pois vielä lopuksi sanat, joissa sama kirjain esiintyy useamman kuin kerran.
- Käydään läpi kaikki yhdistelmät ja poimitaan sellaiset, joissa kukin kirjain esiintyy vain kerran.
Sanoja on verrattain paljon ja ylläoleva algoritmi olisi melko hidas ilman tiettyjä optimointeja. Testattavien sanojen määrää vähennetään yhdistämällä sanat, jotka ovat toistensa anagrammeja samaksi testialkioksi. Esimerkiksi sanat kotva ja votka käsitellään yhtenä ja vasta tulostusvaiheessa näytetään erikseen.
Algoritmi löytyy tiedostosta Main.hs.
Nämä tiedostot ovat CSV-muodossa, avautuu esim. LibreOfficessa kun valitsee formaatiksi CSV (erottimena pilkku).
- Kaksi sanaa
- Kolme sanaa
- Neljä sanaa: ei löydy yhtään
Hyvyysarvo lasketaan jokaiselle sanalle. Se koostuu kahdesta luvusta; vihreästä (g) ja keltaisesta (y). Vihreä tarkoittaa sitä, kuinka monta vihreää kirjainta (täysosuma) tulee, kun sana testataan kaikkia Sanulin samanmittaisia sanoja vastaan. Keltainen tarkoittaa vastaavasti sitä, kuinka monta oikeaa kirjainta mutta väärässä kohdassa (sivuosuma) on.
Tähän on vaikea tehdä aukotonta algoritmia, että mikä on hyvä sana, joten jätetään se käyttäjien päätettäväksi. Taulukon saa helposti vietyä esim. taulukkolaskentaan analysoitavaksi kun sen tuo CSV-moodissa, pilkkuerotettuna.
Tämä asentuu Cabalilla ja tarvitsee lisäksi Kotuksen sanalistan, joka ladataan erikseen. Alla pikaohje Debian-pohjaisille jakeluille.
Kloonaa tämä repo ja aja työhakemistossa:
curl -s https://kaino.kotus.fi/sanat/nykysuomi/kotus-sanalista-v1.tar.gz | tar -xzv
sudo apt install cabal-install libghc-hxt-dev libghc-yaml-dev libghc-optparse-applicative-dev libghc-attoparsec-dev
cabal install
~/.cabal/bin/sanuli-alkumuuvit --length 5 --words 2 --kotus kotus-sanalista_v1/kotus-sanalista_v1.xml
Yllä 5 tarkoittaa sanojen pituutta ja 2 sanojen määrää.
Tässä paketissa tulee mukana työkalu sanuli-diff
, jolla voi laskea
erot Sanulin WASM-käännöksen ja Kotuksen sanalistan välillä. Sen
tuottaman datan luvallisuus on hiukan hankalasti
määriteltävä. Alkuperäinen Sanuli on avointa koodia
(@Cadiac/sanuli) mutta
käännöksessä mukana tulevien assettien lisenssi ei välttämättä ole
sama. Jos tästä nyt tulee jotakin kiistaa, voin vetää esigeneroidun
patchin pois tältä sivulta.
Erot Kotuksen sanalistan ja Sanulin listan välillä (30.1.2022) löytyvät tiedostosta sanuli-patch.yaml.
Olen huono sanapeleissä ja jotta en häviäisi, piti keksiä jotakin. Ei kiinnostanut kuitenkaan tehdä täysin automaattisesti pelaavaa bottia, vaan ajattelin että riittäisi kehitellä hyvät aloitussiirrot, jonka jälkeen peli helpottuu huomattavasti.
Ja helpottuuhan se.
Softan on kirjoittanut Joel Lehtonen, joel.lehtonen ät iki.fi. Lisenssi on GNU GPL versio 3 tai myöhempi versio.