diff options
Diffstat (limited to 'day12/part1')
-rwxr-xr-x | day12/part1 | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/day12/part1 b/day12/part1 new file mode 100755 index 0000000..2debadf --- /dev/null +++ b/day12/part1 @@ -0,0 +1,43 @@ +#!/usr/bin/env ruby + +def apply_gravity(moons) + (0...moons.count).to_a.combination(2).each do |a, b| + 3.times do |i| + case moons[a][0][i] <=> moons[b][0][i] + when -1 + moons[a][1][i] += 1 + moons[b][1][i] -= 1 + when 1 + moons[b][1][i] += 1 + moons[a][1][i] -= 1 + end + end + end + moons +end + +def update(moons) + moons.map do |moon| + [moon[0].zip(moon[1]).map(&:sum), moon[1]] + end +end + +def calculate_energy(moons) + moons.map { |moon| + moon[0].map(&:abs).sum * moon[1].map(&:abs).sum + }.sum +end + +input = $stdin.readlines.map(&:strip) + +moons = input.map do |line| + m = line.scan(/-?\d+/) + [[m[0].to_i, m[1].to_i, m[2].to_i], [0, 0, 0]] +end + +1000.times do + moons = apply_gravity(moons) + moons = update(moons) +end + +puts calculate_energy(moons) |