parent
2b303f545b
commit
e00ad687ce
@ -0,0 +1,75 @@
|
||||
require "set"
|
||||
|
||||
require "minitest"
|
||||
require "minitest/pride"
|
||||
|
||||
class Slice
|
||||
def self.parse(s)
|
||||
clay = Set.new
|
||||
s.scan(/^(x|y)=(\d+), (?:x|y)=(\d+)..(\d+)$/m).each do |xy, i, min, max|
|
||||
i, min, max = [i, min, max].map(&:to_i)
|
||||
clay.merge((min..max).map {|j| xy == ?x ? [j, i] : [i, j] })
|
||||
end
|
||||
new(clay)
|
||||
end
|
||||
|
||||
def initialize(clay)
|
||||
@clay = clay
|
||||
end
|
||||
|
||||
def to_s
|
||||
min_x, max_x = @clay.map(&:last).minmax
|
||||
min_y, max_y = @clay.map(&:first).minmax
|
||||
min_y = [0, min_y].min
|
||||
(min_y..max_y).map {|y|
|
||||
(min_x-1..max_x+1).map {|x|
|
||||
if [x, y] == [500, 0]
|
||||
?+
|
||||
else
|
||||
@clay.include?([y, x]) ? ?# : ?.
|
||||
end
|
||||
}.join
|
||||
}.join(?\n)
|
||||
end
|
||||
end
|
||||
|
||||
class TestSlice < Minitest::Test
|
||||
def test_parse_to_s
|
||||
slice = Slice.parse(<<~SLICE)
|
||||
x=495, y=2..7
|
||||
y=7, x=495..501
|
||||
x=501, y=3..7
|
||||
x=498, y=2..4
|
||||
x=506, y=1..2
|
||||
x=498, y=10..13
|
||||
x=504, y=10..13
|
||||
y=13, x=498..504
|
||||
SLICE
|
||||
|
||||
assert_equal <<~SLICE.chomp, slice.to_s
|
||||
......+.......
|
||||
............#.
|
||||
.#..#.......#.
|
||||
.#..#..#......
|
||||
.#..#..#......
|
||||
.#.....#......
|
||||
.#.....#......
|
||||
.#######......
|
||||
..............
|
||||
..............
|
||||
....#.....#...
|
||||
....#.....#...
|
||||
....#.....#...
|
||||
....#######...
|
||||
SLICE
|
||||
end
|
||||
end
|
||||
|
||||
def solve(input)
|
||||
end
|
||||
|
||||
if __FILE__ == $0
|
||||
require "minitest/autorun" and exit if ENV["TEST"]
|
||||
|
||||
puts solve(ARGF.read)
|
||||
end
|
Loading…
Reference in new issue