diff --git a/deno.json b/deno.json index ae02b91..75abcd8 100644 --- a/deno.json +++ b/deno.json @@ -32,6 +32,7 @@ "Day05": "cd ./src/05_SupplyStacks && deno run --allow-read=./input.txt SupplyStacks.ts", "Day06": "cd ./src/06_TuningTrouble && deno run --allow-read=./input.txt TuningTrouble.ts", "Day07": "cd ./src/07_NoSpaceLeftOnDevice && deno run --allow-read=./input.txt NoSpaceLeftOnDevice.ts", - "Day08": "cd ./src/08_TreetopTreeHouse && deno run --allow-read=./input.txt TreetopTreeHouse.ts" + "Day08": "cd ./src/08_TreetopTreeHouse && deno run --allow-read=./input.txt TreetopTreeHouse.ts", + "Day09": "cd ./src/09_RopeBridge && deno run --allow-read=./input.txt RopeBridge.ts" } } diff --git a/src/09_RopeBridge/RopeBridge.ts b/src/09_RopeBridge/RopeBridge.ts new file mode 100644 index 0000000..5717f2f --- /dev/null +++ b/src/09_RopeBridge/RopeBridge.ts @@ -0,0 +1,116 @@ +const input = Deno.readTextFileSync('./input.txt').trimEnd().split('\n'); + +type Position = { + x: number; + y: number; +}; + +type Instruction = { + direction: 'U' | 'D' | 'L' | 'R'; + amount: number; +}; + +function encode(position: Position): string { + return `${position.x},${position.y}`; +} + +function makeRope(length = 2): Position[] { + const rope: Position[] = []; + for (let i = 0; i < Math.max(length, 1); i++) { + rope.push({ + x: 0, + y: 0, + }); + } + return rope; +} + +function moveRope(instructions: Instruction[], rope: Position[], visitedPositions: Set) { + for (const instruction of instructions) { + for (let count = 0; count < instruction.amount; count++) { + if (instruction.direction === 'U') { + rope[0].y++; + } else if (instruction.direction === 'D') { + rope[0].y--; + } else if (instruction.direction === 'L') { + rope[0].x--; + } else rope[0].x++; + + for (let i = 1; i < rope.length; i++) { + const head = rope[i - 1]; + const tail = rope[i]; + if (Math.abs(head.x - tail.x) > 1) { + if (head.y !== tail.y) { + (head.y > tail.y) ? tail.y++ : tail.y--; + } + if (head.x > tail.x) { + tail.x++; + } else tail.x--; + } else if (Math.abs(head.y - tail.y) > 1) { + if (head.x !== tail.x) { + (head.x > tail.x) ? tail.x++ : tail.x--; + } + if (head.y > tail.y) { + tail.y++; + } else tail.y--; + } + } + visitedPositions.add(encode(rope.at(-1)!)); + } + } +} + +export function printMap(rope: Position[], padding = 5) { + if (rope.length < 1) { + console.log('Empty Rope'); + return; + } + + const coords: [number[], number[]] = [[], []]; + rope.forEach((knot) => { + coords[0].push(knot.x); + coords[1].push(knot.y); + }); + const bounds = { + minX: Math.min(...coords[0]) - padding, + maxX: Math.max(...coords[0]) + padding + 1, + minY: Math.min(...coords[1]) - padding, + maxY: Math.max(...coords[1]) + padding + 1, + }; + const width = bounds.maxX - bounds.minX; + const height = bounds.maxY - bounds.minY; + + const map: Array = []; + for (let row = 0; row < height; row++) { + map.push([...''.padStart(width, '.')]); + } + + for (let index = rope.length - 1; index >= 0; index--) { + const knot = rope[index]!; + const posX = knot.x - bounds.minX; + const posY = knot.y - bounds.minY; + map[posY][posX] = (index % 10).toString(); + } + map.reverse(); + map.forEach((row) => { + console.log(row.join('')); + }); + console.log(); +} + +const instructions = input.map((line) => { + const [left, right] = line.split(' ') as [string, string]; + return { + direction: left, + amount: parseInt(right), + } as Instruction; +}); + +// Part One +const visitedPositions: Set = new Set(); +moveRope(instructions, makeRope(), visitedPositions); +console.log('Solution Part 1:', visitedPositions.size); + +visitedPositions.clear(); +moveRope(instructions, makeRope(10), visitedPositions); +console.log('Solution Part 2:', visitedPositions.size); diff --git a/src/09_RopeBridge/input.txt b/src/09_RopeBridge/input.txt new file mode 100644 index 0000000..cbc7b08 --- /dev/null +++ b/src/09_RopeBridge/input.txt @@ -0,0 +1,2000 @@ +U 1 +L 1 +D 2 +U 2 +R 2 +D 1 +L 1 +D 2 +R 2 +D 2 +U 1 +L 1 +D 2 +U 1 +D 2 +L 2 +R 1 +U 1 +L 1 +R 1 +U 1 +R 2 +L 1 +D 2 +U 1 +R 1 +L 2 +R 2 +L 2 +R 2 +L 2 +U 1 +L 2 +U 1 +D 2 +L 2 +R 2 +D 2 +L 2 +U 2 +L 1 +U 1 +D 2 +L 1 +D 1 +R 1 +U 1 +L 2 +D 2 +U 2 +L 1 +D 1 +R 2 +D 1 +R 2 +D 1 +R 2 +U 2 +R 2 +L 2 +R 1 +D 1 +U 1 +R 2 +D 1 +U 1 +R 2 +L 2 +U 2 +R 2 +U 1 +D 1 +R 2 +L 1 +U 1 +L 2 +D 1 +R 1 +U 2 +L 1 +D 2 +L 1 +R 2 +D 2 +L 2 +R 2 +U 2 +R 2 +D 2 +L 1 +R 2 +U 1 +R 2 +U 1 +L 1 +R 1 +L 2 +U 2 +L 1 +D 2 +L 2 +U 2 +D 2 +R 2 +D 2 +R 1 +U 2 +L 1 +U 1 +L 2 +R 1 +D 1 +R 1 +L 1 +D 2 +L 2 +R 2 +D 3 +R 2 +D 2 +L 3 +R 1 +L 2 +U 3 +D 1 +U 1 +L 2 +D 2 +L 2 +R 2 +L 1 +U 2 +D 2 +U 2 +D 1 +L 1 +D 1 +R 2 +D 3 +U 3 +D 3 +L 2 +R 2 +U 1 +L 3 +R 2 +U 2 +D 2 +L 3 +D 2 +R 3 +D 3 +U 2 +R 2 +D 2 +U 1 +L 3 +R 3 +U 3 +L 3 +D 3 +L 3 +D 2 +L 1 +R 2 +L 1 +R 2 +D 1 +L 3 +R 2 +D 3 +L 1 +R 1 +L 2 +U 1 +L 2 +R 2 +U 2 +L 1 +D 1 +R 3 +L 1 +R 2 +U 2 +D 1 +R 2 +U 1 +R 3 +U 1 +D 3 +R 3 +L 1 +D 1 +U 1 +D 3 +R 2 +U 1 +R 1 +U 1 +L 3 +D 2 +U 3 +R 2 +D 1 +R 1 +U 2 +L 1 +U 1 +R 3 +U 2 +D 1 +R 2 +U 3 +D 2 +U 1 +R 2 +L 2 +U 3 +L 1 +R 1 +L 2 +D 2 +U 1 +D 2 +R 3 +D 3 +U 4 +R 3 +D 2 +U 4 +L 4 +U 3 +L 1 +U 2 +L 2 +R 3 +U 4 +D 1 +L 1 +D 2 +L 2 +R 1 +L 2 +U 1 +L 3 +D 1 +L 2 +D 3 +R 3 +D 4 +L 2 +U 4 +L 3 +R 4 +D 4 +R 2 +D 2 +L 2 +R 2 +U 4 +L 3 +D 1 +R 1 +L 2 +D 1 +U 1 +L 2 +U 1 +L 1 +U 2 +D 4 +L 4 +U 2 +R 2 +L 2 +R 3 +U 2 +D 3 +U 4 +D 3 +R 2 +L 4 +U 2 +R 2 +U 3 +D 4 +R 4 +L 2 +R 4 +D 4 +U 3 +L 3 +D 4 +L 4 +R 2 +L 1 +R 3 +D 2 +U 4 +R 3 +U 1 +R 2 +U 1 +D 1 +R 1 +L 4 +U 4 +R 1 +D 4 +L 3 +U 1 +D 2 +R 2 +L 2 +D 2 +U 4 +R 3 +L 4 +D 1 +R 1 +U 3 +R 4 +L 2 +R 2 +U 3 +L 4 +R 1 +L 3 +D 3 +R 2 +D 2 +L 2 +D 2 +U 4 +D 5 +L 4 +U 2 +D 3 +L 1 +U 4 +R 5 +D 5 +U 4 +R 5 +L 2 +D 4 +R 2 +L 2 +R 1 +U 1 +D 5 +U 1 +D 2 +R 5 +L 4 +D 4 +R 2 +L 3 +R 3 +L 1 +U 4 +R 2 +L 4 +U 5 +R 5 +D 3 +U 4 +L 2 +U 5 +R 3 +U 5 +L 4 +R 2 +U 2 +R 3 +L 5 +D 2 +R 5 +L 2 +R 5 +D 4 +U 4 +L 5 +U 1 +D 4 +U 5 +L 5 +D 2 +L 2 +D 4 +L 2 +D 2 +R 4 +U 4 +D 2 +L 1 +D 3 +U 3 +R 2 +D 2 +L 5 +D 3 +R 2 +L 2 +U 3 +D 5 +R 1 +L 4 +D 1 +L 5 +R 3 +L 3 +D 3 +L 2 +U 5 +L 5 +R 4 +D 5 +U 2 +R 2 +L 3 +U 1 +D 1 +U 2 +R 3 +U 2 +L 4 +U 4 +L 3 +U 3 +D 3 +R 2 +L 5 +R 5 +U 2 +D 2 +U 4 +D 3 +U 1 +L 1 +D 4 +R 3 +L 1 +D 5 +R 3 +U 1 +L 6 +U 5 +D 4 +R 4 +L 5 +U 2 +D 6 +L 4 +R 2 +U 4 +L 2 +R 1 +U 6 +D 6 +R 1 +L 2 +U 4 +L 2 +D 6 +L 6 +R 3 +L 3 +D 5 +U 6 +D 5 +U 5 +L 6 +R 6 +U 3 +R 6 +U 2 +D 1 +U 3 +R 6 +D 5 +L 3 +R 1 +D 6 +R 3 +D 2 +U 2 +D 3 +L 6 +U 3 +L 3 +U 1 +R 6 +U 2 +D 3 +R 1 +U 3 +R 6 +L 2 +R 4 +L 1 +R 5 +L 1 +R 4 +U 6 +D 3 +U 2 +L 4 +R 1 +L 2 +R 4 +U 5 +R 1 +L 2 +U 1 +R 2 +U 6 +R 1 +D 2 +L 1 +U 2 +D 2 +L 1 +U 1 +R 4 +D 5 +L 4 +D 6 +L 2 +U 3 +D 3 +L 1 +R 3 +D 1 +L 6 +D 1 +U 6 +L 1 +D 6 +U 3 +R 5 +L 2 +R 4 +D 5 +L 4 +D 6 +U 1 +D 6 +L 6 +U 3 +D 3 +U 2 +L 1 +R 5 +U 5 +L 6 +U 5 +R 5 +D 4 +U 7 +R 7 +L 2 +D 3 +R 3 +L 1 +D 6 +R 3 +L 2 +U 2 +D 2 +U 2 +L 7 +R 4 +U 3 +L 3 +R 2 +L 5 +U 3 +R 6 +U 5 +L 7 +U 7 +L 4 +U 5 +L 7 +D 1 +L 1 +D 2 +U 3 +R 5 +D 1 +R 6 +L 3 +U 5 +D 6 +L 4 +D 3 +U 3 +R 3 +U 1 +R 2 +L 7 +D 7 +R 4 +L 6 +D 7 +L 7 +D 2 +U 1 +R 2 +U 3 +L 2 +D 2 +L 5 +D 4 +R 5 +D 7 +U 5 +D 1 +L 4 +U 2 +R 5 +D 6 +L 4 +R 7 +U 6 +D 2 +L 4 +D 4 +L 1 +R 4 +L 1 +R 5 +U 5 +R 5 +L 1 +D 2 +R 1 +U 5 +L 4 +D 2 +U 3 +L 2 +R 5 +U 4 +L 1 +R 5 +L 1 +D 5 +R 7 +L 5 +U 5 +L 7 +U 3 +D 6 +U 2 +L 2 +R 5 +U 7 +D 1 +R 2 +U 4 +R 7 +U 6 +L 3 +U 5 +D 3 +U 5 +D 6 +R 2 +U 8 +R 7 +L 5 +U 1 +D 3 +L 3 +U 6 +L 6 +U 5 +D 7 +U 3 +L 6 +U 1 +D 3 +R 5 +L 2 +R 1 +D 6 +R 2 +L 1 +R 5 +D 3 +L 1 +R 3 +L 6 +D 5 +U 5 +L 5 +D 3 +L 4 +R 7 +D 6 +L 8 +R 6 +U 8 +D 6 +R 3 +U 4 +R 1 +U 6 +R 3 +L 6 +D 2 +U 5 +R 2 +D 5 +U 7 +D 2 +U 2 +R 3 +L 3 +U 4 +R 3 +U 7 +L 2 +D 3 +R 2 +D 4 +L 4 +D 8 +R 2 +U 2 +L 7 +R 8 +U 8 +L 4 +U 3 +R 3 +U 8 +D 2 +U 5 +D 8 +R 8 +L 8 +R 4 +D 8 +L 7 +U 6 +L 4 +D 6 +U 2 +L 4 +U 8 +R 8 +U 6 +D 1 +R 5 +U 5 +L 8 +U 2 +R 3 +U 7 +L 5 +U 5 +L 7 +D 8 +R 7 +U 4 +D 7 +U 4 +L 3 +R 3 +D 5 +U 1 +L 6 +D 3 +U 5 +D 3 +R 1 +U 2 +L 3 +R 8 +U 1 +D 6 +R 6 +U 9 +D 4 +U 4 +D 2 +L 1 +R 2 +L 6 +U 6 +L 1 +R 1 +U 9 +D 1 +R 4 +L 3 +D 8 +U 7 +D 1 +R 7 +L 6 +U 3 +R 2 +L 2 +D 6 +U 5 +D 6 +L 6 +U 8 +L 5 +R 4 +U 6 +L 1 +U 8 +L 4 +R 1 +D 7 +R 9 +U 2 +D 3 +R 6 +L 8 +U 6 +R 4 +D 1 +U 7 +R 1 +D 9 +L 8 +D 9 +R 1 +U 6 +R 7 +D 2 +U 7 +R 4 +D 9 +R 7 +D 2 +U 1 +R 3 +D 4 +L 5 +U 7 +R 7 +D 2 +U 8 +R 8 +L 4 +U 6 +L 3 +D 8 +L 8 +D 9 +R 7 +L 5 +U 5 +R 4 +U 9 +R 3 +U 9 +R 1 +U 2 +R 9 +U 8 +L 8 +U 7 +R 1 +D 9 +U 4 +L 7 +R 3 +U 5 +L 6 +D 1 +L 4 +D 4 +U 6 +R 7 +L 7 +U 3 +L 8 +D 8 +L 7 +U 3 +D 4 +R 8 +D 1 +R 8 +U 10 +L 1 +U 2 +D 4 +U 3 +R 8 +U 3 +D 5 +R 8 +D 10 +R 8 +D 4 +R 9 +D 1 +L 3 +U 7 +R 7 +L 1 +D 8 +R 6 +D 4 +U 5 +L 2 +U 3 +R 7 +U 10 +L 1 +U 7 +R 1 +U 7 +D 2 +L 10 +U 2 +L 4 +D 6 +R 10 +D 4 +U 7 +L 6 +R 4 +U 6 +D 1 +U 6 +D 5 +U 6 +L 4 +D 2 +L 2 +U 7 +R 2 +U 9 +L 9 +D 2 +U 9 +R 9 +U 9 +D 3 +R 5 +D 3 +L 10 +U 3 +D 10 +L 10 +D 1 +U 2 +D 3 +R 8 +L 1 +U 6 +L 2 +R 9 +U 3 +D 5 +L 8 +U 4 +R 8 +D 5 +L 6 +U 7 +D 8 +R 9 +U 9 +R 8 +D 4 +R 5 +U 6 +L 8 +R 2 +D 3 +L 8 +D 6 +R 7 +L 10 +U 9 +R 6 +L 7 +U 8 +R 5 +L 1 +D 1 +R 6 +D 1 +R 9 +L 1 +U 5 +R 3 +D 7 +U 8 +D 6 +L 6 +U 11 +D 8 +L 6 +D 6 +L 7 +R 10 +U 5 +D 7 +R 5 +D 3 +L 4 +R 3 +D 2 +L 6 +U 6 +D 3 +L 4 +D 9 +L 6 +U 9 +L 3 +U 10 +R 5 +U 8 +R 2 +D 3 +L 6 +R 2 +U 6 +R 8 +D 2 +U 2 +R 5 +U 9 +L 5 +D 8 +R 2 +U 1 +R 1 +D 6 +U 4 +R 7 +L 7 +D 7 +U 11 +R 6 +U 11 +D 11 +R 6 +L 2 +D 10 +R 6 +D 5 +R 7 +D 11 +R 2 +U 10 +L 6 +D 4 +R 1 +L 3 +D 9 +U 8 +L 6 +U 1 +L 7 +D 10 +U 1 +L 1 +D 2 +U 3 +L 4 +R 6 +U 11 +R 6 +U 3 +L 8 +D 3 +R 7 +L 3 +D 4 +L 5 +U 8 +L 11 +R 1 +U 1 +L 9 +D 5 +U 3 +R 1 +L 6 +U 1 +L 3 +D 1 +L 8 +U 1 +D 9 +R 7 +U 11 +R 10 +U 8 +R 5 +U 3 +L 7 +R 3 +L 4 +U 6 +D 3 +U 3 +R 3 +D 1 +L 7 +U 5 +D 1 +U 6 +L 8 +D 3 +R 6 +U 10 +R 6 +D 1 +U 7 +R 5 +L 6 +R 5 +D 3 +R 9 +U 11 +L 8 +R 9 +U 5 +R 5 +L 1 +U 7 +L 11 +U 5 +R 3 +U 7 +R 9 +L 11 +D 11 +L 3 +U 11 +L 2 +U 3 +R 5 +D 1 +L 10 +R 8 +L 11 +U 1 +D 11 +L 4 +R 8 +L 9 +D 6 +U 10 +L 1 +R 12 +U 2 +D 8 +L 8 +U 1 +L 12 +D 9 +R 3 +U 3 +D 10 +U 11 +D 9 +U 8 +L 7 +D 10 +L 3 +U 9 +D 5 +R 12 +D 3 +R 9 +L 8 +R 12 +U 11 +D 5 +R 10 +D 8 +L 12 +U 7 +L 1 +R 7 +D 1 +R 12 +L 3 +R 7 +L 1 +R 2 +D 4 +U 3 +L 8 +U 2 +R 8 +U 5 +L 5 +R 7 +L 7 +R 7 +U 8 +R 3 +D 4 +L 7 +U 5 +L 5 +U 1 +D 12 +R 11 +L 5 +D 10 +R 8 +U 12 +L 11 +U 2 +R 2 +D 1 +U 4 +D 1 +U 1 +R 11 +D 1 +L 8 +U 5 +L 11 +D 11 +R 12 +L 6 +R 8 +L 13 +U 7 +R 7 +D 1 +R 13 +D 6 +L 5 +R 10 +U 4 +R 11 +D 6 +U 1 +D 6 +R 1 +U 1 +L 12 +U 8 +R 4 +U 9 +R 12 +D 1 +R 8 +D 2 +U 5 +L 7 +U 12 +L 5 +D 10 +R 8 +D 6 +R 13 +D 7 +U 7 +L 9 +D 12 +U 5 +L 7 +D 4 +U 2 +R 13 +U 11 +L 3 +R 6 +D 5 +R 6 +L 11 +U 6 +D 5 +U 6 +L 2 +D 8 +R 4 +U 4 +L 12 +D 6 +U 8 +D 8 +L 5 +D 12 +R 8 +U 11 +D 8 +L 7 +U 13 +L 11 +R 6 +U 5 +D 9 +L 11 +U 10 +D 13 +R 5 +D 8 +R 7 +D 6 +R 7 +D 2 +L 13 +R 11 +U 1 +D 7 +U 13 +R 9 +U 12 +R 13 +L 2 +U 13 +D 2 +U 6 +L 6 +D 5 +R 5 +L 2 +U 1 +R 4 +U 6 +L 10 +R 12 +L 3 +D 3 +L 8 +D 10 +U 2 +L 11 +U 2 +L 11 +R 8 +U 12 +R 3 +U 5 +L 7 +D 6 +U 6 +L 10 +R 4 +L 1 +U 8 +D 4 +R 13 +L 7 +U 6 +L 9 +U 13 +D 13 +L 8 +U 3 +L 13 +D 14 +L 1 +U 9 +D 1 +U 9 +R 12 +D 7 +L 9 +R 13 +D 12 +U 10 +D 4 +L 13 +R 11 +L 2 +D 9 +R 4 +U 10 +L 2 +D 8 +U 11 +L 14 +R 1 +U 2 +D 9 +U 8 +L 4 +D 14 +U 10 +R 3 +D 12 +U 12 +L 1 +U 1 +D 7 +U 8 +R 9 +D 7 +R 11 +D 11 +R 13 +D 14 +L 5 +D 1 +U 12 +D 7 +U 13 +D 9 +U 6 +R 5 +U 13 +L 4 +D 8 +L 3 +U 8 +D 4 +R 4 +D 2 +L 1 +D 12 +R 11 +U 11 +D 6 +R 12 +U 3 +D 2 +R 6 +D 1 +U 11 +L 7 +D 9 +L 8 +R 1 +U 13 +D 7 +L 9 +U 4 +D 8 +L 12 +D 6 +R 4 +D 5 +U 13 +L 2 +D 11 +R 4 +D 5 +L 4 +U 9 +L 12 +U 10 +D 3 +R 15 +L 3 +D 10 +L 4 +R 2 +D 10 +R 1 +U 10 +L 9 +D 7 +L 5 +R 8 +U 3 +D 9 +R 5 +D 8 +U 5 +D 5 +L 8 +U 2 +R 5 +U 4 +D 6 +R 3 +L 1 +U 15 +R 12 +D 14 +R 12 +U 14 +D 8 +U 10 +R 9 +D 8 +L 10 +R 4 +U 5 +D 15 +U 6 +D 4 +R 7 +D 1 +R 15 +U 15 +D 4 +R 6 +L 1 +R 7 +L 12 +U 3 +R 1 +L 6 +D 6 +R 5 +D 15 +R 1 +U 10 +R 4 +D 13 +L 5 +D 10 +L 7 +R 5 +U 15 +L 11 +U 4 +D 9 +U 12 +R 12 +L 9 +D 10 +U 7 +R 3 +L 10 +R 12 +D 2 +U 8 +L 7 +R 3 +U 1 +D 10 +L 11 +R 12 +L 8 +U 1 +D 12 +L 4 +D 4 +L 6 +D 7 +R 3 +L 7 +U 1 +R 4 +L 1 +U 2 +L 6 +D 4 +L 7 +R 7 +L 15 +U 4 +R 7 +D 8 +U 9 +D 3 +L 5 +U 6 +R 2 +D 10 +L 9 +U 16 +L 15 +U 1 +R 15 +U 13 +L 12 +D 10 +R 1 +D 6 +R 3 +D 1 +L 14 +R 10 +D 2 +R 10 +U 12 +R 10 +L 13 +U 14 +D 11 +U 16 +R 6 +U 4 +R 6 +U 13 +R 5 +D 1 +L 12 +U 14 +D 11 +R 11 +D 7 +L 3 +R 7 +L 9 +U 11 +D 6 +U 14 +D 2 +L 1 +R 16 +L 14 +D 10 +U 4 +R 15 +U 11 +R 10 +D 5 +R 8 +U 13 +D 11 +U 9 +R 8 +D 4 +L 11 +U 8 +R 7 +D 14 +U 8 +D 6 +L 13 +R 2 +L 16 +R 10 +U 7 +L 10 +U 2 +L 13 +U 8 +D 5 +U 3 +R 14 +D 15 +R 10 +D 4 +U 10 +D 15 +R 6 +U 13 +R 1 +U 16 +L 2 +U 6 +L 8 +D 2 +L 11 +U 15 +D 5 +U 1 +R 3 +D 16 +L 3 +R 4 +D 8 +R 10 +L 8 +D 1 +U 2 +R 4 +U 3 +D 16 +U 10 +R 11 +L 11 +R 7 +L 3 +U 17 +D 1 +L 10 +D 6 +L 6 +D 6 +R 8 +U 16 +D 15 +U 12 +L 12 +D 17 +U 9 +R 7 +U 12 +L 6 +D 5 +R 2 +L 17 +U 6 +R 1 +D 13 +R 11 +D 17 +R 5 +L 3 +D 3 +U 4 +D 4 +U 4 +L 11 +R 4 +L 15 +D 7 +U 13 +D 12 +U 1 +L 16 +D 2 +L 12 +R 15 +U 11 +R 15 +D 12 +R 4 +L 3 +R 3 +U 3 +L 13 +U 4 +L 16 +U 7 +D 17 +R 14 +U 11 +D 4 +L 11 +U 9 +D 8 +U 3 +R 10 +U 16 +R 5 +L 10 +D 3 +L 7 +U 9 +R 2 +U 14 +L 8 +R 9 +L 6 +D 14 +L 14 +U 3 +D 9 +L 8 +D 14 +U 6 +L 4 +R 7 +D 4 +L 6 +U 11 +R 8 +D 8 +R 5 +U 17 +R 15 +U 1 +L 17 +D 14 +L 2 +D 3 +L 16 +D 7 +L 16 +R 10 +D 6 +R 11 +U 10 +L 14 +R 2 +U 3 +D 1 +R 16 +L 5 +R 2 +D 15 +U 6 +L 3 +D 9 +R 12 +D 13 +U 17 +R 16 +D 15 +U 3 +D 13 +L 7 +R 12 +U 18 +L 12 +U 7 +L 18 +D 12 +L 17 +D 6 +L 8 +D 16 +L 9 +R 8 +U 9 +D 9 +U 16 +L 10 +U 12 +L 9 +U 10 +R 13 +L 7 +U 17 +L 13 +D 18 +L 6 +R 14 +L 9 +U 1 +R 8 +U 3 +R 13 +D 3 +L 14 +D 8 +L 12 +R 3 +L 11 +R 2 +D 7 +R 14 +L 9 +U 1 +D 5 +U 10 +R 5 +D 8 +U 2 +D 17 +L 16 +D 3 +U 15 +R 17 +D 10 +R 16 +L 3 +U 2 +R 5 +L 7 +U 7 +D 12 +L 8 +R 4 +L 18 +R 13 +L 18 +R 11 +U 1 +D 1 +L 12 +U 15 +L 4 +D 12 +U 13 +L 14 +D 14 +L 12 +D 14 +U 14 +L 6 +R 5 +D 6 +L 13 +U 16 +L 11 +U 7 +R 10 +D 6 +U 17 +L 12 +R 11 +D 11 +U 7 +R 2 +U 9 +R 16 +L 5 +D 16 +R 7 +U 4 +D 19 +L 2 +D 18 +R 1 +U 15 +R 13 +D 5 +R 2 +U 2 +D 12 +L 17 +D 11 +U 8 +R 13 +U 11 +R 2 +U 13 +R 11 +U 19 +L 17 +R 17 +D 16 +R 18 +U 9 +L 13 +D 1 +R 16 +D 13 +R 6 +D 9 +R 7 +U 10 +D 10 +U 8 +R 8 +L 2 +R 17 +D 13 +L 9 +U 19 +D 6 +L 14 +R 9 +L 19 +D 17 +R 17 +D 10 +L 1 +U 15 +D 17 +L 12 +R 10 +L 14 +U 16 +L 17 +U 8 +R 8 +U 4 +R 11 +U 14 +R 2 +L 9 +U 11 +D 14 +U 14 +D 9 +L 10 +U 19 +D 10 +R 5 +D 1 +L 3 +U 14 +R 11 +L 17 +R 7 +D 8 +R 1 +U 2 +R 4 +L 2 +R 13 +U 16 +D 2 +L 2 +R 2 +U 16 +L 3 +D 7 +R 7 +U 2 +L 5 +U 7 +R 17 +U 6 +D 12 +U 17 +D 13 +L 19 +R 19 +L 9 +D 14 +R 15 +L 7 +U 11 +R 2 +D 16 +U 6 +L 12