Add solutions for day 14.
This commit is contained in:
parent
6eef99e081
commit
ca92e7cca0
48
day14.cr
Normal file
48
day14.cr
Normal file
|
@ -0,0 +1,48 @@
|
|||
require "./common.cr"
|
||||
|
||||
LINE_COUNT = 637061
|
||||
recipes = Deque(Int32).new
|
||||
recipes << 3
|
||||
recipes << 7
|
||||
elves = [0, 1]
|
||||
|
||||
def add_recipes(recipes, elves)
|
||||
new_num = elves.map { |it| recipes[it] }.sum
|
||||
new_num.to_s.chars.map(&.to_i32).each do |n|
|
||||
recipes << n
|
||||
end
|
||||
|
||||
elves.each_with_index do |elf, index|
|
||||
elves[index] = (elf + recipes[elf] + 1) % recipes.size
|
||||
end
|
||||
end
|
||||
|
||||
def index?(recipes, sequence, start_at = 0)
|
||||
return nil if recipes.size < sequence.size
|
||||
(recipes.size-sequence.size+1-start_at).times do |offset|
|
||||
correct = true
|
||||
sequence.each_with_index do |s, i|
|
||||
correct &= (recipes[start_at + offset + i] == s)
|
||||
break unless correct
|
||||
end
|
||||
return start_at + offset if correct
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
# Part 1
|
||||
while recipes.size < LINE_COUNT + 10
|
||||
add_recipes(recipes, elves)
|
||||
end
|
||||
|
||||
puts recipes.to_a[-10..-1].map(&.to_s).join
|
||||
|
||||
# Part 2
|
||||
digits = LINE_COUNT.to_s.chars.map(&.to_i32)
|
||||
index = nil
|
||||
old_size = 0
|
||||
until (index = index?(recipes, digits, Math.max(old_size - 10, 0)))
|
||||
old_size = recipes.size
|
||||
add_recipes(recipes, elves)
|
||||
end
|
||||
puts index
|
Loading…
Reference in New Issue
Block a user