Heighway-drake är (tyvärr) inte en eldsprutande mytologisk varelse. För att se sådana så prova här borta. En Heighway-drake är en sorts fraktal som man kan rita upp, en matematisk kurva. Ett sätt att skapa den är att se draken i olika generationer, som skapas enligt:
- generation 0 (noll) är textsträngen "FX"
- generation n skapas genom att man i generation (n-1) byter ut alla X mot X+YF+ och alla Y mot -FX-Y.
Man får alltså att de första generationerna av drakar är
Gen 0: FX
Gen 1: FX+YF+
Gen 2: FX+YF++-FX-YF+
Gen 3: FX+YF++-FX-YF++-FX+YF+--FX-YF+
När man ska rita upp kurvan så startar man i punkten (0,0) och har riktningen uppåt. Sedan går man igenom textsträngen och de olika tecknen betyder:
- F = dra ett streck ett steg framåt
- + = vrid 90 grader medurs
- - = vrid 90 grader moturs
X och Y betyder inget när man väl ritar upp kurvan.
En pappersmodell
En app
Project Euler - Problem 220
Till exempel, om man (i den första bilden från appen) följer den gröna draken i 5 steg med start där röd och grön drake möts, så hamnar man på punkten (2,-1)
I Project Euler är antalet steg 10 upphöjt till 12 (1000000000000), och jag har inte haft datorkraft/tålamod att låta min dator rita upp en drake av tillräckligt hög generation för att kunna gå de stegen. Men som tur är behöver man som sagt inte rita upp draken, man kan istället räkna ut var man hamnar. För att räkna ut det så skrev jag en liten snutt Haskell-kod, och efter ett par misslyckade försök så lyckades jag komma på hur positionen skulle räknas ut (utan att behöva mer datorkraft/tålamod än vad jag hade tillgång till).
Koden tänkte jag inte lägga ut här, om det är någon som vill ge sig på problemet själv, men i korthet går min lösning ut på att:
- en drake av generation n består av två drakar av generation (n-1) som börjar från varsitt håll och möts i huvudet.
- var huvudet på en drake hamnar går lätt att räkna ut om man vet dess generation


















