43 lines
855 B
Crystal
43 lines
855 B
Crystal
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
|