AdventOfCode-2019/day11.cr

43 lines
855 B
Crystal
Raw Normal View History

2020-12-07 02:36:36 -08:00
require "advent"
require "./intcode_fibers.cr"
painted_white = Set({Int64, Int64}).new
color = {} of {Int64,Int64} => Int64
color[{0_i64, 0_i64}] = 1_i64
input, output = new_interpreter("", input(2019, 11).split(",").map &.to_i64)
pos = {0_i64, 0_i64}
facing = {0_i64, 1_i64}
struct Tuple(*T)
def turn_left
{-self[1], self[0]}
end
def turn_right
turn_left.turn_left.turn_left
end
def add(other)
{self[0] + other[0], self[1] + other[1]}
end
end
loop do
c = color[pos]? || 0_i64
input.send c
break unless nc = output.receive
break unless turn = output.receive
color[pos] = nc
painted_white << pos if nc == 1
facing = (turn == 0 ? facing.turn_left : facing.turn_right)
pos = pos.add facing
end
6.times do |y|
y = - y
45.times do |x|
print (color[{x.to_i64, y.to_i64}]? == 1 ? '#' : ' ')
end
puts
end