Day six
This commit is contained in:
parent
8b74765fe1
commit
eafc6ef723
2 changed files with 234 additions and 0 deletions
130
6.input
Normal file
130
6.input
Normal file
|
@ -0,0 +1,130 @@
|
||||||
|
....#.......#.............#..##...................#..#..#..................................#....#.................................
|
||||||
|
................................#..#.............##.....#....#....................#.............................................#.
|
||||||
|
.#....#.........................................................................................#.#...............................
|
||||||
|
.......#.......#..................#........#..................................#...............#...........#.......................
|
||||||
|
..#......................#.....#...........#..........................................................................#...........
|
||||||
|
.#.............#.............#....#...............#..#................................................#..........#................
|
||||||
|
.#............................................#........#........................................#...............................#.
|
||||||
|
...............#...........#....#............................................#.......#...................................#........
|
||||||
|
.#.........................#................#.........#..##.....#........................................#........................
|
||||||
|
.........#...#......#..................#...........................................................#...#..............#...........
|
||||||
|
..................#..#....................#...................#.....................#......#....#...........#..#.........#........
|
||||||
|
.........................................................................................#..........#.............................
|
||||||
|
...........#...........#.....#..................#....................#............................................................
|
||||||
|
........#...........................................#............#...........................#.........................#..........
|
||||||
|
....##....##..............................#.................................................................#....#....#.......#...
|
||||||
|
..#............#.........##....................................................#.....................#.....................#......
|
||||||
|
......#.......#.##.......##...........................................#........#................#.................................
|
||||||
|
..#...#.........................................#....................#.....#........#....#......#......#................#.........
|
||||||
|
.#...................##............................................................#....................#.......................#.
|
||||||
|
......#....#.....#............#............#.................................................#..#.......#..........#..............
|
||||||
|
...............#....#.........#.............................................................................................#.....
|
||||||
|
...........#..........................#..............................................#.........#...............#..#..............#
|
||||||
|
...........#...#.................#........................................#...................#....#..............................
|
||||||
|
........#................................#...........................................................#.......#....................
|
||||||
|
...........#....................#.....#.........................................................#..............#....#...#.........
|
||||||
|
..........#........................................................#..............#..............................#................
|
||||||
|
..............................##...........................................#.....................................................#
|
||||||
|
...#..#........................................................................................................#........#.....##..
|
||||||
|
.......#........#........#.#.....................#................................................#.......................#...#...
|
||||||
|
...............#.......................................................................#.........#......#.#.##....................
|
||||||
|
......#..................#.....#..................#..#..................#.................#..#.....#...................#....#.....
|
||||||
|
.....#........#.............#....#...............................#.................#..............................................
|
||||||
|
....................................................#.......#......................................#....#.........................
|
||||||
|
...#.............#...............#.............#......#.#..............#......#.............#.....................................
|
||||||
|
..............#..................#............................................#..#.........................#......................
|
||||||
|
.............#............#........#........................................#.....................................................
|
||||||
|
...#.........#.............#.........#............#..........................................#................#...#...............
|
||||||
|
...........#.................#...................................................................#................................
|
||||||
|
...#..............................................................................................................#...............
|
||||||
|
..........#...............#...#......#...............##..............................................#....#...................#...
|
||||||
|
.........................................#...................................................#..#.....................#...........
|
||||||
|
......#..#.........#....................................#....................#..........#......#..................................
|
||||||
|
........#.........................................#................#.#.......#.......................#............#..............#
|
||||||
|
..........................#...............#....................#.............................#..............#.....................
|
||||||
|
..........................#...........#............................................#....#...#.....................................
|
||||||
|
...........#........#..........#..............................................................#...##......#.......#......#........
|
||||||
|
....#..........#...#...................##..........#.........................................#....#...............................
|
||||||
|
...............................................................#................................................#..........#......
|
||||||
|
................................................................................................................#.....#...........
|
||||||
|
...#.....................#......................................................................#....................#............
|
||||||
|
......................##...........#.......#.......#.......................................#......................................
|
||||||
|
......#......#........#....................................................................................#......................
|
||||||
|
.......#......................#.........................................................#.......#.................................
|
||||||
|
...............#..........#...#.#..........#.....#..............##.......#.....#....................................#.............
|
||||||
|
.......##....................................................................................#.#...#..........................#...
|
||||||
|
......#.............#.#.........................#....#......#......#...............#.........#..#.................................
|
||||||
|
.........................#........#.........................#....#..................#.................#............#......#.#.....
|
||||||
|
............#............#......................#.#................##........#....................................................
|
||||||
|
......#..............................#...........#.......#........#.................#.............................................
|
||||||
|
............................................#.....................................................#.................#...#.........
|
||||||
|
.................#.......................................#..................##...#..............................#......#.......#..
|
||||||
|
.#..#................#.#......................................#..........#..........#...........................#.......#.........
|
||||||
|
.........................................................................#.....##.............................#.............#.....
|
||||||
|
.#.......................#.....................#....##....#........................................#..............................
|
||||||
|
......#...........................................##..........#......#.........................#..#..........#....#...#...........
|
||||||
|
........#.#....................................................................................#..................................
|
||||||
|
..........#..............................#.....#......#.........#............................#........................#...........
|
||||||
|
....................#................................................................#...............................#........#...
|
||||||
|
....................................#.......#...................................##.........................#......................
|
||||||
|
.....................#.....................................#.........#..........................#.................................
|
||||||
|
.......#.................................#.....................#........................................#....................#....
|
||||||
|
......................................................................#.....#........................#.......................#....
|
||||||
|
..#............................#..................#...#.........#..........#..#.........................................#.#.......
|
||||||
|
....#............................................................................#.............................#..#.....#.........
|
||||||
|
......#..................................#.............................................................................#.........#
|
||||||
|
....#......................................................................#................#.....#...........................#...
|
||||||
|
.............#.........................#.#....................#........................#......................................#...
|
||||||
|
....#......................................................................#...#..................#..........#....#...............
|
||||||
|
.......#....#.#..#..#....#........#.....................................................#..................#..#...................
|
||||||
|
#..............#....................................#.......................................#.....................#...........#...
|
||||||
|
#.........#....#..#.........#.................#..................#.#..............................##......................#.......
|
||||||
|
................#.........#......................................................................................................#
|
||||||
|
...............................#.........#.................................................................#.....#.#..............
|
||||||
|
..........#................#.............................#.............#.......#..........................................#.......
|
||||||
|
.....#.........#........#..............#.......................................#.........^........................................
|
||||||
|
........................#................#........#.......................................#............................#...#......
|
||||||
|
......#.....#.......#.................................................#...............#.....#.....................................
|
||||||
|
..................................................#......#.....................................#....#....#.##....................#
|
||||||
|
.........................................................................#...#..............#...............#.....................
|
||||||
|
..........#.................#...................#.........................................................................#....#..
|
||||||
|
...........#.....................#.....#.......................................#....................#............#........#.......
|
||||||
|
......................#...........#........................................................................................#......
|
||||||
|
..........#.......#.................................................................................#.......#.....................
|
||||||
|
........#.....................................#..................................................##...............................
|
||||||
|
.......#................................#.........#..#..................................................................#.........
|
||||||
|
...........#...................##.............#...............................#..........#....................#.....#...#.........
|
||||||
|
....................................##..#..........................................#..............................................
|
||||||
|
...............#..#............#..............................#.#.#........#......#...............................................
|
||||||
|
..#..................................#....#.......................................................................................
|
||||||
|
........................#.................##.........#......................#........................#.#.#........................
|
||||||
|
.......................................#.##....................................................................#..................
|
||||||
|
..................................##............#..............................................................................#..
|
||||||
|
..#.................................................#.....................................................................#.......
|
||||||
|
................#..#..#...#.........#...#.................................................................#.....................##
|
||||||
|
.....#......................#...........#.............#...........................................................................
|
||||||
|
........#.....................#..............................................#................#..............................#....
|
||||||
|
........#.............#.........................#.............................................#................#..........#......#
|
||||||
|
#........#...................................#....#......#...............................#........................................
|
||||||
|
...........#........#..................................................#.............#..........................#.............#...
|
||||||
|
....................#..#.#.................................................#.#...........#................................#.#.....
|
||||||
|
.......................#...................................................#....................................................#.
|
||||||
|
......#......................................#..........##.......................#...........#.........#..........................
|
||||||
|
.......#..................#..................#......................#............................#.............#...#..............
|
||||||
|
.....................................................................................#........#................#.........#........
|
||||||
|
............................#..............................................................#.....#........#......#................
|
||||||
|
..#..........................#.........#.................#...........#...#....#........................#.......#.............#....
|
||||||
|
.#.....#.....#.....................#........#...............#............#.##........#..................................#.........
|
||||||
|
............#.#..................................#..#.........#.................#............................#........#.....#.....
|
||||||
|
............#.........................#..................................#........................................................
|
||||||
|
....................#................#...........#..........................................................................#.....
|
||||||
|
....................#.....................................................#.........#......#...........#...#.#..................#.
|
||||||
|
........#..........#.......................................#...............#....#............#.....................#..............
|
||||||
|
.......#...#......#...................#.......#..........................#.........................#...................#..........
|
||||||
|
.#............#....###...............###................................#.............................#...........................
|
||||||
|
.............................#.......#..............................#.#.........................................#..#..............
|
||||||
|
...............#.........#...................#...................................#..#..................#..........................
|
||||||
|
........#.......#..#..................#........................................................................#...............#..
|
||||||
|
.#.............#.....................#........#..........................#.........#..........................#...........#.......
|
||||||
|
.....#.............#.....#..........#.....#.............#............#.............................#..........................#...
|
||||||
|
...................#.......................#......#.#..............#..###.....#......................#...........#.......#.#......
|
104
6.rb
Executable file
104
6.rb
Executable file
|
@ -0,0 +1,104 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
problem = 6
|
||||||
|
input = File.readlines("#{problem}.input").map(&:strip).map(&:chars)
|
||||||
|
#input = DATA.read.split("\n").map(&:chars)
|
||||||
|
|
||||||
|
DIRECTIONS = ["^", ">", "v", "<"]
|
||||||
|
|
||||||
|
def find_start(input)
|
||||||
|
input.each_with_index do |row, x|
|
||||||
|
y = row.index { DIRECTIONS.include?(_1) }
|
||||||
|
return [x,y] unless y.nil?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def movement(direction)
|
||||||
|
[[-1, 0], [0, 1], [1, 0], [0, -1]][direction]
|
||||||
|
end
|
||||||
|
|
||||||
|
def out_of_bounds?(input, location)
|
||||||
|
location.first >= input.size ||
|
||||||
|
location.last >= input.first.size ||
|
||||||
|
location.first < 0 ||
|
||||||
|
location.last < 0
|
||||||
|
end
|
||||||
|
|
||||||
|
def obstructed?(input, location)
|
||||||
|
["O", "#"].include?(input[location.first][location.last])
|
||||||
|
end
|
||||||
|
|
||||||
|
def traverse(input, starting_location, starting_direction)
|
||||||
|
location = starting_location.dup
|
||||||
|
direction = starting_direction.dup
|
||||||
|
visited = Hash.new { |h, k| h[k] = 0 }
|
||||||
|
|
||||||
|
while
|
||||||
|
visited[location] += 1
|
||||||
|
|
||||||
|
next_location = []
|
||||||
|
loop do
|
||||||
|
movement = movement(direction)
|
||||||
|
next_location = [
|
||||||
|
location.first + movement.first,
|
||||||
|
location.last + movement.last
|
||||||
|
]
|
||||||
|
break if out_of_bounds?(input, next_location)
|
||||||
|
break unless obstructed?(input, next_location)
|
||||||
|
direction = (direction + 1) % 4
|
||||||
|
end
|
||||||
|
|
||||||
|
if out_of_bounds?(input, next_location)
|
||||||
|
return visited.keys
|
||||||
|
elsif visited[location] > 5
|
||||||
|
return :loop
|
||||||
|
else
|
||||||
|
location = next_location
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_obstructions(input, nodes, start_location, start_direction)
|
||||||
|
last_value = "."
|
||||||
|
nodes.select.with_index do |node, i|
|
||||||
|
# undo last mark
|
||||||
|
if i > 0
|
||||||
|
last_location = nodes[i - 1]
|
||||||
|
input[last_location.first][last_location.last] = last_value
|
||||||
|
end
|
||||||
|
# mark node a barrier
|
||||||
|
last_value = input[node.first][node.last]
|
||||||
|
input[node.first][node.last] = "O"
|
||||||
|
|
||||||
|
# traverse
|
||||||
|
traverse(input, start_location, start_direction) == :loop
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
path = []
|
||||||
|
location = find_start(input)
|
||||||
|
direction = DIRECTIONS.index(input[location.first][location.last])
|
||||||
|
|
||||||
|
visited = traverse(input, location, direction)
|
||||||
|
|
||||||
|
start = Time.now
|
||||||
|
result_2 = find_obstructions(input, visited, location, direction)
|
||||||
|
finish = Time.now
|
||||||
|
puts "Finished in #{finish - start}"
|
||||||
|
|
||||||
|
result_1 = visited.uniq.size
|
||||||
|
|
||||||
|
p result_1
|
||||||
|
p result_2.uniq.size
|
||||||
|
|
||||||
|
__END__
|
||||||
|
....#.....
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#..^.....
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#...
|
Loading…
Reference in a new issue