From df57aacd4c125c2d505f9ca7d01d02767bf50f3a Mon Sep 17 00:00:00 2001 From: Dendy Date: Sun, 11 Dec 2022 12:14:05 +0100 Subject: [PATCH] Day 9 --- 09/1.zig | 79 +++ 09/input | 2000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2079 insertions(+) create mode 100644 09/1.zig create mode 100644 09/input diff --git a/09/1.zig b/09/1.zig new file mode 100644 index 0000000..c451585 --- /dev/null +++ b/09/1.zig @@ -0,0 +1,79 @@ +const std = @import("std"); + +const v2d = [2]i32; + +pub fn main() void { + const input = @embedFile("input"); + std.debug.print("Part 1: {}\n", .{nVisitedSnake(input, 2)}); + std.debug.print("Part 2: {}\n", .{nVisitedSnake(input, 10)}); +} + +pub fn nVisitedSnake(input: []const u8, comptime len: usize) usize { + if (len < 2) @compileError("The length has to be greater than 1."); + + var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); + defer arena.deinit(); + const allocator = arena.allocator(); + + var knots = [_]v2d{v2d{ 0, 0 }} ** len; + var visited = std.ArrayList(v2d).init(allocator); + + var iter = std.mem.split(u8, input, "\n"); + while (iter.next()) |line| { + + // Line not valid + if (line.len < 2) continue; + + // Get the number, continue on error + const num = std.fmt.parseInt(usize, line[2..], 10) catch continue; + + // Direction of said movement + const dir: v2d = switch (line[0]) { + 'U' => .{ 0, 1 }, + 'D' => .{ 0, -1 }, + 'R' => .{ 1, 0 }, + 'L' => .{ -1, 0 }, + else => unreachable, + }; + + // Move the head one step at a time + var step: usize = 0; + while (step < num) : (step += 1) { + // Move the head + knots[0][0] += dir[0]; + knots[0][1] += dir[1]; + + // Go through each pair of "head/tail" knots + var tailIdx: usize = 1; + while (tailIdx < knots.len) : (tailIdx += 1) { + const head = &knots[tailIdx - 1]; + const tail = &knots[tailIdx]; + + var axis: u8 = 0; + while (axis < 2) : (axis += 1) { + const diff = head[axis] - tail[axis]; + const dist = std.math.absInt(diff) catch unreachable; + if (dist >= 2) { + // Move it to where the head is -1 + tail[axis] = head[axis] - @divTrunc(dist, diff); + + // If one axis is at a +2 distance, snap the other one + const otherAxis = (axis + 1) % 2; + tail[otherAxis] = head[otherAxis]; + break; + } + } + } + + // Register the poisition again if it hasn't been saved before + const tail = knots[knots.len - 1]; + for (visited.items) |coord| { + if (coord[0] == tail[0] and coord[1] == tail[1]) break; + } else { + visited.append(tail) catch unreachable; + } + } + } + + return visited.items.len; +} diff --git a/09/input b/09/input new file mode 100644 index 0000000..db7d58e --- /dev/null +++ b/09/input @@ -0,0 +1,2000 @@ +D 2 +U 2 +L 2 +R 1 +L 1 +U 1 +L 2 +D 1 +L 2 +D 1 +L 2 +D 2 +L 1 +R 2 +U 1 +R 1 +U 2 +R 1 +U 2 +D 1 +L 2 +U 1 +D 1 +L 1 +D 1 +U 1 +R 2 +D 2 +L 1 +R 1 +L 2 +D 1 +R 2 +D 1 +U 2 +D 2 +R 2 +L 2 +U 2 +R 2 +L 1 +D 1 +R 1 +U 1 +R 2 +L 1 +D 1 +R 1 +L 2 +D 2 +U 1 +L 1 +R 1 +U 1 +L 2 +D 2 +L 2 +U 1 +L 2 +R 1 +L 1 +R 1 +D 1 +R 2 +D 1 +R 1 +D 1 +U 1 +L 1 +R 1 +L 1 +R 1 +D 2 +L 1 +D 2 +R 1 +D 1 +U 2 +R 2 +U 2 +L 1 +U 1 +R 1 +L 2 +D 2 +R 1 +U 1 +L 1 +U 2 +L 1 +D 2 +R 1 +U 1 +R 1 +U 2 +R 1 +U 2 +L 1 +R 1 +U 2 +R 2 +U 1 +L 2 +R 1 +L 2 +U 2 +L 2 +U 2 +R 2 +D 1 +U 2 +L 2 +D 3 +U 1 +L 1 +R 1 +D 3 +U 1 +L 3 +R 1 +U 1 +R 3 +D 2 +U 1 +R 2 +L 2 +U 1 +D 1 +U 1 +D 1 +L 2 +U 2 +R 3 +D 2 +L 2 +D 2 +U 3 +D 3 +U 2 +L 1 +U 2 +R 3 +D 2 +R 2 +D 1 +U 3 +L 3 +D 1 +U 3 +R 3 +D 1 +L 1 +D 3 +U 3 +D 1 +U 2 +R 1 +D 2 +U 3 +D 1 +R 2 +D 3 +L 3 +R 1 +D 3 +L 2 +D 3 +U 3 +R 1 +U 3 +L 2 +U 2 +L 2 +D 3 +L 3 +U 2 +R 2 +L 3 +R 2 +U 3 +R 3 +L 1 +U 3 +D 3 +L 2 +D 2 +U 2 +D 3 +L 3 +D 2 +L 1 +U 3 +D 2 +R 3 +L 3 +R 1 +U 1 +D 1 +R 2 +L 3 +U 2 +D 1 +R 3 +L 1 +R 1 +L 2 +R 1 +U 3 +R 2 +U 1 +L 1 +R 3 +D 3 +U 2 +R 2 +D 1 +R 3 +D 2 +L 3 +R 1 +U 3 +R 2 +U 4 +L 2 +D 1 +U 1 +R 4 +U 2 +R 2 +U 3 +R 1 +L 3 +U 3 +R 3 +U 4 +R 4 +D 1 +U 2 +R 1 +L 1 +R 2 +U 4 +L 1 +U 2 +L 1 +R 3 +L 2 +D 4 +R 4 +D 3 +R 4 +U 1 +D 4 +R 2 +D 1 +R 4 +U 3 +R 4 +L 1 +U 4 +D 2 +L 1 +D 3 +L 1 +R 2 +L 2 +D 4 +U 3 +D 1 +L 3 +D 3 +U 3 +L 4 +R 3 +U 1 +R 2 +D 1 +U 4 +D 4 +R 4 +U 2 +R 4 +L 4 +D 2 +L 4 +D 2 +U 3 +D 2 +U 4 +R 1 +U 1 +L 1 +U 1 +L 1 +D 3 +U 4 +L 3 +U 1 +L 4 +R 4 +L 3 +R 2 +U 2 +L 3 +D 2 +U 1 +D 1 +U 4 +R 2 +L 2 +D 1 +L 4 +D 3 +U 3 +L 2 +U 4 +R 4 +L 2 +R 3 +L 1 +D 4 +U 1 +L 2 +D 4 +L 2 +D 3 +U 4 +R 4 +U 2 +R 2 +U 4 +D 3 +U 3 +L 4 +D 2 +R 1 +U 4 +R 1 +U 1 +D 3 +U 1 +L 5 +U 5 +R 2 +D 3 +U 5 +D 5 +U 1 +D 2 +L 2 +U 5 +L 1 +R 5 +L 1 +D 5 +L 4 +D 4 +R 4 +L 1 +R 1 +U 1 +R 4 +U 2 +R 5 +L 4 +R 3 +U 4 +R 2 +U 4 +L 4 +U 3 +L 3 +U 1 +L 4 +R 1 +U 3 +R 3 +L 5 +U 5 +L 4 +D 1 +L 2 +U 1 +D 2 +L 1 +U 5 +D 4 +U 1 +R 2 +D 2 +U 5 +R 5 +U 1 +L 3 +U 5 +L 4 +R 3 +U 4 +L 2 +R 4 +D 2 +L 2 +R 4 +U 2 +D 4 +R 3 +D 4 +U 1 +L 3 +R 4 +L 3 +U 1 +R 2 +U 3 +L 3 +D 2 +U 4 +R 1 +L 3 +D 4 +L 1 +R 1 +D 5 +R 1 +U 2 +D 1 +U 4 +L 2 +U 2 +R 4 +U 3 +R 3 +D 2 +R 5 +D 2 +U 5 +D 5 +U 2 +D 1 +R 5 +U 3 +L 3 +U 1 +R 5 +L 4 +D 6 +L 1 +U 2 +D 4 +U 6 +D 6 +R 1 +U 3 +L 5 +R 5 +U 2 +R 2 +L 5 +D 4 +L 3 +R 1 +U 4 +D 3 +L 2 +D 5 +L 3 +R 3 +D 2 +L 1 +U 5 +L 5 +D 6 +U 3 +R 5 +L 5 +U 2 +L 3 +U 5 +D 6 +R 4 +L 5 +U 6 +L 2 +R 1 +L 1 +U 5 +D 3 +U 2 +R 1 +U 2 +R 2 +D 5 +R 1 +D 5 +R 5 +U 2 +L 3 +R 1 +U 5 +D 5 +R 2 +L 5 +D 6 +L 1 +U 1 +D 6 +U 4 +D 5 +L 5 +D 3 +L 4 +D 1 +L 4 +D 6 +R 5 +D 6 +U 6 +D 2 +L 3 +D 3 +R 5 +U 6 +D 2 +U 4 +L 1 +U 6 +L 2 +U 4 +D 6 +R 1 +D 1 +U 2 +L 3 +D 3 +R 2 +L 6 +U 3 +D 5 +U 3 +L 4 +U 5 +L 5 +U 6 +L 3 +R 1 +U 3 +R 1 +U 4 +L 4 +D 5 +L 6 +R 1 +L 3 +D 4 +L 3 +R 1 +L 4 +R 3 +D 3 +L 1 +U 4 +D 2 +U 5 +L 3 +D 6 +U 2 +R 3 +D 5 +L 1 +D 1 +L 3 +U 2 +R 3 +L 3 +U 7 +R 2 +D 1 +L 3 +R 4 +D 2 +R 5 +L 1 +D 5 +L 2 +R 2 +U 7 +L 7 +D 2 +L 7 +D 5 +U 2 +L 2 +U 2 +D 4 +U 1 +D 4 +L 1 +D 2 +R 5 +D 3 +L 2 +U 4 +R 7 +D 4 +R 3 +U 2 +R 4 +L 1 +U 4 +L 4 +U 7 +R 1 +L 6 +D 5 +R 5 +L 1 +R 4 +L 1 +U 3 +L 7 +R 7 +D 4 +L 3 +R 3 +D 1 +U 7 +R 3 +D 2 +U 4 +D 2 +R 3 +D 1 +R 3 +D 3 +U 1 +R 6 +L 2 +D 2 +U 4 +D 5 +L 7 +R 1 +L 7 +U 6 +D 2 +R 3 +D 5 +U 1 +L 7 +D 6 +U 3 +D 6 +L 1 +R 2 +L 6 +D 7 +R 5 +U 1 +L 7 +U 2 +D 2 +L 5 +R 7 +D 4 +U 3 +R 7 +L 4 +U 8 +D 8 +R 2 +U 2 +R 7 +U 1 +D 7 +R 1 +L 7 +R 7 +L 8 +D 3 +R 5 +L 4 +D 3 +L 6 +R 6 +D 6 +L 3 +D 5 +R 1 +U 5 +D 7 +R 8 +U 3 +D 5 +U 8 +L 8 +R 6 +D 8 +U 5 +R 1 +D 1 +R 5 +U 2 +R 8 +D 7 +L 3 +D 3 +U 7 +D 3 +U 7 +R 7 +L 4 +D 7 +U 2 +L 3 +U 7 +L 1 +D 3 +L 1 +R 4 +D 8 +L 5 +U 5 +D 3 +L 5 +D 6 +L 1 +R 5 +U 4 +R 4 +D 1 +R 6 +L 1 +D 7 +R 4 +L 2 +R 3 +U 4 +L 8 +D 1 +R 6 +L 6 +R 8 +D 8 +U 4 +R 1 +D 2 +R 5 +D 1 +U 8 +L 5 +D 5 +U 5 +R 8 +L 6 +R 4 +U 1 +R 5 +U 8 +D 1 +U 1 +D 5 +L 7 +R 6 +L 3 +R 1 +U 2 +L 6 +R 5 +D 4 +R 6 +D 4 +R 2 +L 7 +R 8 +L 6 +D 2 +L 8 +U 4 +R 4 +U 3 +D 8 +U 8 +L 8 +D 5 +R 2 +D 5 +U 7 +L 9 +R 8 +U 9 +R 9 +U 6 +L 6 +D 1 +U 3 +L 1 +D 7 +R 6 +L 6 +D 7 +U 1 +R 9 +D 7 +U 8 +R 6 +U 1 +D 5 +U 5 +D 1 +L 1 +D 9 +U 1 +R 6 +U 9 +R 6 +U 6 +D 7 +R 1 +L 1 +D 8 +L 3 +D 7 +U 8 +L 7 +D 2 +U 6 +D 4 +L 8 +U 3 +D 1 +U 6 +D 3 +R 8 +L 9 +R 3 +L 6 +U 9 +D 9 +L 3 +U 1 +D 2 +R 4 +L 5 +R 2 +U 3 +D 5 +R 5 +L 4 +U 3 +L 7 +U 5 +D 9 +U 6 +R 5 +D 3 +U 8 +L 6 +D 5 +R 9 +U 8 +L 5 +D 1 +R 8 +L 4 +R 2 +L 3 +R 9 +D 9 +R 7 +D 5 +R 6 +U 2 +D 4 +L 8 +D 2 +L 1 +D 2 +U 3 +L 2 +R 3 +D 9 +U 3 +R 4 +D 1 +L 8 +R 3 +U 4 +L 4 +R 3 +L 5 +D 4 +R 2 +D 4 +R 4 +U 4 +R 7 +L 6 +R 9 +D 1 +R 8 +L 5 +U 4 +D 10 +L 6 +D 3 +R 2 +U 1 +D 5 +R 2 +U 6 +L 9 +U 7 +L 10 +U 4 +L 8 +D 3 +U 7 +D 7 +U 9 +L 2 +R 6 +U 4 +R 9 +L 5 +U 3 +L 4 +R 1 +D 8 +U 10 +D 10 +R 3 +U 3 +D 2 +L 5 +U 3 +D 4 +U 1 +R 9 +L 3 +D 8 +L 5 +U 8 +R 3 +U 10 +L 10 +R 4 +D 5 +U 9 +R 8 +L 5 +U 9 +L 6 +U 10 +D 8 +U 2 +L 8 +D 7 +U 2 +D 5 +U 8 +L 2 +D 3 +U 8 +R 8 +D 10 +R 3 +L 3 +U 4 +R 3 +U 4 +L 6 +U 4 +R 3 +D 9 +L 9 +U 5 +D 1 +R 3 +D 2 +L 9 +U 9 +R 9 +U 6 +R 7 +L 8 +U 2 +L 4 +D 10 +L 4 +D 9 +L 9 +R 10 +L 3 +R 7 +U 2 +L 3 +R 1 +D 4 +L 2 +R 10 +D 5 +L 2 +D 2 +L 4 +U 6 +D 9 +R 6 +U 9 +D 4 +L 6 +U 8 +D 1 +R 1 +L 10 +U 4 +R 6 +U 11 +R 8 +U 1 +D 5 +R 7 +D 8 +L 5 +R 6 +U 5 +R 1 +U 7 +L 4 +D 6 +U 8 +R 10 +D 1 +L 8 +R 3 +U 7 +R 2 +U 9 +D 9 +R 9 +L 3 +R 4 +U 10 +L 7 +R 1 +L 5 +D 11 +R 4 +U 10 +R 10 +L 3 +D 2 +L 4 +U 9 +L 1 +D 10 +L 7 +R 11 +D 5 +U 3 +D 10 +U 5 +L 2 +R 9 +D 10 +U 1 +R 10 +U 1 +L 11 +R 10 +L 8 +D 10 +L 5 +R 2 +L 3 +U 4 +L 10 +R 3 +D 5 +R 8 +L 2 +U 1 +D 7 +U 7 +L 1 +U 11 +D 2 +L 2 +D 11 +L 6 +R 9 +U 10 +R 7 +L 11 +R 7 +D 1 +R 3 +U 6 +R 7 +D 8 +U 3 +L 1 +D 11 +U 7 +R 1 +L 7 +R 2 +L 7 +D 3 +U 10 +D 9 +U 10 +R 5 +D 4 +U 7 +L 11 +U 1 +L 12 +R 10 +U 7 +R 3 +L 2 +U 11 +R 6 +U 8 +D 2 +R 2 +L 8 +U 7 +D 10 +U 3 +D 1 +U 8 +R 2 +D 9 +L 8 +R 10 +L 1 +U 8 +R 11 +U 8 +R 12 +D 10 +L 5 +U 6 +L 11 +D 12 +L 5 +U 4 +L 8 +U 11 +D 2 +U 4 +L 6 +R 1 +L 4 +U 2 +L 5 +R 2 +D 7 +L 12 +R 4 +L 1 +D 7 +L 11 +U 3 +D 9 +R 12 +U 10 +D 9 +U 10 +L 6 +R 6 +D 10 +R 10 +D 5 +U 9 +R 2 +D 4 +L 9 +U 2 +R 5 +L 8 +R 1 +D 9 +L 7 +D 11 +R 3 +L 8 +U 3 +D 7 +U 3 +R 8 +U 7 +L 1 +U 10 +D 8 +R 11 +U 10 +D 11 +U 8 +R 12 +U 9 +D 12 +U 4 +D 11 +R 8 +D 1 +L 4 +R 9 +L 7 +U 8 +R 6 +D 5 +R 8 +D 2 +R 6 +L 4 +D 7 +L 3 +U 11 +R 2 +L 10 +D 13 +R 2 +D 10 +U 9 +D 5 +U 5 +D 5 +L 11 +U 3 +R 5 +U 7 +L 6 +D 4 +L 3 +R 2 +D 9 +U 7 +D 9 +U 1 +D 8 +L 11 +D 7 +U 7 +R 3 +L 6 +D 6 +R 5 +L 6 +R 3 +U 10 +L 13 +U 9 +R 11 +L 13 +R 9 +D 3 +U 3 +L 12 +U 4 +L 3 +D 12 +R 13 +D 7 +U 6 +L 11 +U 4 +L 2 +D 7 +L 8 +R 10 +U 13 +R 9 +U 8 +R 11 +U 8 +R 7 +U 11 +L 8 +D 3 +L 4 +U 6 +D 12 +R 13 +U 10 +L 4 +R 12 +U 13 +L 11 +R 10 +L 8 +U 6 +L 1 +D 11 +U 12 +L 8 +U 2 +L 6 +U 2 +L 1 +U 3 +D 5 +U 2 +D 10 +U 11 +L 9 +D 9 +R 7 +L 3 +U 3 +D 2 +U 2 +R 10 +D 1 +R 5 +L 1 +D 3 +R 8 +U 4 +R 1 +D 13 +L 12 +U 1 +D 13 +R 4 +D 3 +R 8 +D 2 +U 3 +D 8 +L 3 +U 9 +R 4 +D 8 +U 9 +D 3 +L 8 +D 11 +L 8 +U 1 +D 13 +U 14 +D 10 +U 9 +R 4 +D 14 +L 10 +D 10 +U 6 +D 7 +R 8 +U 5 +L 8 +R 9 +D 12 +L 9 +D 8 +R 13 +L 7 +U 11 +R 8 +D 5 +U 14 +D 5 +U 9 +L 7 +D 12 +R 2 +L 14 +U 1 +R 9 +U 10 +R 4 +U 4 +R 14 +D 10 +L 3 +R 4 +L 13 +U 3 +R 6 +L 2 +U 6 +R 2 +D 10 +U 4 +L 10 +U 8 +L 6 +D 2 +R 1 +D 5 +U 14 +L 4 +D 5 +L 5 +U 10 +D 5 +R 13 +D 14 +U 14 +R 4 +D 13 +U 10 +R 13 +D 12 +R 10 +L 12 +U 8 +D 10 +U 12 +D 5 +L 11 +D 13 +R 8 +D 10 +R 13 +L 13 +D 1 +U 10 +L 4 +U 14 +D 12 +U 4 +D 5 +R 10 +L 8 +R 13 +D 13 +U 5 +D 4 +L 1 +D 9 +L 14 +U 14 +R 3 +U 6 +R 14 +L 4 +R 7 +D 3 +R 8 +D 5 +L 2 +U 5 +D 8 +U 3 +R 7 +D 13 +U 14 +R 11 +U 6 +L 15 +R 4 +U 12 +R 1 +L 8 +U 15 +R 5 +L 2 +D 1 +R 12 +D 1 +R 12 +D 1 +L 1 +R 9 +U 11 +D 2 +U 12 +D 3 +U 6 +D 12 +U 11 +R 6 +D 11 +L 5 +R 3 +D 1 +U 7 +L 10 +D 4 +L 7 +R 2 +U 8 +D 11 +L 12 +R 6 +L 7 +D 13 +U 11 +R 5 +D 1 +L 11 +D 2 +U 15 +L 11 +R 3 +L 9 +D 12 +U 8 +D 9 +L 14 +D 10 +L 12 +R 13 +D 3 +L 9 +D 13 +R 8 +D 15 +U 14 +R 9 +U 12 +R 2 +D 3 +U 5 +L 3 +R 7 +U 15 +R 10 +L 6 +R 6 +D 12 +R 14 +L 7 +U 8 +L 11 +R 13 +U 8 +L 8 +R 5 +D 3 +U 8 +D 4 +L 1 +D 11 +U 15 +L 14 +R 8 +L 1 +R 13 +L 2 +R 13 +U 9 +D 12 +L 14 +R 13 +L 5 +R 7 +D 13 +U 15 +R 2 +L 12 +D 12 +R 13 +U 2 +D 4 +R 14 +L 1 +U 12 +D 3 +U 6 +R 6 +L 6 +U 9 +L 16 +U 16 +D 8 +R 8 +U 1 +D 14 +R 13 +D 3 +U 14 +R 7 +U 7 +R 7 +D 12 +U 1 +D 2 +U 2 +R 7 +D 11 +U 4 +R 13 +U 2 +L 16 +U 12 +L 15 +D 10 +U 11 +L 1 +D 1 +L 3 +D 15 +L 12 +R 2 +D 12 +U 16 +R 16 +U 11 +D 15 +R 11 +U 13 +L 3 +R 15 +D 16 +R 9 +D 1 +L 3 +U 9 +D 12 +U 11 +L 13 +R 10 +D 4 +U 12 +L 2 +R 8 +L 1 +U 9 +L 1 +D 7 +R 14 +U 12 +L 9 +R 5 +D 7 +R 10 +D 14 +L 2 +U 2 +L 4 +D 15 +U 7 +D 9 +L 4 +R 1 +L 8 +D 14 +U 9 +D 1 +R 15 +U 9 +R 10 +D 11 +L 14 +R 12 +L 12 +U 13 +R 12 +L 1 +R 10 +D 14 +R 3 +U 5 +D 10 +L 13 +U 11 +R 16 +L 14 +U 6 +D 5 +R 16 +D 7 +L 16 +U 12 +R 14 +U 7 +R 6 +U 17 +R 3 +U 15 +R 17 +U 3 +R 4 +U 6 +D 13 +U 7 +R 12 +U 10 +R 7 +L 13 +U 16 +D 13 +U 2 +L 13 +R 2 +D 1 +U 10 +R 6 +D 11 +R 10 +D 6 +R 2 +L 1 +R 1 +L 5 +D 16 +U 1 +L 13 +U 3 +R 9 +L 10 +D 12 +R 9 +U 17 +R 10 +U 1 +D 13 +L 13 +R 6 +L 5 +D 5 +R 15 +D 15 +L 7 +U 11 +D 1 +U 11 +L 17 +R 5 +L 11 +R 15 +U 16 +D 2 +L 5 +D 9 +R 13 +D 14 +U 6 +L 10 +U 15 +D 15 +R 5 +D 4 +L 13 +R 11 +D 15 +U 13 +R 8 +U 6 +R 8 +U 3 +R 12 +U 11 +L 6 +U 9 +D 6 +L 1 +U 4 +L 6 +R 4 +D 2 +L 6 +U 11 +L 1 +U 10 +R 2 +U 6 +R 1 +U 7 +R 16 +L 12 +U 9 +D 9 +U 6 +R 13 +U 8 +L 6 +U 2 +R 17 +L 6 +U 5 +D 14 +R 15 +D 13 +L 5 +U 18 +R 9 +L 10 +R 9 +D 6 +L 8 +U 3 +D 8 +R 17 +L 4 +R 9 +L 13 +U 3 +R 12 +D 4 +R 11 +U 13 +L 15 +R 13 +D 18 +R 8 +L 7 +R 10 +D 11 +U 8 +R 4 +L 7 +U 15 +L 3 +D 15 +R 3 +U 6 +L 17 +D 17 +L 12 +D 16 +R 14 +L 1 +R 7 +D 15 +U 2 +L 5 +U 16 +D 7 +L 11 +U 1 +R 2 +D 4 +L 13 +U 17 +R 5 +D 17 +R 14 +L 1 +D 11 +U 11 +R 8 +U 12 +D 12 +U 17 +R 15 +L 4 +D 7 +U 8 +R 4 +L 14 +U 11 +L 3 +R 1 +L 14 +U 3 +L 3 +D 15 +L 14 +D 7 +R 2 +L 6 +U 6 +R 12 +U 17 +D 1 +R 15 +D 1 +U 14 +D 6 +U 4 +R 4 +L 3 +U 14 +L 1 +R 4 +U 13 +D 18 +L 11 +U 4 +D 9 +R 10 +U 17 +R 8 +D 12 +R 9 +L 5 +D 6 +L 9 +R 9 +L 17 +D 9 +R 2 +L 4 +R 8 +D 8 +R 8 +D 13 +R 12 +L 13 +U 8 +D 8 +L 16 +D 15 +U 11 +L 8 +R 7 +D 2 +R 6 +U 19 +D 4 +U 7 +L 17 +R 9 +U 18 +D 4 +R 19 +L 14 +U 8 +D 19 +L 12 +R 14 +U 13 +D 3 +L 8 +D 4 +R 9 +U 18 +D 1 +U 2 +L 16 +U 2 +D 12 +U 5 +L 4 +D 6 +U 14 +R 1 +L 7 +D 7 +L 19 +D 5 +U 16 +D 15 +R 14 +U 19 +D 19 +L 6 +R 3 +L 14 +R 16 +L 1 +U 4 +R 19 +U 2 +L 3 +D 19 +L 17 +U 13 +D 5 +L 10 +U 18 +R 13 +D 6 +L 17 +D 9 +R 10 +D 8 +R 19 +L 6 +D 7 +R 18 +U 8 +L 6 +U 18 +L 18 +D 16 +R 8 +L 10 +R 6 +D 1 +L 6 +U 8 +L 19 +D 18 +U 3 +D 17 +U 9 +R 13 +D 18 +R 2 +L 10 +D 17 +L 17 +U 8 +L 13 +D 5 +L 1 +U 10 +L 3 +R 3 +D 12 +U 11 +L 15 +D 15