I’m going to start posting a series working out the solutions to Project Euler’s problems. Mostly I’ll be working in Racket (at least for now), although if another language has a particularly interesting / efficient solution that Racket cannot match, I’ll post that as well.
Before I get to far, I guess an appropriate first question would be what is Project Euler?
Project Euler is a series of challenging mathematical/computer programming problems that will require more than just mathematical insights to solve. Although mathematics will help you arrive at elegant and efficient methods, the use of a computer and programming skills will be required to solve most problems.
The motivation for starting Project Euler, and its continuation, is to provide a platform for the inquiring mind to delve into unfamiliar areas and learn new concepts in a fun and recreational context. – Project Euler
Since Project Euler could be thought of as a competition, some people may frown upon the idea of posting solutions here. All I can really say to that is that the solutions are out there in a number of places. If the only reason you are reading these posts is to get the Project Euler solutions I guess that’s your choice, but I think that you’re kind of missing the point. So it goes.
Personally, I think that idea is to talk about interesting algorithms. The goal is for any number crunching for the problem should take less than a minute. In most cases, there is a brute force solution for the problems, but those solutions can often take orders of magnitude longer than a single minute. So a smarter algorithm is often necessary. In my opinion, that’s where Project Euler shines.
So sit back, relax, and enjoy the ride. The problems start out relatively tame, but even at the beginning there’s more than one way to work out the problems. If you ever have any questions, comments, suggestions, I’d love to hear them. Just drop me a comment or send me a message on Twitter. I hope you enjoy it.
If you want to jump to any particular problem, this list should automatically remain up to date: