AoC2015/day06/solution.rb

56 lines
1.9 KiB
Ruby
Raw Normal View History

2022-07-15 12:12:25 +00:00
#!/bin/env ruby
require 'pry'
input = File.readlines('./input').map(&:strip)
lights = Array.new(1000) { Array.new(1000, false) }
instructions = Hash.new
instructions = input.map.with_index do |line, i|
line.slice!('turn')
line = line.split(' ')
{ Command: line[0], Start: line[1].split(',').map!(&:to_i), End: line[3].split(',').map!(&:to_i) }
end
instructions.each do | instruction |
x = instruction[:End][0] - instruction[:Start][0] + 1
y = instruction[:End][1] - instruction[:Start][1] + 1
y.times do |y|
x.times do |x|
case instruction[:Command]
when 'on'
lights[instruction[:Start][0] + x][ instruction[:Start][1] + y] = true
when 'off'
lights[instruction[:Start][0] + x][ instruction[:Start][1] + y] = false
when 'toggle'
lights[instruction[:Start][0] + x][ instruction[:Start][1] + y] = !(lights[instruction[:Start][0] + x][ instruction[:Start][1] + y])
end
end
end
end
puts "Part 1 Solution: #{lights.flatten.count(true)}"
# Part 2 (sloppy style)
lights = Array.new(1000) { Array.new(1000, 0) }
instructions.each do | instruction |
x = instruction[:End][0] - instruction[:Start][0] + 1
y = instruction[:End][1] - instruction[:Start][1] + 1
y.times do |y|
x.times do |x|
case instruction[:Command]
when 'on'
lights[instruction[:Start][0] + x][ instruction[:Start][1] + y] += 1
when 'off'
lights[instruction[:Start][0] + x][ instruction[:Start][1] + y] -= 1
lights[instruction[:Start][0] + x][ instruction[:Start][1] + y] = 0 if lights[instruction[:Start][0] + x][ instruction[:Start][1] + y] < 0
when 'toggle'
lights[instruction[:Start][0] + x][ instruction[:Start][1] + y] += 2
end
end
end
end
puts "Part 2 Solution: #{lights.flatten.sum}"