Day twenty-two
This commit is contained in:
parent
6dd5d78331
commit
2167efbb3a
2 changed files with 2385 additions and 0 deletions
53
22/main.rb
Executable file
53
22/main.rb
Executable file
|
@ -0,0 +1,53 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
require "debug"
|
||||||
|
|
||||||
|
input = (ARGV.first.nil? ? DATA : ARGF)
|
||||||
|
.readlines(chomp: true)
|
||||||
|
.map(&:to_i)
|
||||||
|
|
||||||
|
def evolve(secret)
|
||||||
|
a = ((secret * 64) ^ secret) % 16777216
|
||||||
|
b = ((a / 32) ^ a) % 16777216
|
||||||
|
c = ((b * 2048) ^ b) % 16777216
|
||||||
|
end
|
||||||
|
|
||||||
|
part_1 = input.map do |secret|
|
||||||
|
original = secret
|
||||||
|
2000.times { secret = evolve(secret) }
|
||||||
|
|
||||||
|
secret
|
||||||
|
end.sum
|
||||||
|
|
||||||
|
p part_1
|
||||||
|
|
||||||
|
sequences = input.map do |secret|
|
||||||
|
secrets = 2000.times
|
||||||
|
.map { secret = evolve(secret) }
|
||||||
|
|
||||||
|
prices = secrets.map { _1.digits.first }
|
||||||
|
|
||||||
|
changes = prices
|
||||||
|
.map.with_index { |p, i| i == 0 ? 0 : p - prices[i - 1] }
|
||||||
|
|
||||||
|
sequences = Hash.new
|
||||||
|
changes[1..].each_cons(4).with_index.each do |sequence, i|
|
||||||
|
sequences[sequence] ||= prices[i + 4]
|
||||||
|
end
|
||||||
|
|
||||||
|
sequences
|
||||||
|
end
|
||||||
|
|
||||||
|
unique_sequences = sequences.flat_map(&:keys).uniq
|
||||||
|
|
||||||
|
part_2 = unique_sequences.map do |sequence|
|
||||||
|
sequences.sum { _1.fetch(sequence, 0) }
|
||||||
|
end.max
|
||||||
|
|
||||||
|
p part_2
|
||||||
|
|
||||||
|
__END__
|
||||||
|
1
|
||||||
|
10
|
||||||
|
100
|
||||||
|
2024
|
Loading…
Reference in a new issue