Solving Project Euler Problem 13 – Large Sum
For my next problem, I decided to take one of the popular routes and experimented with few of the simpler problems from Project Euler
The first problem that I tried was Problem 13 – Large Sum
Problem Statement
Work out the first ten digits of the sum of N 50-digit numbers.
Input Format
The first line contains N, next N lines contain a 50 digit number each.
Output Format
Print only first 10 digits of the final sum
Constraints
1 ≤ N ≤ 10^3
Sample Input
5
37107287533902102798797998220837590246510135740250
46376937677490009712648124896970078050417018260538
74324986199524741059474233309513058123726617309629
91942213363574161572522430563301811072406154908250
23067588207539346171171980310421047513778063246676
Sample Output
2728190129
When I started this originally, I was a bit confused and I was approaching it wrongly.
I thought I'm supposed to find the sum of digits of all numbers combined together, then print the first 10 digits of it. Naturally, it was completely wrong, and I realized it after few failed submissions (Boo to the late night/early morning mindset which confuses you)
Read the problem statement carefully. It's not about adding the digits of the numbers. It's about adding the numbers themselves, be it 5 or 50 or 500 numbers, and finally printing only the first 10 digits of the sum. Each number, of course, would be 50 digits long.
Without further ado, here's my solution:
inputs = STDIN.readline().chomp.to_i
val = 0
loop do
n = STDIN.readline().to_i
val = val + n
inputs = inputs - 1
break if inputs == 0
end
array = val.to_s.split('')
print "#{array[0..9].join('').to_i}"
Breakdown of the solution:
- Read the number of test cases from STDIN as an integer
- Initiate the final value for our calculation
- Loop over the test cases
- Read the set of numbers (1 on each line, 1 for each test case) and keep adding them iteratively for our val
- Once the final val is present, store it in an array, splitting each digit of the final sum into individual array elements
- The elements would be stored as char/string in this case, as the .split() method in Ruby works on string
- Print the final value, taking only the first 10 elements of the array and converting them to Integer again.
That's it, folks! I'll be writing more about other problems I solve as and when they happen 🙂
Note: Solution files for this and any future Project Euler problems that I solve can be found here: Github: glnarayanan/ProjectEuler