Projekti Euler haastaa laskennallisilla pähkinöillä

Työskentelen päivisin pääasiassa Java EE -sovelluskehittäjänä, mutta koska 7,5 tuntia päivässä sovelluskehitystä ei aina ole riittävästi, päätin jatkaa vuosia sitten kesken jäänyttä taivaltani Projekti Eulerin parissa. Eli ratkaista erilaisia laskennallisia ongelmia vapaasti valittavalla ohjelmointikielellä. Tarkoituksenani on samalla opetella myös eri ohjelmointikieliä ja ohessa harjaantuvat myös matemaattiset ja algoritmilliset taidot. Kymmenen ensimmäistä ongelmaa ratkesi Pythonilla suhteellisen helposti.

Projekti Euler tarjoaa sarjan laskennallisia ja matemaattisia ongelmia tietokoneella ratkaistavaksi ja mahdollisuuden tavoitella erilaisia saavutuksia, kisailla kavereiden kanssa ja keskustella ratkaisuista muiden käyttäjien kanssa. Projekti alkoi Colin Hughesin toimesta vuonna 2001 mathschallenge.net -sivuston alaosiona ja on nimetty uraauurtavan sveitsiläisen matemaatikon ja fyysikon, Leonhard Eulerin, mukaan. Käytännössä projekti pyörii käyttäjien toimesta, jotka ehdottavat uusia pähkinöitä, ja lahjakkaiden matemaatikkojen ja ohjelmoijien tiimi muuntaa ne ratkaistaviksi ongelmiksi. Tällä hetkellä pähkinöitä on 367 ja uusia julkaistaan epäsäännöllisin välein.

Ratkaisemani ongelmat ja niiden koodit löytyvät ”theeuler” -repostani GitHubista. Ratkaisuista huomaa, että niissä ei ole tähdätty elegantteihin ratkaisuihin. Ehkä sitten myöhemmin. Ensimmäiset kymmenen tehtävää, jotka tähän mennessä olen suorittanut, ovat kohtuullisen helppoja ja sisältävät peruskäsitteitä alkuluvujen generoinnista suurimpaan yhteiseen jakajaan. Pythonilla pähkinät ratkesivat suhteellisen helposti, samoin Javalla. Seuraavaksi ehkä Scala ja JavaScript.

Pelkällä raa’alla voimalla ei ongelmia luultavasti enää alkupään jälkeen ratkaista, vaan vastauksen saaminen vapaasti asetetussa minuutin aikarajassa vaatii sekä tietoa että taitoa kehittää sopiva algoritmi. Koska ongelmat ovat matemaattisia, auttaa niiden ratkaisemiseen muun muassa matemaattisten teorioiden kuten lukuteorian tunteminen. Tuskin kuitenkaan pyyhin pölyjä hyllyssä olevasta Calculuksesta tai Betasta, sillä hakukone tarjonnee vastauksia teorioiden osalta.

Internetissä on tarjolla myös muita vastaavia projekteja, jotka tarjoavat ohjelmoijille keinon virkistää ja kehittää taitojaan. Code Academy opettaa ohjelmoimaan (JavaScriptiä) kädestä pitäen, CodeKata tarjoaa 21 harjoitusta paremmaksi ohjelmoijaksi tulemiseen koodauksen ja ajattelun kautta, Rubyn opetteluun voi seurata Ruby Koans -polkua, logiikkaongelmia voi ratkoa 99 Prolog ongelman kautta ja Python Challenge tarjoaa kuvavihjeellisiä pähkinöitä. Kaikilla sivustoilla on hieman oma lähestymisensä ohjelmoijien aktivoimiseen.