Something went wrong. Try again.
Code for the Advent of Code event
aoc advent-of-code
Something went wrong. Try again.
1.2 kB · 64 lines
Ruby
at rust
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465#!/usr/bin/env ruby# frozen_string_literal: true
require 'matrix'require 'pry'
require_relative '../../../lib/aoc/intcode/cpu'
DEBUG = ENV.fetch('DEBUG', nil)
PATH = ARGV.first || 'input'
def calc(x, y) cpu = AoC::Intcode::CPU.new.print_output!(false).load!(PATH) cpu.input!(x) cpu.input!(y) cpu.run! cpu.output[-1]end
x = 0y = 0start_x = 0sum = 0lines = Queue.new
loop do x = start_x last_x = x last = 0 line_sum = 0 loop do value = calc x, y line_sum += value sum += value if x < 50 && y < 50 start_x = x if last == 0 && value == 1 last_x = x if value == 1 break if (last == 1 && value == 0) || (y < 50 && x > 49) last = value x += 1 end
puts "#{y}: #{line_sum}" if DEBUG
current_line = [start_x, last_x] lines.enq current_line
lines.deq while lines.size > 100
puts "Part 1: #{sum}" if y == 49
if lines.size == 100 previous_line = lines.deq current_start_x = current_line.first previous_end_x = previous_line.last
if current_start_x + 99 <= previous_end_x puts "Part 2: #{((previous_end_x - 99) * 10_000) + (y - 99)}" break end end
y += 1end