Y252WSYR7C5GNY7T5F24CMOFKSMKT2JX542CBP7FPN4EAI7RMZ2QC
(ns edition2022.day9-test
(:require [clojure.test :refer :all]
[edition2022.day9 :refer :all]))
(deftest rope-movement
(testing "vertical movement"
(is (=
(move-rope [[0 0] [0 0]] [0 1])
[[0 1] [0 0]]))
(is (=
(move-rope [[0 1] [0 0]] [0 1])
[[0 2] [0 1]]))
(is (=
(move-rope [[0 1] [0 0]] [0 -1])
[[0 0] [0 0]]))
(is (=
(move-rope [[0 0] [0 0]] [0 -1])
[[0 -1] [0 0]]))
(is (=
(move-rope [[0 -1] [0 0]] [0 -1])
[[0 -2] [0 -1]])))
(testing "horizontal movement"
(is (=
(move-rope [[0 0] [0 0]] [1 0])
[[1 0] [0 0]]))
(is (=
(move-rope [[1 0] [0 0]] [1 0])
[[2 0] [1 0]]))
(is (=
(move-rope [[1 0] [0 0]] [-1 0])
[[0 0] [0 0]]))
(is (=
(move-rope [[0 0] [0 0]] [-1 0])
[[-1 0] [0 0]]))
(is (=
(move-rope [[-1 0] [0 0]] [-1 0])
[[-2 0] [-1 0]])))
(testing "movement that ends up in diagonal"
(testing "vertical"
(is (=
(move-rope [[1 0] [0 0]] [0 1])
[[1 1] [0 0]]))
(is (=
(move-rope [[-1 0] [0 0]] [0 1])
[[-1 1] [0 0]]))
(is (=
(move-rope [[1 0] [0 0]] [0 -1])
[[1 -1] [0 0]]))
(is (=
(move-rope [[-1 0] [0 0]] [0 -1])
[[-1 -1] [0 0]])))
(testing "horizontal"
(is (=
(move-rope [[0 1] [0 0]] [1 0])
[[1 1] [0 0]]))
(is (=
(move-rope [[0 -1] [0 0]] [1 0])
[[1 -1] [0 0]]))
(is (=
(move-rope [[0 1] [0 0]] [-1 0])
[[-1 1] [0 0]]))
(is (=
(move-rope [[0 -1] [0 0]] [-1 0])
[[-1 -1] [0 0]])))
)
(testing "diagonal movements"
(is (=
(move-rope [[1 1] [0 0]] [0 1])
[[1 2] [1 1]]))
(is (=
(move-rope [[1 1] [0 0]] [1 0])
[[2 1] [1 1]]))
(is (=
(move-rope [[-1 1] [0 0]] [0 1])
[[-1 2] [-1 1]]))
(is (=
(move-rope [[-1 1] [0 0]] [-1 0])
[[-2 1] [-1 1]]))
(is (=
(move-rope [[1 -1] [0 0]] [0 -1])
[[1 -2] [1 -1]]))
(is (=
(move-rope [[1 -1] [0 0]] [1 0])
[[2 -1] [1 -1]]))
(is (=
(move-rope [[-1 -1] [0 0]] [0 -1])
[[-1 -2] [-1 -1]]))
(is (=
(move-rope [[-1 -1] [0 0]] [-1 0])
[[-2 -1] [-1 -1]]))
)
)
(ns edition2022.day9
(:require [clojure.string :as str]))
(def example "R 4\nU 4\nL 3\nD 1\nR 4\nD 1\nL 5\nR 2")
(def example-lines (str/split-lines example))
(def example-lines2 (str/split-lines "R 5\nU 8\nL 8\nD 3\nR 17\nD 10\nL 25\nU 20\n"))
(defn expand-move [[direction times]]
(->> (cond
(= direction "R") [1 0]
(= direction "L") [-1 0]
(= direction "U") [0 1]
(= direction "D") [0 -1])
(iterate identity)
(take (Integer/parseInt times))))
(defn expand-moves [lines]
(->> lines
(map #(str/split % #" "))
(map expand-move)
(apply concat)
))
(defn update-position [pos move]
[(+ (first move) (first pos)) (+ (second move) (second pos))])
(defn tail-head-distance [tail head]
(->> (interleave head tail)
(partition 2)
(map #(reduce - %))
(into [])))
(defn update-tail [tail new-head]
(let [new-distance (tail-head-distance tail new-head)]
(cond
(or (= [2 1] new-distance) (= [1 2] new-distance) (= [2 2] new-distance)) (update-position tail [1 1])
(or (= [-2 1] new-distance) (= [-1 2] new-distance) (= [-2 2] new-distance)) (update-position tail [-1 1])
(or (= [2 -1] new-distance) (= [1 -2] new-distance) (= [2 -2] new-distance)) (update-position tail [1 -1])
(or (= [-2 -1] new-distance) (= [-1 -2] new-distance) (= [-2 -2] new-distance)) (update-position tail [-1 -1])
(= [2 0] new-distance) (update-position tail [1 0])
(= [0 2] new-distance) (update-position tail [0 1])
(= [-2 0] new-distance) (update-position tail [-1 0])
(= [0 -2] new-distance) (update-position tail [0 -1])
:else tail)))
(defn move-rope
([rope move] (move-rope rope move 0 rope))
([rope move knot prev-rope]
(if (= (count rope) (inc knot))
rope
(let [head (nth prev-rope knot)
tail (nth rope (inc knot))
new-head (if (= knot 0) (update-position head move) (nth rope knot))
new-tail (update-tail tail new-head)
]
(recur (assoc rope knot new-head (inc knot) new-tail) move (inc knot) rope)))
))
(defn execute-moves ([lines] (execute-moves lines 2))
([lines rope-length]
(loop [moves (expand-moves lines)
rope (into [] (repeat rope-length [0 0]))
tail-visited (vector)]
(if (empty? moves)
tail-visited
(let [next-move (first moves)
new-rope (move-rope rope next-move)]
(recur (rest moves) new-rope (conj tail-visited (last new-rope))))))))
(comment
(tail-head-distance [0 1] [0 3])
(tail-head-distance [-2 -1] [-1 -2])
(expand-move ["U" 3])
(expand-moves example-lines)
(count (set (execute-moves example-lines)))
(count (set (execute-moves (str/split-lines (slurp "resources/day9.in")))))
(count (set (execute-moves example-lines2 10)))
(count (set (execute-moves (str/split-lines (slurp "resources/day9.in")) 10)))
(set (execute-moves example-lines2 10))
(execute-moves ["R 4" "U 4"] 10)
(execute-moves [(first example-lines2) (second example-lines2) (nth example-lines2 3)] 10)
(execute-moves ["R 5" "U 8" "L 8" "D 3" "R 17"] 10)
example-lines2
(move-rope [[5 2] [5 1] [3 0] [2 0] [1 0] [0 0] [0 0] [0 0] [0 0] [0 0]] [0 1])
)
L 2
D 2
R 2
U 1
L 1
U 1
R 1
U 2
R 2
U 2
L 2
R 2
U 2
L 2
U 1
R 1
U 1
R 2
U 1
D 2
U 2
L 2
R 1
U 2
R 2
U 2
L 1
D 1
L 1
R 2
L 2
D 1
L 1
R 2
U 2
L 1
U 1
L 2
R 1
L 1
D 2
U 2
L 2
D 1
R 2
D 1
U 2
D 2
L 2
D 1
L 1
R 1
D 2
U 2
L 2
U 1
L 1
U 2
R 2
D 1
U 2
R 2
U 1
L 2
R 2
D 2
U 2
D 2
L 2
D 1
U 2
L 1
R 1
L 1
D 2
U 1
D 1
L 2
D 1
L 1
R 1
U 1
L 2
R 2
U 2
D 2
L 1
R 2
D 1
R 2
D 2
L 1
U 2
R 1
D 2
L 1
D 2
U 2
D 1
U 2
R 1
D 1
L 1
D 2
R 2
U 1
R 1
D 2
L 2
R 2
D 1
R 3
U 1
D 1
U 1
R 2
U 2
R 3
U 3
L 3
D 2
L 3
D 1
L 3
D 3
R 3
D 3
R 3
L 2
D 3
R 1
L 3
U 1
L 1
U 1
L 2
R 3
D 2
U 3
R 3
D 2
L 3
R 3
D 1
L 3
U 1
D 1
L 1
D 2
L 2
U 1
L 1
R 1
U 3
R 2
L 3
U 2
R 2
U 1
D 3
U 1
L 1
U 2
R 1
D 3
R 3
U 3
D 2
U 1
L 1
D 3
L 2
U 3
D 1
R 1
D 1
R 3
U 2
L 1
U 3
R 1
U 2
L 3
R 2
L 1
R 1
U 2
L 1
D 2
L 3
D 3
R 3
D 1
U 3
D 1
R 3
U 2
L 2
D 1
U 1
R 3
L 2
D 2
L 2
D 2
R 1
D 3
L 1
R 2
L 2
R 3
L 1
U 1
D 2
R 2
U 3
R 1
L 2
R 3
U 1
L 3
D 3
L 1
D 1
U 4
R 2
L 1
D 3
U 1
D 3
R 2
L 2
D 2
L 3
U 4
D 4
L 4
U 1
D 2
L 3
R 1
L 1
U 2
D 1
U 3
L 2
R 2
D 2
L 2
R 4
D 1
L 2
R 4
U 4
L 3
R 3
D 1
L 3
U 3
L 1
U 3
L 1
D 4
U 1
R 3
L 2
R 3
D 2
L 4
U 1
D 4
L 2
U 2
D 3
L 2
U 3
R 1
U 1
R 2
U 3
L 1
R 4
D 2
R 1
D 1
L 4
R 3
U 1
D 2
L 3
R 4
L 1
U 1
D 2
U 1
D 3
R 3
L 3
U 1
L 3
R 3
D 2
U 2
L 2
R 1
L 3
U 3
R 4
D 1
U 4
D 1
R 2
D 4
L 2
R 1
L 2
R 1
D 3
U 3
R 1
U 1
R 1
D 2
R 4
D 4
L 3
D 4
R 1
D 1
U 1
L 1
R 1
D 4
L 1
R 1
U 4
R 5
D 4
R 5
U 1
D 1
R 1
U 4
L 3
D 5
U 3
L 2
D 3
R 5
U 1
D 1
R 2
L 1
R 3
D 4
R 5
L 1
U 3
D 3
R 1
D 4
R 1
L 4
R 3
U 1
D 1
U 5
R 2
L 3
U 1
L 4
D 1
R 3
L 4
D 2
R 3
L 5
D 2
L 3
D 2
L 2
R 4
D 1
R 3
L 5
U 2
L 4
D 3
L 2
R 4
D 5
L 5
R 4
U 5
D 2
U 4
D 4
L 3
U 3
L 3
D 1
R 4
D 4
U 3
R 4
L 3
D 2
L 4
D 2
L 4
R 3
L 5
R 2
L 3
R 3
U 4
D 4
L 4
R 2
D 4
U 3
L 3
U 1
D 2
U 5
L 2
D 3
U 1
R 5
D 2
L 3
U 1
D 2
L 2
U 2
R 5
L 4
R 4
L 2
D 3
R 1
U 5
R 2
L 5
U 3
L 3
R 6
D 2
L 2
R 2
U 1
D 6
U 6
D 1
L 3
R 6
U 6
R 3
D 6
R 5
U 5
D 1
R 4
L 2
U 2
R 4
D 6
U 4
R 4
D 6
R 2
U 1
D 5
U 3
R 1
L 2
R 1
U 6
R 1
L 1
U 4
R 1
D 6
U 2
D 5
R 2
D 6
R 3
L 3
U 1
R 3
L 4
D 6
L 3
U 3
D 1
U 4
R 6
L 3
D 2
U 6
R 2
D 4
R 3
D 5
U 2
L 1
D 4
R 1
L 3
R 5
U 4
D 1
L 3
U 4
R 2
D 6
R 4
D 5
R 5
D 3
R 6
L 4
U 2
L 4
U 2
L 5
D 2
R 3
D 2
R 6
U 4
R 5
U 1
R 6
D 4
L 2
D 2
U 2
L 5
R 1
U 2
R 3
U 5
L 3
D 1
L 1
R 1
L 3
U 1
L 4
R 3
L 6
U 4
L 2
D 2
U 7
R 7
U 4
R 5
D 4
L 7
U 5
L 5
U 1
D 5
L 3
R 4
D 3
R 5
L 3
D 3
L 4
U 5
L 4
R 2
L 5
U 4
L 4
D 4
U 5
L 3
U 7
R 2
L 1
U 2
L 7
U 5
R 4
D 5
R 1
L 3
D 6
R 7
L 1
R 5
D 4
U 4
L 7
D 6
U 7
R 4
U 2
R 2
U 2
R 7
D 6
R 4
L 1
R 4
D 3
U 5
R 3
L 5
R 2
L 3
D 2
R 1
D 3
L 7
D 4
L 7
U 7
D 5
R 6
U 7
R 5
D 6
R 5
L 4
U 1
D 2
L 4
D 5
L 5
D 2
L 7
R 2
U 7
L 6
D 3
U 3
D 6
U 1
R 3
L 1
U 7
R 2
D 2
U 3
L 6
D 5
U 5
D 2
R 6
D 3
L 3
R 2
L 6
D 1
L 2
D 1
L 7
U 1
D 2
U 3
L 5
D 7
R 2
L 8
U 7
L 4
U 4
D 1
U 4
D 3
R 8
U 3
L 4
R 1
L 5
R 1
L 1
D 8
R 5
L 2
U 1
L 8
U 8
D 1
R 3
U 1
R 1
U 5
R 4
L 4
U 7
D 1
U 8
L 4
D 7
U 8
L 5
D 2
R 4
L 3
R 2
L 2
D 1
U 4
D 2
L 8
U 1
R 6
D 5
R 7
D 2
U 4
L 4
R 3
U 2
D 8
R 3
L 3
U 2
R 1
D 5
U 2
R 5
D 8
R 7
U 2
L 6
U 2
D 1
L 4
U 1
D 7
U 4
L 3
U 5
R 5
D 4
R 7
U 4
L 6
R 4
U 5
D 7
U 5
D 3
L 5
U 1
L 8
D 8
R 3
L 6
R 6
U 1
R 8
L 8
U 6
R 2
L 6
U 2
L 4
D 1
L 1
U 5
D 3
R 6
D 6
L 7
D 7
L 1
R 7
U 4
L 7
U 6
R 1
L 8
D 6
L 5
U 2
D 7
R 8
D 1
L 6
R 1
L 8
D 3
R 8
L 8
U 7
R 3
U 6
L 2
R 9
L 3
R 9
D 1
L 2
R 7
L 8
U 1
D 9
U 7
L 9
R 1
L 8
D 7
R 4
L 9
U 1
L 2
D 7
R 7
D 5
L 4
D 7
U 9
R 9
D 4
R 6
D 5
L 1
R 8
U 8
L 6
R 4
L 3
U 4
D 7
R 8
D 8
R 2
L 4
R 4
U 1
L 8
U 5
L 9
U 4
R 9
L 1
R 1
D 5
L 5
D 8
U 2
L 4
U 5
D 4
L 1
D 1
R 1
U 9
R 4
D 2
U 6
L 5
R 7
D 9
L 3
U 2
L 8
U 6
D 4
R 1
U 4
R 1
U 6
D 8
U 7
R 5
D 4
R 2
D 6
U 6
R 1
U 3
D 8
U 2
R 1
U 8
D 9
U 3
R 3
D 6
R 8
D 1
L 2
D 2
R 3
D 3
U 3
D 2
R 2
L 5
R 1
U 9
L 9
D 3
R 2
L 10
R 6
L 5
R 4
L 6
R 8
D 2
L 1
R 2
D 4
L 9
D 6
U 2
R 7
U 9
D 5
R 2
L 10
D 7
L 8
U 3
R 4
U 4
L 7
U 10
R 8
L 7
U 10
R 9
D 4
R 2
L 10
R 9
L 4
D 7
L 10
D 5
U 4
R 3
L 7
D 3
L 3
R 3
D 10
R 2
L 6
D 5
R 10
L 7
U 1
D 6
L 3
D 4
L 3
D 7
R 10
U 6
R 2
U 5
R 7
U 3
R 2
U 6
R 5
L 9
R 5
D 3
U 4
L 5
R 6
U 1
L 6
U 7
D 10
R 10
U 9
L 10
D 10
R 6
L 1
U 8
R 10
U 8
R 10
U 1
D 8
U 10
R 9
D 8
R 4
D 10
L 4
U 9
L 1
D 3
R 1
L 3
D 1
L 9
R 5
D 7
R 3
L 4
R 8
U 6
D 7
U 3
R 1
D 8
L 3
R 9
U 8
R 11
D 5
L 5
U 3
R 6
U 10
R 8
D 1
U 3
D 1
R 11
D 8
U 11
R 7
U 6
R 7
U 6
L 7
D 4
U 10
L 4
U 1
L 10
D 3
R 3
U 9
L 11
U 10
R 6
U 10
R 10
D 9
L 10
R 6
L 2
R 6
L 1
D 10
U 8
D 11
U 2
L 9
U 7
R 8
L 10
R 11
D 4
L 9
R 3
U 1
L 8
D 1
L 9
U 8
D 8
U 5
R 6
D 5
R 9
D 1
L 11
R 4
D 11
R 9
L 11
R 1
U 5
L 3
D 4
R 6
D 9
R 4
L 7
U 3
D 6
U 8
D 1
U 8
D 5
U 11
R 7
U 1
L 1
U 5
L 4
D 1
R 1
L 8
U 9
D 10
U 4
L 1
R 4
D 11
R 8
D 8
R 11
D 12
U 3
L 12
U 10
L 9
R 11
D 10
R 5
D 12
U 6
L 12
R 3
D 7
U 11
L 6
U 5
R 8
D 3
U 8
D 8
R 10
D 12
L 4
R 10
L 10
U 1
L 7
R 10
L 7
U 4
R 1
L 10
R 8
D 11
L 2
U 2
L 6
U 9
R 10
L 2
R 10
U 4
R 9
D 7
L 1
U 7
L 12
D 1
L 9
U 7
L 8
R 12
L 3
D 9
U 7
L 11
D 6
R 4
D 2
R 11
U 10
R 8
D 12
U 10
R 4
L 11
R 2
U 11
L 7
R 6
L 12
R 5
U 7
L 6
R 12
D 6
R 2
L 10
U 4
D 5
U 11
R 3
D 10
L 2
U 9
L 3
D 6
U 10
L 3
U 10
L 7
R 8
U 10
D 3
R 3
L 12
D 12
L 9
R 2
D 2
R 9
L 4
D 5
L 2
R 12
D 2
R 4
U 2
D 4
U 3
R 13
L 3
U 9
R 5
U 2
D 8
L 7
D 10
L 1
U 2
R 13
D 11
L 7
D 6
L 11
R 12
U 2
D 9
R 11
U 9
D 9
L 2
D 13
U 3
L 7
D 3
L 10
R 5
U 4
L 5
U 8
L 4
U 11
R 3
L 3
D 1
L 12
D 8
R 12
L 1
U 6
D 2
U 13
L 5
U 4
R 12
L 11
U 1
D 3
U 11
D 1
R 2
L 6
D 11
R 5
D 7
R 2
U 9
L 5
R 4
U 4
R 9
U 9
L 9
U 3
R 10
L 5
R 5
U 13
D 2
U 2
L 3
R 1
U 11
D 10
L 7
D 8
R 10
U 10
L 13
U 3
L 9
D 2
R 13
U 2
D 10
U 8
L 5
U 1
D 10
L 11
R 5
D 8
L 11
D 3
R 13
D 11
L 8
D 6
L 3
U 13
L 9
U 8
R 8
U 11
D 1
U 7
D 2
R 8
L 4
D 6
U 10
L 6
R 2
D 8
R 5
L 7
U 4
D 9
U 4
D 12
L 12
R 3
L 12
D 7
L 3
U 10
D 3
U 5
R 3
U 4
L 4
R 9
L 8
R 11
D 5
R 10
D 13
U 1
L 4
D 5
R 13
U 1
R 8
U 9
D 2
R 8
D 4
U 14
R 14
D 13
U 2
R 1
U 3
D 11
L 3
U 2
D 10
L 6
U 9
R 13
D 10
U 13
D 4
L 11
D 9
U 6
L 6
U 6
D 4
L 7
D 14
L 11
D 1
L 12
R 2
L 10
U 3
D 5
U 12
D 6
U 6
D 3
U 8
R 3
D 11
R 7
D 4
R 3
U 12
R 10
D 9
U 12
R 6
L 13
D 1
L 3
U 1
R 14
L 8
D 11
L 5
U 10
L 12
D 9
R 11
L 14
D 8
L 2
R 9
D 7
U 4
L 9
D 9
U 6
D 5
R 5
L 10
R 12
L 13
U 8
L 2
D 3
L 8
U 3
R 14
D 9
U 8
D 7
U 2
L 5
R 11
U 12
L 3
U 13
D 4
R 9
U 8
D 14
R 14
L 5
D 4
U 12
L 1
D 11
R 1
U 12
D 1
U 9
L 14
D 4
R 15
D 10
U 14
R 13
U 11
D 8
L 1
U 5
R 2
D 10
U 9
R 11
D 2
L 15
R 3
U 2
D 4
U 15
D 8
L 6
D 1
L 4
U 2
D 11
R 6
U 2
R 13
U 4
L 5
D 2
R 5
U 10
R 4
D 1
R 9
D 11
L 13
U 13
R 2
L 3
R 7
U 10
R 14
L 15
R 1
U 12
D 6
R 10
L 12
R 13
D 11
U 15
R 8
L 12
D 6
R 10
D 4
L 1
R 5
L 10
U 2
R 1
L 9
D 15
R 7
U 8
D 8
L 1
D 14
U 5
D 4
L 1
R 6
L 15
U 13
D 6
L 5
D 13
R 9
D 7
L 15
R 2
D 14
R 12
D 13
L 6
U 5
L 13
U 16
L 3
D 12
L 13
U 11
L 5
U 6
D 5
L 15
D 2
R 6
L 2
R 5
L 6
R 16
D 4
L 10
R 9
L 9
D 5
R 6
D 8
U 6
D 1
R 4
U 6
D 10
R 4
L 12
D 10
R 2
D 5
U 15
R 12
U 6
D 15
R 5
D 1
L 9
U 16
R 3
D 6
L 1
R 12
D 12
U 3
R 1
D 2
L 11
R 7
D 7
U 10
L 8
U 15
L 7
U 12
D 10
R 2
L 8
R 12
D 16
R 13
L 15
U 1
R 1
U 13
L 6
R 12
L 5
D 5
U 12
D 4
L 7
R 11
L 12
U 16
D 11
U 7
L 1
U 11
D 7
U 14
D 14
R 10
D 4
R 5
D 2
R 13
L 13
D 6
L 16
R 1
L 4
D 3
U 15
R 1
U 2
D 2
U 2
D 3
U 7
D 16
U 11
L 8
R 1
D 6
U 1
R 5
L 6
U 5
D 3
L 13
U 8
L 11
D 17
U 12
L 16
U 1
D 6
U 17
D 7
U 12
R 3
U 6
L 10
R 1
L 14
U 11
L 8
U 10
L 14
D 4
R 3
L 14
D 13
L 17
R 12
U 9
D 7
U 2
R 10
L 16
U 9
R 17
D 14
U 9
L 13
R 13
L 5
U 14
L 4
R 10
U 2
L 9
D 17
L 17
U 9
D 9
L 4
U 15
L 2
U 17
R 1
L 5
R 2
U 5
R 5
L 17
R 4
U 12
R 11
L 17
U 11
D 15
U 10
R 7
D 9
L 15
U 1
D 6
L 13
R 7
D 12
L 6
U 14
R 11
D 2
L 4
R 14
L 17
R 2
D 1
R 13
L 12
D 12
L 16
D 14
L 4
R 14
U 15
L 17
U 9
D 13
R 6
D 2
R 4
L 8
U 16
R 10
L 6
U 7
D 4
L 15
D 2
U 14
L 5
R 8
L 2
D 14
U 7
R 5
U 13
L 9
D 2
U 18
R 9
U 13
R 9
L 5
D 10
U 18
D 13
U 13
D 14
L 3
R 2
L 13
D 11
R 17
L 15
D 3
L 1
U 10
L 14
D 15
L 13
R 12
D 4
L 1
D 2
R 16
D 10
U 11
L 12
U 1
D 2
R 3
U 2
R 12
L 6
D 1
L 13
R 11
U 8
L 8
D 10
R 5
U 6
L 7
R 4
U 9
L 6
D 10
L 14
U 11
D 1
L 7
R 3
U 16
L 11
D 13
L 14
U 10
L 3
R 12
U 9
R 11
U 10
L 8
D 5
U 9
L 16
R 17
D 3
R 5
D 13
U 8
R 5
U 16
R 2
U 13
D 16
L 9
D 14
L 15
U 15
L 1
D 8
L 7
D 1
R 11
D 16
R 9
U 14
L 18
U 4
D 14
L 14
D 9
R 6
L 1
R 4
L 11
D 17
L 9
R 10
L 19
U 12
D 15
R 9
L 3
D 13
R 6
D 19
R 9
D 1
L 13
D 8
L 19
U 14
R 18
D 10
R 7
L 18
U 18
D 5
L 1
U 10
D 10
U 19
R 14
L 7
D 19
U 10
L 3
U 17
D 1
L 5
U 7
R 16
D 3
U 8
D 17
U 17
D 17
L 14
D 19
R 8
D 14
L 7
U 7
L 5
D 6
L 1
U 14
L 10
U 15
L 7
D 14
L 11
R 5
D 14
L 13
R 2
L 19
D 7
R 8
L 16
U 4
L 9
U 17
R 15
L 8
U 15
D 5
R 8
L 16
R 6
D 17
U 19
D 19
R 10
D 4
U 12
D 2
L 18
D 13
L 7
U 17
L 13
D 5
U 2
L 6
R 4
U 19
L 4
D 8
U 7
L 3
R 4
U 17
L 1
U 6
R 9
D 16
R 4
D 9
R 9
L 11
U 17
D 18
U 18
R 16
L 7
R 18
U 5
L 4
D 7