diff --git a/2022/9/index.js b/2022/9/index.js new file mode 100644 index 0000000..1aaa93a --- /dev/null +++ b/2022/9/index.js @@ -0,0 +1,82 @@ + +const fs = require('fs/promises'); + +const tailVisited = {'0-0': true}; + +let hx = 0; +let hy = 0; +let tx = 0; +let ty = 0; + +let lastHead = [0,0]; + +const moveRope = (direction) => { + console.log("Moving ", direction); + lastHead = [hx, hy]; + switch (direction) { + case "R": + hx += 1; + break; + case "L": + hx -= 1; + break; + case "U": + hy -= 1; + break; + case "D": + hy += 1; + break; + } + + if(Math.max(Math.abs(hx - tx), Math.abs(hy - ty)) > 1) { + [tx, ty ] = lastHead; + console.log("Moving Tail to: ", tx, ", ", ty); + tailVisited[`${tx}-${ty}`] = true; + } +} + +const printGraph = () => { + console.log("\n\n"); + for(let y = -15; y <= 15; y++) { + const row = ["·", "·", "·", "·", "·", + "·", "·", "·", "·", "·", + "·", "·", "·", "·", "·", + "·", "·", "·", "·", "·", + "·", "·", "·", "·", "·", + "·", "·", "·", "·", "·", "·"].map((spot, i) => { + const x = i - 15; + let ch = "·"; + if(!(y % 5) && !(x % 5)) { + ch = "▪"; + } + if(y === 0 && x === 0) { + ch = "0"; + } + if(y === ty && x === tx) { + ch = "T"; + } + if(y === hy && x === hx) { + ch = "H"; + } + return ch; + }); + console.log(row.join("")); + } + console.log("\n\n"); +}; + +(async () => { + const input = await fs.readFile("./input.txt", 'utf8'); + + const lines = input.split("\n").map(t => t.split(" ")); + + //printGraph(); + for (const [direction, times] of lines) { + for(let i = 0; i < times; ++i) { + moveRope(direction); + //printGraph(); + } + } + + console.log(Object.values(tailVisited).length); +})(); diff --git a/2022/9/index2.js b/2022/9/index2.js new file mode 100644 index 0000000..784c7d7 --- /dev/null +++ b/2022/9/index2.js @@ -0,0 +1,135 @@ + +const fs = require('fs/promises'); + +const tailVisited = {'0~0': true}; + +const rope = [[0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0]]; + +const keypress = async () => { + process.stdin.setRawMode(true) + return new Promise(resolve => process.stdin.once('data', data => { + const byteArray = [...data] + if (byteArray.length > 0 && byteArray[0] === 3) { + console.log('^C') + process.exit(1) + } + process.stdin.setRawMode(false) + resolve() + })) +} + +const moveRope = (direction) => { + const lastSpot = [rope[0][0], rope[0][1]]; + switch (direction) { + case "R": + rope[0][0] += 1; + break; + case "L": + rope[0][0] -= 1; + break; + case "U": + rope[0][1] -= 1; + break; + case "D": + rope[0][1] += 1; + break; + } + for(let i = 1; i < rope.length; ++i) { + rope[i] = moveSeg(rope[i], i) + } +} + +const moveSeg = ([x, y], i) => { + if(i === rope.length) return; + const seg = rope[i - 1]; + //console.log("uhh: ", rope, " ", i, " ", seg); + const [lx, ly] = seg; + V= rope[i - 1]; + if(lx === x) { + if(ly === y + 2) { + return [x, y + 1]; + } + if(ly === y - 2) { + return[x, y - 1]; + } + } + if(ly === y) { + if(lx === x + 2) { + return [x + 1, y]; + } + if(lx === x - 2) { + return rope[i] = [x - 1, y]; + } + } + if(Math.max(Math.abs(x - lx), Math.abs(y - ly)) > 1) { + const xDiff = lx - x; + const yDiff = ly - y; + if(xDiff === 0 || yDiff === 0) { + console.log([x, y, lx, ly]) + console.log("ROPE: ", rope); + } + return [x + xDiff/Math.abs(xDiff), y + yDiff/Math.abs(yDiff)]; + } + + return [x, y]; +} + +const printGraph = () => { + console.log("\n"); + console.log(rope); + console.log("\n"); + for(let y = -15; y <= 15; y++) { + const row = ["·", "·", "·", "·", "·", + "·", "·", "·", "·", "·", + "·", "·", "·", "·", "·", + "·", "·", "·", "·", "·", + "·", "·", "·", "·", "·", + "·", "·", "·", "·", "·", "·"].map((spot, i) => { + const x = i - 15; + const [hx, hy] = rope[0]; + const [tx, ty] = rope[9]; + let ch = "·"; + if(!(y % 5) && !(x % 5)) { + ch = "▪"; + } + if(y === 0 && x === 0) { + ch = "0"; + } + if(y === ty && x === tx) { + ch = "T"; + } + rope.slice(0, -1).reverse().forEach(([a, b], j) => { + if(a === x && b === y) { + ch = j+1; + } + }); + if(y === hy && x === hx) { + ch = "H"; + } + return ch; + }); + console.log(row.join("")); + } + console.log("\n\n"); +}; + +(async () => { + const input = await fs.readFile("./input.txt", 'utf8'); + + const lines = input.split("\n").map(t => t.split(" ")); + + //printGraph(); + for (const [direction, times] of lines) { + for(let i = 0; i < times; ++i) { + //await keypress(); + console.log("Moving ", direction); + moveRope(direction); + //printGraph(); + tailVisited[`${rope[9][0]}~${rope[9][1]}`] = true; + + } + } + console.log(tailVisited); + + console.log(Object.values(tailVisited).length); +})(); diff --git a/2022/9/input.txt b/2022/9/input.txt new file mode 100644 index 0000000..694003a --- /dev/null +++ b/2022/9/input.txt @@ -0,0 +1,2000 @@ +D 2 +U 1 +D 2 +R 2 +L 1 +U 2 +L 1 +U 2 +D 1 +R 1 +D 2 +R 1 +D 1 +U 2 +D 2 +R 1 +U 1 +R 1 +U 2 +R 1 +L 1 +U 2 +R 1 +L 2 +U 1 +R 1 +U 1 +R 1 +L 2 +U 2 +D 1 +U 1 +D 2 +L 1 +U 1 +L 1 +R 1 +D 1 +R 1 +D 1 +U 2 +D 1 +R 1 +U 1 +L 1 +U 2 +L 1 +D 1 +U 1 +D 1 +L 1 +U 2 +L 1 +D 2 +R 2 +L 1 +R 2 +D 1 +L 2 +D 2 +U 2 +R 1 +L 1 +D 2 +U 2 +L 1 +D 2 +U 1 +L 2 +R 2 +U 1 +D 1 +U 1 +D 1 +R 1 +D 1 +U 2 +D 1 +R 1 +D 1 +L 1 +D 1 +L 2 +U 2 +D 1 +R 1 +D 1 +L 1 +D 2 +R 2 +U 2 +D 1 +U 2 +D 1 +U 1 +L 1 +R 2 +D 2 +R 1 +D 2 +L 2 +D 2 +R 1 +L 1 +U 1 +D 2 +R 2 +U 2 +R 2 +L 1 +R 1 +L 3 +U 3 +L 3 +D 2 +U 1 +D 1 +U 2 +D 1 +R 1 +D 1 +R 2 +D 3 +U 1 +L 2 +U 1 +D 2 +R 1 +D 1 +L 2 +R 2 +U 1 +L 2 +D 2 +L 1 +U 2 +D 3 +L 1 +U 1 +R 2 +U 3 +D 1 +L 3 +U 1 +L 3 +D 1 +R 2 +L 3 +U 2 +L 2 +U 1 +L 1 +R 3 +D 3 +L 1 +R 2 +D 3 +R 2 +L 3 +D 1 +U 2 +R 3 +U 2 +R 3 +L 2 +U 1 +L 1 +D 3 +U 1 +D 1 +U 2 +D 3 +U 3 +R 1 +U 2 +L 1 +D 1 +L 2 +U 1 +D 1 +L 1 +R 3 +U 3 +L 3 +D 3 +L 2 +D 1 +U 1 +L 1 +U 3 +L 1 +D 3 +R 1 +L 1 +R 2 +U 1 +R 2 +U 3 +R 1 +D 3 +L 3 +U 2 +L 3 +R 1 +D 2 +U 3 +R 3 +D 3 +U 1 +R 3 +D 2 +R 3 +U 1 +D 1 +U 3 +R 1 +L 1 +U 2 +L 1 +U 1 +L 1 +R 1 +D 1 +R 3 +D 4 +L 2 +R 4 +U 3 +D 1 +R 4 +L 4 +R 1 +D 2 +U 3 +R 2 +D 2 +U 3 +R 4 +L 2 +D 3 +L 4 +D 4 +U 4 +R 2 +U 1 +L 3 +D 4 +U 2 +R 1 +L 3 +D 3 +R 4 +D 2 +R 2 +D 4 +U 4 +L 4 +D 4 +R 2 +D 2 +U 3 +D 3 +R 3 +L 2 +D 2 +L 2 +U 3 +L 4 +U 2 +R 4 +D 4 +L 3 +R 1 +U 1 +R 2 +L 1 +D 1 +U 2 +D 3 +L 4 +U 3 +L 1 +U 3 +R 2 +U 3 +R 1 +U 1 +R 2 +U 2 +R 1 +D 4 +U 4 +L 2 +U 2 +D 4 +U 1 +R 4 +L 4 +D 4 +U 3 +D 4 +L 4 +U 3 +L 1 +R 4 +L 3 +D 3 +U 1 +R 4 +D 3 +U 4 +L 2 +U 4 +D 3 +R 2 +D 3 +U 4 +R 4 +L 4 +R 3 +U 1 +R 4 +D 1 +L 3 +U 3 +L 3 +D 1 +L 4 +R 2 +U 1 +L 3 +R 2 +U 4 +L 1 +U 5 +R 2 +L 2 +U 2 +L 2 +R 4 +D 4 +L 5 +D 1 +R 4 +U 5 +L 1 +D 4 +U 1 +L 4 +U 3 +L 1 +R 3 +D 1 +R 2 +L 5 +U 3 +L 5 +U 4 +D 3 +L 5 +D 2 +R 4 +U 2 +L 1 +R 4 +L 5 +R 3 +L 1 +U 2 +L 4 +D 1 +R 2 +L 5 +U 3 +D 2 +R 5 +L 4 +D 2 +R 3 +D 2 +R 4 +D 3 +U 1 +D 1 +U 4 +D 2 +L 2 +R 1 +U 5 +D 5 +U 3 +R 2 +U 3 +L 5 +R 1 +U 3 +L 4 +R 2 +U 3 +D 1 +U 2 +D 2 +L 5 +R 5 +D 3 +L 1 +R 3 +U 2 +D 5 +U 1 +D 5 +R 3 +U 1 +L 5 +R 1 +D 4 +L 4 +D 1 +U 2 +L 4 +R 5 +U 5 +L 4 +D 2 +R 5 +U 1 +L 5 +D 1 +L 1 +U 5 +R 1 +L 2 +R 5 +L 5 +R 2 +L 1 +D 2 +U 1 +L 3 +R 1 +U 5 +D 1 +U 1 +L 5 +U 6 +R 6 +U 5 +D 5 +R 3 +U 1 +R 1 +L 6 +R 6 +D 5 +R 6 +D 4 +L 3 +R 6 +U 5 +D 6 +L 2 +R 1 +D 5 +R 3 +D 2 +L 1 +R 5 +U 5 +D 4 +U 3 +R 5 +U 5 +R 3 +D 5 +R 3 +U 3 +R 2 +D 5 +L 6 +D 3 +U 3 +D 6 +R 5 +U 4 +L 4 +D 3 +U 6 +L 2 +R 1 +U 4 +D 1 +L 2 +U 1 +L 3 +D 4 +U 1 +L 5 +D 1 +R 2 +U 3 +L 1 +R 1 +U 1 +L 4 +U 6 +R 6 +D 3 +U 4 +R 2 +D 5 +L 6 +D 2 +R 4 +D 2 +U 5 +D 3 +U 2 +R 6 +L 5 +R 6 +U 1 +L 5 +U 1 +L 6 +U 1 +D 4 +R 3 +D 3 +L 1 +D 3 +R 2 +L 1 +R 3 +D 4 +L 6 +U 2 +D 5 +U 3 +R 6 +U 2 +R 6 +L 5 +R 1 +U 2 +R 3 +U 1 +R 6 +L 2 +U 6 +R 5 +U 1 +R 4 +L 1 +R 3 +U 3 +L 5 +D 7 +R 2 +D 4 +R 5 +L 3 +R 6 +U 7 +L 7 +U 6 +L 2 +D 2 +R 7 +D 7 +U 3 +R 1 +U 7 +L 2 +D 3 +L 5 +R 4 +U 7 +R 3 +L 7 +D 2 +R 7 +D 5 +L 7 +D 1 +U 7 +R 5 +U 4 +D 4 +U 4 +D 4 +U 1 +R 7 +L 3 +D 3 +U 2 +L 3 +U 1 +D 7 +L 6 +R 3 +U 6 +D 1 +R 6 +D 1 +R 1 +D 7 +U 4 +R 1 +L 4 +U 3 +L 7 +R 2 +D 2 +L 6 +U 2 +R 2 +U 7 +R 5 +L 6 +R 5 +D 1 +R 4 +U 2 +L 1 +D 4 +U 5 +R 4 +D 7 +U 7 +R 1 +U 3 +R 4 +L 1 +R 6 +L 4 +U 4 +L 2 +U 3 +D 2 +L 2 +U 2 +L 6 +R 5 +D 7 +L 2 +U 5 +L 6 +R 7 +L 7 +D 2 +U 6 +D 3 +R 1 +U 1 +D 4 +L 7 +D 7 +U 5 +L 6 +D 1 +L 4 +D 1 +U 1 +L 5 +U 1 +R 5 +D 8 +R 7 +L 5 +U 3 +D 2 +R 2 +L 6 +R 1 +L 4 +R 8 +U 8 +L 5 +R 7 +D 7 +L 2 +R 5 +L 6 +D 2 +L 7 +U 3 +R 2 +D 3 +U 3 +L 6 +U 5 +D 3 +L 6 +U 5 +D 5 +L 1 +U 4 +L 8 +D 3 +L 3 +R 2 +U 6 +D 8 +U 7 +L 6 +D 2 +U 4 +D 1 +U 3 +L 6 +R 2 +D 2 +U 4 +R 8 +D 3 +R 6 +D 6 +U 1 +L 4 +U 3 +L 6 +D 8 +U 7 +D 5 +L 3 +U 4 +D 2 +R 7 +L 8 +U 1 +R 3 +D 5 +U 5 +D 6 +R 3 +L 2 +R 8 +L 3 +U 5 +L 3 +U 5 +L 7 +U 7 +L 2 +U 1 +L 5 +D 7 +U 7 +D 8 +R 2 +D 7 +U 4 +R 4 +U 6 +L 2 +U 8 +D 1 +U 1 +D 4 +L 4 +U 1 +L 5 +R 8 +U 5 +D 4 +R 2 +D 6 +L 1 +D 8 +U 4 +D 5 +L 8 +U 3 +L 5 +D 1 +U 3 +R 1 +D 7 +R 9 +U 8 +R 7 +L 3 +D 8 +U 9 +D 1 +U 7 +L 6 +U 4 +R 8 +U 1 +D 6 +R 3 +L 5 +D 3 +U 1 +L 3 +U 2 +L 3 +U 2 +R 7 +D 2 +R 7 +D 8 +R 1 +D 4 +R 1 +D 6 +R 8 +U 8 +L 2 +U 8 +L 5 +D 1 +U 7 +R 4 +L 9 +U 2 +L 3 +U 4 +L 2 +D 3 +L 4 +U 9 +D 2 +R 2 +U 9 +R 1 +L 4 +D 5 +R 9 +U 3 +L 3 +U 8 +R 5 +U 7 +D 5 +U 9 +R 3 +D 9 +R 1 +D 7 +R 3 +D 6 +L 6 +D 5 +U 9 +D 8 +U 4 +L 5 +R 6 +D 7 +R 6 +L 8 +R 3 +U 3 +R 9 +U 8 +R 6 +L 9 +U 2 +R 9 +L 8 +U 1 +R 9 +L 5 +D 5 +U 9 +L 6 +D 7 +U 3 +D 3 +R 4 +D 1 +L 4 +D 5 +L 4 +U 2 +R 9 +U 7 +L 4 +D 7 +U 9 +R 4 +D 7 +R 7 +D 4 +L 1 +D 2 +L 1 +U 7 +R 8 +D 2 +U 9 +D 6 +L 7 +R 5 +L 3 +R 5 +D 8 +L 3 +R 8 +L 6 +U 6 +L 6 +U 5 +R 7 +L 9 +U 1 +R 3 +D 7 +U 10 +D 1 +U 8 +D 8 +L 5 +U 6 +D 5 +U 9 +R 8 +D 8 +R 9 +D 2 +L 1 +D 8 +R 2 +D 6 +L 10 +R 1 +U 3 +L 8 +U 7 +R 7 +U 7 +D 6 +L 7 +U 3 +L 4 +R 9 +D 8 +U 4 +D 3 +L 8 +R 7 +U 1 +L 9 +D 10 +U 2 +L 5 +U 3 +L 4 +R 10 +L 2 +D 6 +L 6 +D 2 +U 5 +D 3 +R 9 +D 2 +U 1 +D 5 +U 9 +D 7 +R 2 +U 5 +R 4 +D 9 +U 6 +L 10 +D 3 +U 1 +L 1 +D 9 +U 2 +L 8 +U 3 +R 5 +U 7 +D 8 +R 5 +L 8 +U 9 +L 1 +D 5 +U 8 +R 4 +D 7 +U 4 +R 10 +U 9 +R 9 +U 7 +R 3 +U 10 +R 5 +U 7 +R 6 +U 10 +R 9 +U 8 +D 8 +L 1 +U 2 +D 1 +R 9 +U 10 +D 6 +L 3 +D 4 +R 11 +D 11 +R 7 +U 3 +L 3 +U 11 +D 11 +U 5 +R 9 +U 3 +R 4 +D 1 +U 11 +R 2 +L 7 +R 8 +L 2 +D 4 +U 4 +L 9 +R 10 +L 3 +R 7 +D 7 +L 9 +U 6 +L 5 +D 8 +U 4 +D 4 +L 4 +D 2 +U 8 +R 4 +D 4 +U 10 +D 5 +R 5 +D 5 +U 8 +D 2 +L 6 +U 8 +L 2 +D 8 +R 5 +D 5 +U 1 +D 1 +L 9 +R 7 +U 2 +L 7 +R 1 +L 1 +U 2 +R 10 +D 2 +U 8 +L 1 +R 6 +L 3 +R 4 +D 6 +L 2 +D 11 +R 8 +D 11 +L 3 +R 4 +L 10 +U 7 +L 9 +U 4 +L 8 +D 6 +U 8 +R 7 +L 5 +R 8 +L 4 +U 6 +R 5 +U 7 +D 3 +L 8 +U 2 +R 7 +D 3 +R 4 +D 11 +L 8 +U 6 +D 1 +R 11 +L 7 +D 4 +R 4 +L 4 +U 5 +L 8 +R 7 +U 8 +D 12 +R 9 +D 8 +R 7 +L 9 +R 2 +D 1 +L 7 +D 3 +L 1 +R 5 +U 1 +D 12 +R 4 +U 1 +D 4 +L 9 +U 10 +R 5 +D 11 +R 2 +L 3 +U 8 +R 5 +D 8 +U 12 +D 6 +R 2 +D 5 +R 12 +U 7 +L 2 +U 4 +D 5 +U 8 +R 12 +U 1 +L 11 +U 7 +D 10 +L 6 +D 6 +R 1 +L 6 +D 2 +U 5 +R 6 +D 8 +R 4 +L 7 +D 2 +L 7 +D 8 +U 10 +R 1 +U 6 +R 5 +L 4 +R 8 +D 9 +R 5 +U 11 +D 4 +U 11 +R 8 +L 8 +U 2 +R 11 +L 12 +U 7 +L 12 +U 10 +R 3 +D 11 +R 1 +L 8 +D 2 +L 5 +R 4 +U 3 +D 9 +R 8 +D 11 +L 12 +R 11 +L 4 +R 10 +D 6 +U 4 +R 6 +D 6 +U 9 +R 12 +U 5 +R 8 +L 10 +D 1 +U 7 +D 12 +L 3 +U 10 +D 2 +U 6 +D 12 +R 3 +U 2 +D 2 +U 3 +D 11 +R 2 +U 2 +D 9 +R 11 +D 4 +U 6 +R 11 +L 9 +R 10 +D 13 +L 2 +D 2 +L 4 +D 13 +R 7 +L 3 +U 8 +D 5 +R 7 +D 7 +U 13 +D 5 +U 5 +L 12 +D 9 +L 2 +D 6 +U 13 +R 2 +D 10 +L 9 +D 7 +R 2 +U 3 +D 2 +L 3 +R 9 +U 3 +L 12 +U 4 +R 1 +U 13 +R 4 +U 1 +D 10 +R 10 +D 10 +U 5 +L 7 +D 8 +R 1 +D 12 +L 13 +R 10 +D 6 +R 9 +U 4 +R 9 +U 1 +L 3 +R 3 +D 8 +U 6 +L 11 +R 8 +D 5 +U 2 +L 9 +R 7 +L 7 +D 8 +L 12 +R 12 +U 9 +D 9 +U 7 +D 10 +L 3 +R 3 +D 8 +L 11 +U 8 +D 7 +U 11 +L 4 +D 4 +R 3 +U 4 +R 6 +D 5 +U 5 +L 8 +U 4 +L 9 +U 6 +L 8 +D 3 +U 12 +D 5 +L 8 +D 11 +U 4 +R 12 +U 7 +L 5 +D 4 +R 4 +U 7 +R 9 +L 5 +U 2 +L 3 +D 2 +R 6 +U 2 +R 8 +D 10 +U 14 +L 3 +R 4 +U 10 +R 7 +L 11 +R 7 +U 4 +R 8 +L 14 +D 11 +U 12 +R 10 +L 8 +R 11 +L 4 +U 1 +L 2 +R 7 +U 13 +D 5 +U 2 +L 6 +D 7 +R 5 +U 4 +D 10 +U 5 +D 2 +R 9 +U 13 +L 10 +U 1 +R 10 +D 14 +L 5 +R 12 +L 7 +D 2 +L 2 +D 5 +R 4 +U 6 +D 7 +R 12 +U 9 +D 9 +R 6 +U 1 +D 14 +U 14 +D 14 +L 7 +R 10 +U 3 +D 2 +R 10 +L 14 +R 7 +D 5 +U 1 +L 8 +U 2 +D 3 +U 6 +L 11 +R 13 +L 10 +D 9 +U 5 +R 6 +U 2 +D 7 +U 5 +L 6 +R 8 +D 11 +R 14 +D 5 +R 10 +L 13 +R 1 +U 4 +L 9 +R 2 +D 1 +U 10 +D 6 +U 3 +R 13 +L 9 +R 2 +D 3 +R 14 +L 2 +R 14 +U 1 +R 7 +L 1 +U 6 +D 6 +R 10 +L 12 +D 10 +R 11 +D 13 +L 3 +R 2 +L 1 +R 10 +U 1 +L 7 +R 5 +D 6 +U 11 +L 8 +R 7 +D 10 +U 13 +R 12 +D 8 +L 7 +U 8 +R 14 +U 10 +L 6 +D 15 +R 8 +L 10 +U 13 +L 3 +U 13 +L 9 +R 4 +D 6 +R 12 +L 12 +R 4 +U 12 +D 6 +R 2 +L 11 +R 7 +D 1 +U 4 +R 14 +U 6 +D 1 +U 15 +D 14 +R 3 +D 14 +L 1 +R 9 +L 2 +D 11 +R 11 +D 10 +R 1 +L 9 +U 6 +R 8 +L 4 +R 9 +U 13 +D 15 +L 2 +D 2 +L 2 +D 6 +R 10 +U 10 +L 8 +D 11 +L 8 +R 10 +U 3 +R 7 +U 15 +R 11 +L 10 +U 2 +R 8 +L 8 +D 5 +R 11 +U 7 +L 13 +D 15 +U 4 +D 10 +R 11 +D 6 +L 2 +U 3 +R 2 +L 1 +D 14 +U 5 +L 14 +D 13 +R 12 +U 8 +R 1 +L 14 +U 6 +D 10 +R 3 +U 8 +L 2 +R 6 +D 10 +U 9 +L 2 +D 13 +L 13 +D 9 +L 10 +U 14 +R 11 +L 14 +U 10 +L 6 +D 14 +L 11 +R 4 +L 9 +U 3 +D 13 +L 5 +R 16 +U 3 +L 9 +D 6 +R 15 +U 6 +L 4 +R 10 +D 12 +R 4 +D 2 +U 11 +D 13 +R 6 +U 15 +R 14 +D 14 +U 8 +R 9 +L 5 +D 16 +U 9 +R 15 +D 13 +R 3 +L 2 +R 3 +U 14 +D 9 +U 2 +D 6 +U 9 +D 7 +L 13 +D 7 +L 5 +R 3 +U 2 +L 13 +R 9 +D 1 +L 16 +D 8 +R 12 +U 15 +R 4 +D 15 +L 12 +D 13 +R 4 +L 2 +U 5 +R 13 +L 15 +D 12 +L 3 +D 13 +L 5 +D 16 +L 11 +D 13 +U 1 +D 9 +L 10 +U 11 +D 12 +U 11 +D 14 +U 16 +D 14 +U 10 +R 7 +L 11 +R 14 +U 11 +R 5 +U 1 +D 16 +R 16 +L 9 +U 7 +D 7 +R 8 +D 7 +U 10 +L 7 +D 6 +U 4 +D 2 +L 3 +D 3 +L 2 +R 3 +L 9 +D 2 +R 12 +D 11 +U 11 +L 14 +U 4 +L 12 +R 13 +L 9 +D 11 +R 12 +L 15 +R 15 +L 15 +R 16 +U 17 +D 4 +L 9 +U 9 +D 17 +L 8 +U 15 +D 17 +U 9 +R 4 +U 6 +L 1 +D 7 +R 3 +D 11 +L 10 +R 1 +U 14 +D 13 +R 7 +L 8 +U 16 +L 16 +U 12 +D 3 +R 4 +D 8 +R 8 +D 1 +L 12 +R 16 +D 3 +R 7 +D 16 +U 11 +R 6 +D 13 +R 4 +L 3 +R 6 +U 1 +R 4 +D 4 +U 13 +L 7 +D 17 +R 4 +D 6 +L 1 +U 17 +L 16 +U 12 +L 11 +R 1 +L 11 +D 8 +U 15 +D 6 +L 5 +U 16 +R 6 +D 11 +L 17 +D 7 +L 1 +D 8 +L 16 +U 8 +R 4 +L 17 +D 2 +L 1 +U 16 +D 8 +L 17 +U 12 +D 4 +R 1 +D 12 +U 2 +L 11 +U 17 +L 3 +R 7 +L 10 +U 16 +R 8 +U 6 +L 3 +D 15 +L 11 +R 7 +U 14 +R 8 +L 9 +D 6 +L 3 +U 17 +R 1 +D 13 +U 15 +L 18 +U 11 +R 3 +U 16 +D 12 +R 1 +D 6 +L 17 +R 9 +L 6 +U 2 +D 2 +U 16 +D 12 +R 1 +U 17 +R 16 +D 12 +U 3 +D 11 +L 13 +U 11 +R 15 +U 13 +D 11 +U 8 +L 3 +D 1 +L 7 +R 9 +D 18 +R 17 +U 2 +L 16 +D 8 +L 14 +D 11 +R 4 +D 12 +U 5 +D 6 +U 2 +D 4 +L 1 +R 11 +D 3 +U 10 +L 1 +R 16 +U 10 +L 17 +D 5 +R 16 +U 18 +R 1 +D 16 +R 14 +D 11 +U 13 +D 13 +R 5 +L 9 +U 11 +R 18 +L 14 +U 14 +L 18 +R 15 +D 10 +U 10 +R 17 +U 12 +L 2 +D 11 +R 15 +U 3 +R 17 +L 1 +R 1 +U 1 +L 8 +U 15 +R 15 +L 12 +U 2 +R 1 +L 9 +R 3 +L 6 +R 18 +D 9 +R 12 +U 6 +L 17 +R 11 +D 8 +R 17 +D 12 +L 2 +R 9 +U 4 +D 17 +R 18 +D 12 +L 9 +R 16 +U 5 +R 1 +L 12 +R 9 +L 8 +U 8 +R 2 +U 9 +L 2 +D 18 +U 11 +L 17 +U 3 +L 11 +R 3 +L 5 +D 1 +R 4 +U 10 +D 18 +R 10 +D 10 +L 5 +R 7 +D 2 +R 2 +L 18 +U 4 +D 10 +U 16 +D 1 +L 2 +U 17 +D 5 +U 9 +R 13 +D 6 +R 14 +D 10 +L 15 +R 13 +L 6 +U 11 +R 6 +L 4 +R 19 +L 4 +D 13 +R 1 +L 9 +D 4 +R 12 +U 18 +D 3 +U 17 +R 19 +L 6 +R 6 +D 8 +R 12 +L 10 +R 3 +U 5 +L 2 +D 7 +L 9 +D 16 +L 16 +U 14 +L 12 +R 2 +L 17 +R 18 +D 12 +R 16 +D 19 +U 6 +D 19 +U 13 +R 4 +D 18 +L 14 +U 14 +D 12 +R 10 +L 13 +D 10 +U 10 +D 2 +U 18 +L 19 +R 15 +D 6 +L 1 +D 10 +R 7 +D 2 +R 19 +D 5 +U 19 +L 13 +U 17 +L 3 +R 19 +U 9 +L 7 +D 6 +R 12 +L 10 +R 9 +D 9 +U 13 +R 7 +L 1 +U 1 +D 17