Project Euler: uitleg

Inleiding

Ondertussen staan er al bijna 100 Excel pagina&lsqo;s op mijn website, waar al veel tijd in gekropen is. Eindelijk heb ik nog wat tijd gevonden om een pagina te maken over Project Euler, één van mijn laatste nieuwe bezigheden op Excel vlak.

Net zoals je over zowat elk onderwerp forums vindt op het internet, zijn er uiteraard ook massa’s forums over wiskunde, wiskundige problemen en vraagstukken. In wiskunde ben ik wel geïnteresseerd, maar niet in de pure wiskunde. Ik houd me liever bezig met concrete toepassingen. Jullie weten ook dat ik nogal wat programmeer in Excel VBA, dus dan is de link met Project Euler snel gelegd.

Euler

Leonhard Euler was een zeer bekend Zwitsers wiskundige uit de 18de eeuw, misschien wel de bekendste wiskundige aller tijden. Project Euler stamt af van een wiskunde-forum. Het is een groep mensen die een groot aantal vraagstukken verzameld hebben op een website (Project Euler). Op dit moment zijn er dat 275. De problemen kunnen opgelost worden met behulp van logisch redeneren en/of programmeren op de PC. Nogal wat problemen hebben een zuiver wiskundige insteek (priemgetallen zoeken, producten maken van schier oneindige getallen), maar er zijn ook andere vraagstukken bij over o.a. darts, Sudoku, dobbelstenen, enz.

Achtergrondgedachte

De gedachte achter Project Euler is dat de problemen snel berekend kunnen worden. Een computerprogramma dat je schrijft om alle mogelijke combinaties af te lopen, zal bij veel problemen gewoonweg niet lukken. Zo zijn er bv. vragen waar je getallen van een paar honderd cijfers moet vermenigvuldigen met zichzelf. Variabelen in programmeertalen die getallen bijhouden kunnen dit simpelweg niet aan… Kijk maar eens in de helpfiles van Excel VBA voor de boven- en ondergrens van een Double variabele. Die kan zulke grote getallen niet aan en klapt er dan ook uit. Laat staan een som of product erop uitvoeren. In principe zou elk probleem berekend moeten zijn op 1 minuut tijd of minder (dit is mij echter nog niet met alle problemen gelukt).

De oplossing bestaat er dan in om een functie te schrijven die 2 getallen kan optellen op basis van strings (tekst dus). In plaats van in het geheugen van de PC de optelling:

13579246801357924680135792468013579246801357924680

+

24680135792468013579246801357924680135792468013579

te doen (onmogelijk trouwens), kan je de getallen digit per digit optellen (begin achteraan). 0+9, 8+7, 6+5, enz. Met andere woorden, net zoals in de kleuterschool! Maak deze werkwijze algemeen, giet het in een functie en je kan die dan telkens aanroepen waar nodig. Hetzelfde geldt voor vermenigvuldigingen, aangezien er ook opgaven zijn waar je bvb. 1777 tot de macht 1777 moet "uitrekenen".

Wil je zelf meedoen?

Jezelf aanmelden op de site is gratis, zo ook problemen (proberen) oplossen en oplossingen indienen. De website checkt of jouw ingediende antwoord correct is of niet. Heb je het correct, dan krijg je toegang tot een soort forum waar je kan discussiëren over die vraag. Dit is zeer boeiend aangezien iedereen:

  • een andere programmeertaal kan gebruiken: C/C++, C#, PHP, Java, Mathematica, Python, VB(A), pen & papier, of nog andere
  • andere denkwijzen, ingevingen, achtergronden, gezond boerenverstand, programmeergewoonten heeft

Je kan ook via mail op de hoogte gehouden worden van nieuwe problemen die gepubliceerd worden. Er worden rangschikkingen bijgehouden per land, en per moeilijkheidsgraad van de opgaven.

Wie voelt er zich geprikkeld om het ook eens te proberen? Je leert er enorm veel van over programmeren. Let op: dit is verslavend voor wie er wat interesse voor heeft. Op deze pagina zal ik mijn status van opgeloste vragen bijhouden. Ik heb momenteel 182 van de 275 problemen opgelost. Succes gewenst!


Over Wim

Wim Gielis is Business Intelligence consultant en Excel expert

Andere links