From 93411e9cc54926aefba887334af8a690f73e725e Mon Sep 17 00:00:00 2001 From: Bryce Allen Date: Fri, 9 Dec 2022 12:54:29 -0500 Subject: [PATCH] day9 p1 --- day9/day9.jl | 101 +++ day9/example.txt | 8 + day9/input.txt | 2000 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 2109 insertions(+) create mode 100644 day9/day9.jl create mode 100644 day9/example.txt create mode 100644 day9/input.txt diff --git a/day9/day9.jl b/day9/day9.jl new file mode 100644 index 0000000..449d995 --- /dev/null +++ b/day9/day9.jl @@ -0,0 +1,101 @@ +#!/usr/bin/env julia + +using Test + +struct Move + direction :: Char + count :: Int +end + +mutable struct State + head_x :: Int + head_y :: Int + tail_x :: Int + tail_y :: Int +end + +function parse_move(line) + parts = split(line, limit=2) + return Move(parts[1][1], parse(Int, parts[2])) +end + +function read_moves(io) + return [parse_move(line) for line in readlines(io)] +end + +function apply_move(state, direction) + if direction == 'U' + state.head_y += 1 + elseif direction == 'D' + state.head_y -= 1 + elseif direction == 'L' + state.head_x -= 1 + elseif direction == 'R' + state.head_x += 1 + end + x_diff = state.head_x - state.tail_x + y_diff = state.head_y - state.tail_y + if abs(x_diff) <= 1 && abs(y_diff) <= 1 + return state + end + if abs(x_diff) <= 1 + state.tail_x += x_diff + state.tail_y += sign(y_diff) * (abs(y_diff) - 1) + elseif abs(y_diff) <= 1 + state.tail_y += y_diff + state.tail_x += sign(x_diff) * (abs(x_diff) - 1) + else + throw(DomainError("invalid state")) + end + return state +end + +function get_visited(moves) + visited = Set{NTuple{2, Int}}() + state = State(0, 0, 0, 0) + push!(visited, (state.tail_x, state.tail_y)) + for move in moves + for _ in 1:move.count + state = apply_move(state, move.direction) + push!(visited, (state.tail_x, state.tail_y)) + end + end + return visited +end + +function visited_map(visited) + (min_x, max_x) = extrema([t[1] for t in visited]) + (min_y, max_y) = extrema([t[2] for t in visited]) + nrows = max_y - min_y + 1 + ncols = max_x - min_x + 1 + vmap = zeros(Int, nrows, ncols) + for (x, y) in visited + vmap[nrows - (y - min_y), (x - min_x + 1)] = 1 + end + return vmap +end + +function test() + @testset "visited count" verbose=true begin + @test length(get_visited(read_moves("example.txt"))) == 13 + @test length(get_visited(read_moves("input.txt"))) == 6037 + end +end + +function main() + if size(ARGS, 1) == 0 + test() + else + infile = ARGS[1] + println("infile = ", infile) + moves = read_moves(infile) + println("moves: ", moves) + visited = get_visited(moves) + println("visited: ", visited) + println("count : ", length(visited)) + display(visited_map(visited)) + println() + end +end + +main() diff --git a/day9/example.txt b/day9/example.txt new file mode 100644 index 0000000..9874df2 --- /dev/null +++ b/day9/example.txt @@ -0,0 +1,8 @@ +R 4 +U 4 +L 3 +D 1 +R 4 +D 1 +L 5 +R 2 diff --git a/day9/input.txt b/day9/input.txt new file mode 100644 index 0000000..b249a09 --- /dev/null +++ b/day9/input.txt @@ -0,0 +1,2000 @@ +D 1 +U 2 +R 2 +U 1 +R 1 +U 2 +L 2 +D 1 +L 2 +R 1 +L 1 +R 1 +U 2 +D 2 +L 2 +R 2 +L 2 +R 1 +L 1 +D 1 +U 1 +R 1 +U 2 +D 1 +U 1 +D 1 +R 2 +D 1 +U 1 +R 1 +L 2 +R 2 +U 2 +R 2 +L 2 +R 2 +U 2 +D 2 +R 1 +U 2 +D 2 +U 2 +D 1 +L 1 +D 1 +L 1 +R 2 +D 2 +R 2 +D 1 +R 2 +L 1 +R 1 +L 2 +D 2 +U 1 +D 1 +R 2 +L 2 +D 2 +L 2 +D 2 +L 1 +R 2 +L 1 +D 1 +L 2 +D 1 +U 1 +R 1 +U 1 +R 2 +D 2 +R 1 +U 2 +D 1 +L 2 +D 2 +L 1 +D 1 +L 1 +D 1 +R 1 +L 1 +U 1 +D 2 +U 1 +D 2 +R 1 +D 2 +L 2 +U 1 +L 1 +R 1 +D 1 +U 1 +D 1 +R 1 +U 2 +L 1 +D 1 +U 2 +R 2 +D 2 +R 1 +D 1 +R 1 +L 1 +R 2 +U 1 +D 1 +L 1 +U 3 +L 2 +U 2 +L 2 +D 2 +L 1 +R 3 +D 1 +U 1 +L 3 +D 3 +U 1 +L 2 +U 1 +R 2 +U 3 +D 2 +L 3 +U 2 +R 2 +D 2 +U 1 +R 1 +L 3 +D 2 +L 3 +D 1 +U 3 +R 3 +U 3 +D 3 +U 3 +L 3 +U 1 +D 1 +U 1 +D 3 +R 3 +D 3 +U 3 +R 3 +L 3 +R 2 +U 3 +D 3 +L 1 +R 2 +D 2 +U 1 +R 1 +L 2 +D 3 +R 3 +D 1 +U 1 +D 1 +U 2 +D 1 +R 1 +D 2 +R 2 +L 1 +D 2 +L 1 +R 2 +L 3 +R 3 +L 1 +U 3 +R 3 +U 3 +D 1 +L 3 +R 1 +L 1 +R 2 +L 1 +U 2 +R 1 +D 2 +R 3 +L 3 +R 2 +U 3 +R 3 +L 1 +R 1 +L 1 +U 1 +L 2 +R 2 +L 3 +D 2 +L 2 +R 3 +D 3 +U 1 +L 2 +D 3 +U 3 +D 3 +R 1 +U 1 +L 2 +U 1 +L 1 +R 1 +U 3 +L 2 +R 1 +D 4 +R 3 +D 3 +L 3 +D 4 +R 4 +L 3 +R 2 +D 2 +R 4 +U 2 +D 3 +L 1 +R 2 +U 4 +R 3 +D 2 +U 1 +D 4 +R 1 +D 3 +U 3 +L 2 +R 2 +L 3 +R 3 +L 4 +D 3 +L 2 +U 3 +L 1 +R 2 +D 4 +R 3 +U 3 +L 2 +U 3 +D 2 +L 4 +D 4 +L 4 +U 4 +R 1 +D 1 +R 3 +U 3 +R 3 +D 3 +L 1 +U 1 +R 3 +L 2 +R 2 +D 2 +R 4 +U 4 +L 4 +D 3 +L 2 +R 4 +L 2 +D 1 +L 2 +R 4 +U 2 +L 2 +U 3 +L 4 +R 2 +L 4 +D 2 +L 1 +D 4 +L 3 +U 2 +D 1 +R 4 +U 2 +D 1 +R 4 +D 4 +U 3 +R 3 +U 4 +L 1 +D 3 +U 1 +D 3 +R 2 +U 1 +R 3 +L 4 +R 1 +L 4 +D 3 +R 4 +U 2 +L 1 +D 4 +L 2 +R 4 +L 2 +R 3 +L 3 +U 2 +R 3 +L 2 +R 1 +D 4 +L 3 +D 3 +L 5 +D 1 +R 3 +D 4 +L 4 +R 2 +D 5 +R 2 +L 2 +D 5 +U 2 +D 1 +U 2 +D 3 +L 2 +D 1 +L 3 +U 1 +D 3 +R 2 +U 4 +R 5 +D 5 +U 3 +R 1 +D 5 +U 1 +D 4 +R 1 +U 4 +D 4 +R 4 +U 5 +D 4 +R 1 +L 1 +D 5 +L 1 +D 4 +U 1 +D 2 +U 1 +D 1 +R 1 +D 2 +R 2 +D 1 +L 5 +R 3 +L 4 +D 3 +R 5 +D 4 +U 2 +R 2 +U 2 +D 2 +U 5 +L 4 +D 5 +L 5 +R 3 +D 2 +U 4 +D 2 +L 3 +R 2 +L 1 +U 2 +R 4 +L 5 +R 4 +D 1 +U 5 +D 4 +L 5 +R 2 +U 4 +D 3 +L 3 +D 3 +L 1 +U 5 +L 4 +R 1 +U 5 +D 4 +R 2 +L 1 +D 2 +R 3 +L 2 +R 5 +D 5 +R 2 +L 1 +U 3 +D 2 +L 1 +U 1 +R 4 +U 1 +D 1 +U 1 +R 2 +U 3 +R 4 +L 4 +R 1 +U 3 +R 3 +D 1 +L 3 +R 4 +L 1 +U 5 +D 6 +U 2 +L 4 +D 2 +U 1 +D 4 +R 5 +L 2 +R 6 +L 6 +U 1 +D 4 +L 3 +D 5 +U 4 +L 4 +R 2 +D 2 +L 3 +D 1 +U 6 +L 6 +R 2 +D 2 +U 3 +L 6 +R 1 +U 5 +R 5 +U 5 +D 1 +L 2 +U 1 +R 1 +D 5 +L 6 +R 1 +D 4 +R 3 +L 3 +D 2 +U 5 +D 6 +U 3 +D 6 +U 4 +L 2 +R 1 +U 5 +D 2 +L 1 +D 4 +U 1 +R 2 +L 2 +R 4 +D 1 +L 6 +D 5 +L 6 +R 6 +L 3 +U 5 +R 4 +D 4 +L 3 +D 2 +L 1 +R 4 +U 3 +R 2 +U 2 +R 5 +D 1 +U 5 +D 4 +R 4 +L 5 +D 5 +U 3 +R 1 +U 4 +L 5 +U 1 +D 2 +U 4 +D 4 +L 1 +U 2 +L 3 +U 5 +R 1 +L 5 +U 1 +R 4 +D 2 +L 6 +U 6 +R 6 +U 5 +R 6 +U 6 +L 5 +U 1 +L 5 +D 3 +R 1 +D 4 +L 3 +D 7 +U 1 +D 4 +R 2 +U 4 +D 4 +U 7 +D 3 +L 3 +D 3 +R 4 +D 7 +R 4 +D 5 +U 3 +L 5 +R 5 +D 5 +L 2 +R 3 +L 2 +R 4 +U 2 +L 4 +U 7 +L 2 +U 6 +D 3 +U 6 +R 2 +D 2 +U 6 +L 2 +R 4 +U 5 +D 2 +R 4 +L 2 +D 2 +R 1 +D 3 +R 1 +D 3 +U 4 +D 2 +L 4 +D 1 +L 5 +U 1 +R 2 +D 3 +U 4 +D 4 +L 5 +R 2 +D 2 +U 1 +D 7 +L 7 +R 2 +L 6 +D 4 +R 7 +L 3 +U 2 +D 2 +U 4 +L 5 +D 4 +U 4 +R 5 +L 5 +D 2 +R 5 +L 7 +U 1 +D 7 +L 3 +R 4 +L 5 +D 5 +L 2 +R 5 +L 3 +R 2 +L 4 +R 1 +D 3 +L 5 +R 2 +D 4 +U 3 +R 3 +L 5 +D 3 +R 1 +D 5 +R 5 +L 1 +D 6 +R 5 +D 4 +U 2 +L 4 +U 1 +D 3 +L 2 +D 7 +R 4 +L 1 +U 6 +R 8 +L 2 +U 2 +R 1 +U 7 +D 6 +L 7 +R 3 +U 5 +R 4 +L 8 +D 2 +R 4 +U 8 +L 6 +R 1 +L 7 +D 5 +L 3 +R 6 +U 1 +D 7 +L 2 +U 7 +R 1 +U 6 +L 3 +R 8 +D 5 +L 4 +R 4 +L 6 +D 6 +R 3 +L 2 +U 5 +R 3 +D 1 +R 7 +L 1 +U 8 +D 2 +U 3 +D 1 +L 2 +U 6 +L 1 +U 4 +R 6 +U 7 +R 1 +D 1 +U 8 +R 1 +D 7 +L 1 +U 4 +D 1 +U 2 +R 8 +U 1 +D 6 +R 1 +U 1 +R 5 +L 7 +R 3 +D 3 +U 8 +L 6 +D 7 +U 8 +L 4 +R 1 +L 7 +U 4 +D 3 +L 3 +R 6 +D 3 +U 8 +L 5 +D 8 +L 1 +U 7 +R 6 +L 5 +U 8 +R 2 +L 8 +R 7 +L 8 +U 7 +D 7 +U 3 +D 4 +U 8 +D 5 +U 3 +L 4 +D 4 +U 8 +R 7 +U 7 +L 7 +R 4 +L 1 +D 8 +R 9 +D 4 +R 8 +L 5 +R 9 +U 5 +D 1 +L 5 +D 7 +U 3 +R 5 +U 1 +R 3 +U 2 +D 9 +U 5 +R 3 +U 4 +R 3 +D 4 +U 7 +D 9 +L 7 +D 3 +U 1 +R 3 +U 4 +L 3 +R 8 +L 3 +U 8 +R 6 +L 6 +D 7 +L 7 +D 4 +L 3 +U 5 +L 2 +R 5 +D 3 +U 6 +L 9 +R 9 +D 9 +U 9 +R 4 +D 8 +R 8 +D 5 +L 7 +U 2 +R 4 +L 8 +R 4 +L 2 +R 3 +L 7 +R 1 +U 1 +L 5 +D 5 +R 9 +D 8 +U 7 +L 3 +R 5 +D 1 +U 1 +R 5 +D 6 +U 9 +D 8 +R 4 +D 7 +L 1 +U 5 +D 8 +L 4 +D 4 +L 7 +D 8 +R 5 +U 9 +D 2 +L 1 +R 2 +U 8 +D 4 +L 6 +D 1 +L 5 +D 6 +R 9 +U 1 +L 9 +U 4 +D 6 +R 8 +L 5 +R 1 +L 2 +R 7 +D 8 +L 4 +R 3 +U 2 +L 7 +U 2 +D 1 +R 8 +U 8 +L 1 +R 1 +D 2 +U 3 +L 5 +D 6 +L 3 +U 6 +R 2 +L 5 +U 6 +L 5 +D 3 +L 6 +D 2 +L 4 +U 10 +R 4 +D 7 +U 4 +D 4 +L 5 +U 3 +L 9 +R 7 +D 1 +L 4 +U 4 +D 5 +R 5 +D 4 +U 1 +D 3 +R 1 +L 6 +U 1 +D 1 +L 4 +U 5 +D 10 +R 4 +U 5 +R 1 +U 2 +R 4 +D 6 +L 7 +U 1 +R 2 +D 1 +L 7 +D 4 +U 9 +L 6 +D 8 +R 3 +U 7 +R 8 +U 2 +D 5 +R 3 +U 10 +D 3 +R 3 +U 1 +R 8 +D 10 +R 3 +D 1 +U 10 +L 5 +U 8 +D 6 +L 9 +D 5 +U 1 +R 9 +U 3 +D 3 +R 8 +L 9 +D 8 +U 3 +R 2 +D 3 +L 7 +D 3 +R 10 +L 9 +U 2 +R 8 +U 8 +R 5 +U 3 +L 9 +U 1 +D 7 +L 7 +R 5 +L 8 +U 8 +L 9 +R 10 +U 1 +R 5 +L 5 +D 7 +L 8 +D 5 +U 4 +L 4 +U 6 +D 4 +L 8 +U 8 +L 10 +D 1 +L 2 +D 3 +U 8 +L 7 +R 7 +U 6 +D 4 +U 8 +L 2 +R 6 +L 7 +D 11 +R 4 +D 9 +L 10 +U 3 +L 9 +U 10 +L 11 +U 11 +D 2 +U 4 +D 5 +L 11 +D 4 +L 6 +U 2 +D 8 +R 4 +U 4 +D 5 +U 8 +L 3 +U 2 +R 7 +U 10 +R 5 +L 3 +R 11 +U 2 +D 8 +U 3 +R 10 +U 10 +L 3 +R 7 +L 8 +D 5 +U 9 +D 9 +R 3 +U 4 +L 6 +D 9 +R 10 +L 2 +R 8 +U 11 +L 2 +R 1 +U 11 +R 2 +D 3 +U 9 +R 3 +L 2 +R 1 +L 6 +R 10 +L 2 +U 6 +R 4 +L 9 +U 11 +L 1 +R 11 +U 8 +L 4 +R 11 +L 6 +D 5 +L 11 +U 3 +D 5 +R 5 +U 2 +L 3 +R 4 +L 9 +R 7 +U 11 +R 7 +U 7 +D 10 +R 11 +D 10 +L 3 +D 5 +U 2 +L 1 +U 2 +R 2 +U 8 +R 1 +L 10 +R 10 +U 5 +D 4 +U 4 +R 4 +L 8 +R 6 +U 9 +R 5 +L 3 +U 9 +L 3 +D 4 +R 10 +D 11 +L 12 +R 1 +U 11 +L 10 +R 11 +D 10 +R 10 +L 4 +U 11 +D 2 +R 8 +L 6 +U 7 +D 7 +L 12 +U 1 +L 3 +D 8 +R 6 +L 7 +R 11 +L 2 +R 6 +U 2 +R 2 +L 2 +U 5 +R 12 +U 12 +D 12 +U 1 +D 6 +L 5 +U 3 +D 3 +L 4 +R 10 +L 5 +U 2 +D 8 +R 4 +D 5 +L 7 +U 2 +R 10 +D 12 +R 9 +U 11 +D 10 +R 4 +U 2 +D 1 +U 10 +D 8 +R 2 +L 9 +D 12 +U 12 +D 2 +U 8 +R 5 +L 8 +D 5 +U 9 +D 8 +U 7 +R 3 +L 10 +U 11 +L 5 +U 12 +L 2 +U 9 +D 7 +R 12 +U 9 +R 2 +L 3 +U 10 +D 9 +L 7 +U 5 +R 3 +D 3 +L 11 +D 1 +R 5 +L 1 +U 5 +L 6 +D 8 +L 2 +D 5 +U 8 +D 9 +R 8 +L 7 +D 6 +L 6 +D 1 +U 5 +L 4 +R 6 +U 9 +L 3 +U 3 +D 7 +L 1 +D 4 +L 9 +R 9 +U 6 +D 8 +U 12 +L 5 +D 4 +R 7 +L 2 +D 4 +U 7 +R 7 +U 2 +R 13 +D 5 +L 1 +R 5 +D 6 +U 2 +L 1 +U 5 +D 2 +R 9 +L 8 +U 9 +D 9 +U 12 +R 10 +U 9 +L 13 +R 5 +D 10 +L 9 +U 4 +D 12 +U 12 +R 13 +D 12 +U 7 +R 12 +D 8 +L 8 +U 2 +D 10 +L 2 +D 5 +U 3 +R 11 +D 4 +R 4 +L 1 +R 1 +D 9 +U 6 +R 10 +U 12 +L 10 +R 13 +D 7 +R 12 +L 5 +R 10 +D 4 +R 11 +L 7 +R 7 +U 7 +D 7 +U 11 +L 3 +R 9 +L 12 +D 11 +R 5 +D 5 +R 7 +D 7 +U 3 +L 11 +D 11 +L 10 +U 7 +L 13 +R 6 +L 10 +U 10 +D 10 +L 4 +R 5 +U 5 +D 2 +L 6 +D 8 +U 1 +R 12 +D 11 +U 3 +L 9 +R 10 +U 8 +R 10 +D 2 +R 3 +U 9 +D 7 +L 6 +R 9 +D 2 +U 11 +R 3 +D 1 +R 4 +L 11 +U 13 +R 12 +U 12 +R 8 +L 13 +U 7 +D 10 +R 11 +L 2 +U 9 +L 3 +R 5 +L 4 +R 11 +D 5 +R 1 +L 11 +U 10 +R 4 +L 1 +U 2 +D 8 +L 7 +U 1 +L 4 +D 1 +R 1 +L 11 +U 8 +R 11 +U 4 +R 10 +L 6 +D 7 +U 9 +L 14 +U 1 +R 10 +U 12 +R 1 +L 6 +D 9 +U 10 +L 10 +D 5 +R 14 +U 3 +R 13 +U 3 +L 13 +U 8 +L 10 +U 7 +R 12 +U 11 +R 6 +U 6 +D 6 +R 2 +L 7 +R 8 +U 8 +D 3 +R 8 +L 12 +U 11 +D 9 +U 6 +R 8 +D 8 +U 9 +R 12 +L 11 +U 10 +L 14 +R 9 +D 8 +U 14 +L 9 +D 11 +U 2 +R 2 +U 4 +R 7 +U 11 +L 8 +D 12 +L 11 +U 13 +L 1 +D 8 +U 8 +L 10 +U 12 +R 11 +U 3 +D 12 +L 1 +D 8 +L 4 +D 3 +L 2 +U 8 +D 9 +L 1 +U 9 +D 15 +U 5 +L 9 +D 2 +U 4 +L 2 +U 15 +L 8 +R 2 +U 1 +L 3 +D 10 +L 15 +U 2 +R 14 +D 1 +U 13 +D 4 +R 8 +D 6 +R 5 +D 13 +L 5 +R 6 +U 14 +L 15 +D 15 +U 12 +L 1 +D 3 +L 6 +D 2 +R 4 +D 10 +U 12 +R 13 +L 3 +R 15 +D 13 +U 15 +D 14 +U 8 +D 10 +U 5 +D 11 +R 15 +D 7 +R 1 +D 2 +L 5 +U 11 +L 14 +U 9 +D 13 +R 12 +U 10 +R 11 +D 9 +R 6 +D 7 +L 7 +U 14 +D 12 +L 6 +D 15 +U 11 +R 1 +U 3 +L 11 +R 3 +L 9 +R 9 +L 11 +R 12 +U 6 +R 13 +D 13 +L 9 +U 3 +D 6 +L 4 +D 3 +U 15 +D 13 +U 9 +D 1 +U 13 +D 12 +L 4 +U 6 +R 11 +D 2 +R 7 +U 9 +R 11 +U 3 +L 7 +U 4 +R 2 +D 14 +U 3 +D 14 +R 13 +L 4 +R 1 +U 12 +D 10 +L 8 +D 2 +L 15 +U 1 +D 4 +U 16 +R 15 +D 1 +R 8 +U 14 +L 12 +U 2 +R 1 +D 16 +L 10 +R 11 +D 10 +L 15 +R 7 +U 10 +L 3 +U 11 +D 1 +L 5 +D 3 +U 8 +R 3 +U 5 +R 2 +D 11 +L 2 +D 7 +L 2 +U 3 +L 12 +D 13 +L 12 +U 7 +R 11 +L 4 +R 11 +L 8 +U 16 +L 1 +R 11 +L 4 +U 15 +L 16 +R 15 +U 6 +R 4 +U 3 +D 16 +R 9 +U 8 +R 5 +U 6 +L 2 +R 2 +D 10 +R 7 +D 13 +U 13 +R 14 +D 3 +L 15 +R 3 +D 11 +L 4 +U 12 +D 1 +U 8 +R 8 +L 4 +D 6 +L 15 +U 7 +D 15 +L 11 +U 14 +D 8 +U 15 +L 12 +R 6 +U 13 +R 5 +U 2 +L 1 +R 13 +D 10 +R 7 +L 9 +U 14 +R 1 +D 13 +L 11 +U 9 +L 13 +R 5 +D 14 +R 16 +U 5 +D 9 +R 2 +D 5 +R 8 +L 8 +U 16 +D 12 +R 3 +U 3 +D 5 +U 12 +D 14 +L 9 +U 12 +R 6 +L 9 +U 3 +D 16 +U 15 +R 6 +D 11 +R 10 +D 3 +U 16 +L 11 +R 2 +L 2 +R 9 +D 12 +L 8 +D 8 +R 13 +L 5 +D 17 +L 7 +D 10 +U 13 +L 11 +U 17 +L 13 +R 2 +D 6 +R 14 +D 14 +L 15 +R 8 +D 4 +U 7 +L 6 +R 6 +U 7 +D 12 +R 9 +L 8 +D 15 +L 14 +R 1 +U 8 +L 13 +D 16 +R 2 +U 2 +L 2 +D 13 +U 8 +D 6 +U 10 +L 9 +R 2 +L 7 +U 5 +R 6 +U 12 +D 3 +R 1 +U 4 +R 17 +U 11 +L 3 +U 13 +L 12 +U 6 +R 5 +D 12 +R 4 +U 4 +R 3 +D 11 +U 7 +L 10 +D 12 +U 12 +D 9 +R 4 +L 2 +R 9 +L 13 +D 16 +L 14 +D 5 +L 8 +D 6 +L 13 +U 1 +R 7 +U 5 +R 2 +U 11 +L 10 +D 14 +R 11 +L 5 +D 16 +U 9 +D 3 +U 11 +D 1 +U 5 +D 3 +U 8 +L 1 +D 1 +U 5 +L 17 +D 9 +L 14 +R 8 +D 15 +R 10 +U 4 +R 1 +U 3 +R 5 +L 13 +D 6 +L 15 +U 10 +L 5 +R 14 +L 1 +R 6 +D 10 +L 13 +D 3 +L 1 +U 10 +D 6 +R 16 +D 6 +R 4 +D 9 +U 9 +D 4 +R 1 +D 10 +R 7 +D 14 +R 10 +D 14 +U 14 +D 15 +R 11 +L 16 +D 18 +R 6 +U 8 +D 18 +R 18 +D 14 +U 9 +R 18 +U 14 +L 18 +U 1 +R 14 +D 1 +U 6 +R 3 +L 13 +D 4 +L 9 +D 2 +U 5 +D 6 +U 9 +L 13 +U 12 +R 11 +D 17 +U 17 +L 8 +U 15 +R 16 +L 9 +D 2 +R 16 +D 2 +L 9 +D 9 +R 15 +D 10 +L 12 +R 14 +L 4 +R 17 +D 15 +U 16 +R 7 +D 4 +U 4 +L 7 +D 16 +R 11 +D 2 +U 2 +L 7 +U 15 +L 5 +U 14 +L 7 +U 15 +D 9 +L 14 +D 13 +U 11 +R 10 +U 15 +L 5 +U 16 +D 13 +U 15 +L 18 +R 1 +D 17 +U 18 +R 19 +L 4 +R 15 +U 12 +D 19 +R 5 +D 18 +L 14 +U 5 +L 4 +R 6 +U 15 +L 7 +R 11 +L 15 +U 12 +D 3 +R 14 +U 1 +L 4 +R 3 +U 15 +L 15 +R 6 +L 3 +U 2 +D 6 +L 6 +D 16 +L 19 +U 9 +L 2 +R 13 +U 8 +R 17 +D 17 +L 4 +R 2 +L 7 +R 11 +D 5 +L 14 +D 7 +R 13 +D 2 +L 18 +U 11 +R 2 +D 18 +U 2 +D 6 +L 4 +U 2 +L 15 +R 4 +D 8 +R 1 +U 16 +L 4 +R 5 +U 16 +D 14 +U 2 +D 19 +L 6 +D 14 +U 17 +L 3 +R 11 +L 2 +R 11 +U 11 +D 4 +U 13 +L 6 +U 14 +D 17 +U 15 +D 7 +R 8 +U 3 +R 15 +D 17 +U 16 +R 3 +D 17 +L 9 +U 15 +R 15 +L 11 +R 18 +D 16 +R 17 +D 3 +L 17 +D 4 +L 10 +U 2 +R 2 +D 9 +L 17 +R 19