Programmering handlar mycket om från vilka håll problemet kan angripas och vilket av dem som är effektivast m.m. beroende på verktygen som finns i språket. I
Project Euler blir detta väldigt synligt, och bara det första problemet tror jag att man skulle kunna analysera under ett halvt läsår:
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Find the sum of all the multiples of 3 or 5 below 1000.
Vilken loop bör vara huvudloop/ytterst:
* Loopa över en lista med konstanterna 3 och 5?
* Loopa fr.o.m. 0 t.o.m. 999 med steget 1?
* Göra likadant men med steget 3, och ha en annan loop med steget 5 inuti?
* Tvärtom: ytterst steget 5 och innerst steget 3. Vad tjänar man på det?
* Loopa först med steget tre och spara resultatet, sen efteråt med steget 5.
* Ladda hem två listor med 3- och 5-multipliers och loopa över dem. Kanske overkill här men många eulerproblem involverar primtal och de tar längre tid att räkna ut än att ladda hem. Återvinn!
Andra saker att fundera på:
* Vilka återanvändbara funktioner går att skapa i processen, t.ex. f(x) som ger alla multipler av x, och vad innebär "ger" - ska multiplerna returneras som en lista, eller ska en annan funktion anropas för varje multipel för att spara minne?
* Går det att hitta en matematisk formel som förenklar logiken?
* Finns det en formel som approximerar vissa delresultat eller hela resultatet med tillräcklig noggranhet?
* Hur kan arrayer, hash tables och/eller länkade listor användas och kombineras?
Rekommenderar alla att läsa de olika lösningarna/svaren på fråga ett, efter att ha löst problemet själv såklart, först då får man åtkomst till andras kreativa idéer