koodari /'nørtti/
organismi joka muuttaa kofeiinia koodiksi.

Briefly in English

Over 30 years ago I got my first computer. It was not too powerful, its storage capacity was rather limited and so on. Anyway, I understanded that programs should be small too. My first programming related book was written in alien language — it was in English. Unfortunately rest of this page is not in English.

IOCCC

IOCCC eli International Obfuscated C Code Contest (Kansainvälinen Hämärretyn C-koodin Kisa) on elektronisen urheilun aatelia. Siinä ei tarvita salamannopeaa hiirikättä, mutta jonkin verran mielikuvitusta ja istumalihaksia. Kisan säännöt vaihtelevat jonkin verran kisasta toiseen, nykyään esimerkiksi ohjelman kääntäminen pitää taphtua ilman käyttäjän interaktiota. Mielestäni parhaita suorituksia ovatkin ne, joiden jälkeen joudutaan muuttamaan kisan sääntöjä.

IOCCC:n tarkoituksena on

IOCCC 2018

Päätin osallistua vuonna 2018 järjestettyyn kisaan. Pallottelin aluksi mielessäni erilaisia ideoita siitä mitä ohjelmassani pitäisi olla. Kokeilinkin monenlaisia asioita, mutta hylkäsin niistä suuren osan. En toki kerro mitä ideoita hylkäsin, sillä voihan olla, että joskus osallistun kisaan uudelleen. Eräänä talvisena ja tähtikirkkaana iltana vaimoni nosti sormensa ylös ja kysyi "Mikä tuo tähti on, ja voinko nyt saada pääsiäismunia?" Tähti oli tietenkin α Ursae Majoris eli Dubhe, mutta pääsiäismunien ilmaantuminen kauppojen suklaahyllyille ei ollut vielä lähelläkään. Tartuin kuitenkin kysymykseen, ja päätin ratkaista sen käyttämällä Nanoa ja C-kääntäjiä (GCC ja Clang)

Olen vuosien varrella tutkinut joidenkin IOCCC-voittajaohjelmien toimintaaa ja havainnut, että monet niistä ovat herkkiä esimerksi koodin muotoilulle. Ohjelma ei välttämättä käänny tai toimi muuten oikein, jos lähdekoodi rivitetään uusiksi paremman luettavuuden aikaansaamiseksi. Päätin tietoisesti viedä tämän äärimmilleen. Nyt yhdenkin bitin muuttaminen lähdekoodista, myös kommenttien sisältä, johtaa siihen, että ohjelma ei suorita sen tärkeintä toimintoa.

IOCCC:n luonteen ja tiukkojen kokorajoitusten vuoksi muuttujanimet ovat usein yksimerkkisiä. Tässäkin hjelmassa niitä on viljelty, mutta selkeyden vuoksi käytän myös useampimerkkisiä. Ohjelmassani tarvitaan sinejä ja kosineitä, mutta mielestäni aivan liian ilmeinen ratkaisu olisi ollut käyttää math-kirjastoa.

x
Minä ja poikaini ohjelmoimassa kisaa varten

Osa tuosta ohjelmani toiminnastani ovat ilmeisiä, ainakin jos ajaa sen ja katsoo lopputulosta. Mutta ohjelmassa on myös ei niin ilmeisiä ominaisuuksia, jotka löytyvät vain ja ainoastaan lähdekoodia tarkkaan lukemalla tai hyvällä debuggerilla.

Joitakin käytettyjä hämäystekniikoita:

Tässä listassa ei kuitenkaan ole niitä tärkeimpiä hämäystekniikoita, en aio esitellä niitä koska en halua pilata löytämisen iloa.

Most stellar

Voitin vuoden 2018 kisan tittelillä Most stellar. Kisan tuomaristo myös päätti vaihtaa kisasivujen väriavaruutta ohjelmani tuottamien värien mukaisiksi.

Linkkejä