200th Problem Solved!

Today I solved my 200th Project Euler problem! Project Euler is a great website that posts weekly programming challenges. It is a great way to learn a new programming language, master the art of algorithm design, and learn about fascinating math concepts. In light of this milestone, I decided to do some data analysis on my Project Euler progress since I started solving these problems about 2 years ago. The first problem on Project Euler states:
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.
I am not going to post any solution to this problem, but instead encourage you to go check out the website and see if you can figure it out! If you think that problem is too easy, don't worry they get harder.

I first found out about Project Euler in my second semester as a Freshman. I joined the website and solved my first problem on February 17th, 2013. In fact, I solved my first 17 problems on that day! I immediately became addicted to these problems and I began chipping away at some of the harder ones. After one month, I had solved 42 problems, so clearly my paced slowed down but the problems became more challenging. I no longer knew how to attack them right away and I had to spend more time at the drawing board. Here is a time series of my progress over the past two years:



Clearly, my progress fluctuated a lot over the last two years. This was mainly due to fluctuations in workload, motivation to solve problems, and algorithmic skill. By the time summer rolled around at the end of my summer year, I had solved 79 problems! I spent a lot of my free time that summer working on these problems and got my total up to 169! The last 31 problems have been an extreme challenge, and it took me all of Sophomore and half of Junior year to solve them. This is mainly due to sharp increase in difficulty level but it's also an effect of my increased academic workload.

Solving these problems has probably been the single most important thing to help me develop into a strong programmer and algorist. These problems provide a challenge that go beyond the scope of any class, and they are a perfect way to challenge yourself way beyond what you'd see in the classroom context. These problems are a great way to learn a new language as well, and I've recently been re-solving the easier problems using Haskell - a functional programming language that I'm currently learning. Some of these problems are fun to solve with pen and paper as well, although it's sometimes tougher to come up with a solution that way.

Some of the key things that I learned about while solving Project Euler problems were:

  • Memoization
  • Dynamic Programming
  • Backtracking
  • Algorithmic Game Theory
  • Probability Theory and Expectation
  • Prime Numbers

Here are some statistics that I gathered:

Comments

Post a Comment

Popular posts from this blog

Multi-Core Programming with Java

Efficiently Remove Duplicate Rows from a 2D Numpy Array

Beat the Streak: Day Three