On Day 2 we have another warming exercise. We have a spreadsheet given as input. We need to calculate the difference between lowest and highest number in each row and then add them together.
data = File.readlines("2.txt", chomp: true).map { |row| row.split("\t").map(&:to_i) }
sum = data.map do |row|
row.minmax.reduce(:-).abs
end.sum
puts sum
minmax
is a nice method that returns min and max value.
Second part is more complicated. In each row we need to find numbers that divide into a whole number. Then we need to sum the results of such divisions.
Here is Ruby code:
data = File.readlines("2.txt", chomp: true).map { |row| row.split("\t").map(&:to_i) }
def fetch(row)
row.size.times do |i|
(i + 1).upto(row.size - 1) do |j|
a = row[i]
b = row[j]
if b % a == 0
return b / a
end
end
end
end
values = data.map do |row|
fetch(row.sort)
end
puts values.sum
For each row we basically check every number with every other number. Values in row are first sorted, so we should actually get correct results.