In January 2020, which was approximately three years ago by my count, I happened to see this post:
Quincy LarsonAnnouncing the #ProjectEuler100 challenge - the Dark Souls of coding challenges.
You will learn:
💽 Computer Science
It will not be easy. But a huge community has got your back.
Discord chat: discord.gg/xpWc7Wk
The rules: freecodecamp.org/news/projecteu…18:42 PM - 03 Jan 2020
I vaguely thought this sounded like a cool idea and that I should do it and write blog posts about it. I've chipped away at Project Euler before, and as of writing have solved about half of the first 100, although some through methods that I would be embarrassed to tout in a programming blog post.
A lot has happened since January, but I'm going to try Lindsey's 100 days of blogging in combination with this challenge:
Lindsey (she/her) #BlackLivesMatter@littlekopeI love that @venikunche is doing this with me!
Any other aspiring/current bloggers wanna join us? twitter.com/venikunche/sta…21:50 PM - 05 Aug 2020Veni Kunche @venikuncheI'm starting #100DaysofBlogging today. I want to get better at writing & be more consistent. 🌟 Day 1: Started w/ an interview for a blog; about 8 questions on how I started my business. I wrote my first thoughts for 6 of them. 🎧 Writing music playlists on Spotify have been 👍
I want to tell you straight up, right now, that we are absolutely not getting through the first 100 Project Euler problems in the next 100 days, but I want to start chipping away a bit each day and hopefully finish them all eventually. I am not planning to publish every day but stick with me.
Now, I also want to say by way of preface: these are puzzles that are fun to try yourself! There will be spoilers here, read at your own risk!
Also, Project Euler is pretty math-y. If that's not your thing, it's cool! There's plenty of programming that doesn't get this deep into math. And I'll try to bring in relevant programming and computer science concepts too when I can, because I'm not all about math either tbh
Okay, without further ado, problem one.
Find the sum of all the multiples of 3 or 5 below 1000.
This sounds similar to the classic FizzBuzz interview question and can be solved similarly.
The key idea here is that we need a way to quickly check whether a number is divisible by another number. We could do something like dividing the numbers and checking for figures after the decimal, but that seems arduous and might be annoying to ensure that the numbers are treated as decimals rather than automatically-rounded integers.
The magic here is the modulus operator. It may not have been covered in your math classes unless they covered discrete math or computer science, but the idea is pretty straightforward, it returns the remainder when the first number is divided by the second.
Here are a few examples:
10 % 5 == 0 23 % 5 == 3 4 % 5 == 4
If it's still unclear, try with a few more values in your REPL or on Repl.it.
Modular arithmetic comes up in plenty of applications irl, like minutes past the hour.
So we can see that numbers that are divisible by the second number will return zero with the modulus operator.
For numbers that are divisible by five:
i % 5 == 0
And for numbers that are divisible by three:
i % 3 == 0
Now that we have an easy way to identify these numbers, we can iterate through and add each of them to a running total. I wrote a function that would sum all 3 and 5 multiples under n, but there are plenty of alternate ways to approach it.
Here's my completed code, also available on GitHub.
def sumOf3or5MultiplesUnder(n): total = 0 for i in range (0, n): if i % 3 == 0 or i % 5 == 0: total = total + i return total print(sumOf3or5MultiplesUnder(1000))
That's it for problem one! Let me know what you think or if you used a different approach.