#!/bin/env ruby require 'pry' input = File.readlines('./input').map(&:strip) lights = Array.new(1000) { Array.new(1000, false) } instructions = {} 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 if lights[instruction[:Start][0] + x][ instruction[:Start][1] + y] < 0 lights[instruction[:Start][0] + x][ instruction[:Start][1] + y] = 0 end when 'toggle' lights[instruction[:Start][0] + x][ instruction[:Start][1] + y] += 2 end end end end puts "Part 2 Solution: #{lights.flatten.sum}"