Isikoodausta: lukutraineri

January 21st, 2022

Jälleen pikku koodiprojekti natiaisen harjoittelukäyttöön, nimittäin lukutraineri. Kikkale arpoo luvun 1000–9999 ja nappia painamalla saa näkyviin (usein pitkän) lukusanan:

Yheksäntuhatta neljäsataakuuskytkuus

Tällä erää grafiikan ohjelmointiin ei paljon aikaa suttaantunut. Lähinnä sillä puolella yllätyksenä tuli, kuinka pitkiksi näinkin pienet lukusanat jo kasvavat – ikkunan leveyttä piti kasvattaa ja kasvattaa, eikä se 32 pisteen fontilla enää läppärinäytölleni edes mahtuisi. Kellonaikoihin verrattuna lukusanat ovat säännöllisempiä, kun tuhansia, satoja ym. edustavat numerot voi käydä mekaanisesti yksitellen läpi. Näin pienillä luvuilla en jaksanut käyttää silmukkaa, mutta isommilla se tokisi tulisi väistämättä vastaan. Joitakin erikoistilanteita piti silti jälleen huomioida:

  • Nollan kohdalla ei tarvitse yleensä tehdä yhtään mitään, lukuun ottamatta tapausta 10 eli kymmenen
  • Systemaattisen käsittelyn rikkovat myös 11–19 eli yksitoista–yhdeksäntoista, jotka voi sentään generoida helposti
  • Oikealta lukien kolmen numeron välein tulee välilyönti eli “kaksituhatta neljäsataa”
  • Tuhat, sata ja kymmenen pitää käsitellä erikseen, koska ne eivät tietenkään ole “yksituhatta” jne.

Koodinpätkään tarvitaan tietysti yksinkertainen mäppäystaulukko numerosta tekstiksi; nollaa ei tosin näemmä käytetä yhtään mihinkään. En tiedä, tuleeko tälle trainerille juuri käyttöä todellisuudessa, mutta olipahan ainakin itselleni pientä sormiverryttelyä ja sivussa opin jotakin suomen kielen lukusanoista. Vähäisellä vaivalla paikat voisi vaihtaa, jolloin lukusanaa yritettäisiin muuttaa takaisin numeroiksi. Saatan kokeilla myös puhekielisen version tekemistä ihan mielenkiinnosta: ovatko arkiset lyhyemmät lukusanat yhtä säännöllisiä?

edit: Kolmen numeron palasia voi käsitellä ilmeisen itsenäisesti, joten yleispätevä ratkaisu ei olisi itse asiassa paljonkaan mutkikkaampi. Perään lisätään vaan “miljoonaa”, “tuhatta” jne.

Filed under: koodi,softat

Kommentin kirjoitus

You must be logged in to post a comment.

RSS feed for comments on this post.


Kommenttien virta

Aiheet