Solve a few more puzzles.
This commit is contained in:
42
day11.cr
Normal file
42
day11.cr
Normal file
@@ -0,0 +1,42 @@
|
||||
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
|
||||
Reference in New Issue
Block a user