-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path11.rb
42 lines (35 loc) · 1.51 KB
/
11.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# https://adventofcode.com/2024/day/11
stones = File.read('input11.txt').scan(/\d+/).map(&:to_i)
tallied_stones = Hash.new(0).merge(stones.tally)
def blink(tallied_stones)
tallied_stones.dup.each do |stone_mark, count|
if stone_mark == 0
tallied_stones[1] += count
tallied_stones[0] -= count
elsif (stone_mark_s = stone_mark.to_s).length.even?
left_half = stone_mark_s[..stone_mark_s.length / 2 - 1].to_i
right_half = stone_mark_s[stone_mark_s.length / 2..].to_i
tallied_stones[left_half] += count
tallied_stones[right_half] += count
tallied_stones[stone_mark] -= count
else
tallied_stones[stone_mark * 2024] += count
tallied_stones[stone_mark] -= count
end
end
tallied_stones.delete_if { |_, value| value == 0 }
end
########################################################################################################################
# 1
########################################################################################################################
tallied_stones_dup = tallied_stones.dup
25.times { blink(tallied_stones_dup) }
puts tallied_stones_dup.values.sum
# 211306
########################################################################################################################
# 2
########################################################################################################################
tallied_stones_dup = tallied_stones.dup
75.times { blink(tallied_stones_dup) }
puts tallied_stones_dup.values.sum
# 250783680217283