lørdag 21. desember 2013 Julekalender
Det har vært en utrolig spennende kalenderdag i dag! Jeg advarte om at luke 20 kom til å bli vanskelig – og det var den. Jeg hadde laget mitt eget lille kryptiske, funksjonelle språk, og så kodet et enda mer kryptisk program i dette språket. For å løse oppgaven måtte man gjette, redusere programmet manuelt, eller skrive en tolker eller kompilator.
Han som klarte oppgaven først gjettet. Trond Klakken satt og jobbet med oppgaven sammen med sine kollegaer i BEKK Consulting, og det gav uttelling. Og dermed ble det mange BEKK-folk i resultattoppen denne gangen. Jeg må gjengi litt av twitter-strømmen... (mer info om løsningen kommer etterpå)
Jeg synes egentlig det er veldig gøy at folk sammarbeider om oppgaven, det er jo bare en smart strategi....
Og dermed, klokken 10:21, gikk Eivind i ledelsen! Men det varte ikke så veldig lenge, for noen satt og jobbet, og det var Magnar Sveen. Klokken 11:01 hadde han svaret, og overtok sammenlagt.
Gratulerer, Magnar! Så vidt jeg vet var du den første som faktisk løste oppgaven.
Stian var ikke like stø på parsing og kodegenerering som det virker som Magnar er, men utpå kvelden kom han også med løsningen.
Det er utrolig gjevnt i toppen nå – under 100 poeng skiller de fire beste. Hvem som får billetten til NDC 2014 vet vi sansynligvis ikke før på selveste julaften.
For å lage språket XMASLANG brukte jeg node.js og modulen PEG.js, en enkel parser generator. Jeg hadde ikke brukt PEG.js (eller PEG i det hele tatt) før, men det var ganske enkelt.
I stedet for å forsøke å forklare så har jeg gjort klar en gist som inneholder alle de involverte filene samt instruksjoner for hvordan man kan bruke dem. grammar.peg
definerer språket, og brukes til å generere en parser. compiler.js
er en veldig enkel kompilator som genererer JavaScript-kode basert på syntakstreet som parseren produserer.
Hvis dere som løste oppgaven vil dele koden dere produserte på samme måte så hadde det vært veldig kult!
Til slutt har jeg lyst (for dem som er interessert i å forsøke tilsvarende selv) til å tipse om et nytt språkverktøy som heter Hyperglot. Det er en arbeidsbenk for språkutvikling laget i node. Den bruker PEG.js sammen med en rekke andre moduler for å gjøre språkutviklingen smertefri og enkel. Jeg driver og tester den ut nå; den har et stykke igjen å gå før den er veldig bra, men er absolutt brukbar.
Og så var det bare fire dager igjen til Jul!