Skip to content

Instantly share code, notes, and snippets.

@allanberger
Created February 15, 2017 14:04
Show Gist options
  • Save allanberger/21bf95ba9f89b8e29b4db699a5f68600 to your computer and use it in GitHub Desktop.
Save allanberger/21bf95ba9f89b8e29b4db699a5f68600 to your computer and use it in GitHub Desktop.
Advent of Code 2016 - Day 2 - Clojure
(ns adventofcode.days.day2
(:require [clojure.string :as str]
[clojure.java.io :as io]))
(def input1 "DLRRRRLRLDRRRURRURULRLLULUURRRDDLDULDULLUUDLURLURLLDLUUUDUUUULDRDUUDUDDRRLRDDDUDLDLLRUURDRULUULRLRDULULLRLRLRLDRLUULDLDDDDRRLRUUUDDRURRULLLRURLUURULLRLUDDLDRUULDRURULRRRLLLRDLULDRRDDUDLURURLDULDRDRLDDUURRDUDDRDUURDULDUURDUDRDRULDUDUULRRULUUURDUURUDLDURDLRLURUUDRRDLRUDRULRURLDLLDLLRRDRDRLRRRULDRRLDUURLUUDLUUDDLLRULRDUUDURURLUURDRRRUDLRDULRRRLDRDULRUUDDDLRDUULDRLLDRULUULULRDRUUUULULLRLLLRUURUULRRLDDDRULRRRUDURUR")
(def input2 "DLLU")
(def input3 "RULR")
(defn input [path]
(line-seq (io/reader path)))
(str/trim-newline (str (input "././files/day2_input.txt")))
(def steps (hash-map \U [0 1], \R [1 0], \D [0 -1], \L [-1 0]))
(def keypad (sorted-map 1 [-1 1],
2 [ 0 1],
3 [ 1 1],
4 [-1 0],
5 [ 0 0],
6 [ 1 0],
7 [-1 -1],
8 [ 0 -1],
9 [ 1 -1]))
; steps on x-axis of direction
(first (get steps \D))
; steps on y-axis of direction
(last (get steps \D))
; summarize x-axis entries of input and start
(+ (first (steps \D)) (first (keypad 5)))
; => (+ 0 + 0) = 0
; summarize y-axis entries of input and start
(+ (last (steps \D)) (last (keypad 5)))
; => (+ 0 -1) = -1
(defn x-position
[x]
(+ (first x) (first (keypad 5))))
(defn y-position
[y]
(+ (last y) (last (keypad 5))))
(defn steps-with-coordinates [input]
(->> (map char input)
(map (fn [x] (steps x)))))
(assoc (first (steps-with-coordinates input2)) 0 (x-position (first (steps-with-coordinates input2))))
(assoc (first (steps-with-coordinates input2)) 1 (y-position (first (steps-with-coordinates input2))))
; for each char of input map
; add the matching char coordinates to the new collection
; TODO Update x and y positions in vector or solve via different data structure?
(defn update-positions [input]
(let [x-entry (first (steps-with-coordinates input))]
(assoc x-entry 0 (x-position x-entry)))
(let [y-entry (first (steps-with-coordinates input))]
(assoc y-entry 1 (y-position y-entry))))
; input2 = \D \L \L \U
; => ([0 -1], [-1 0], [-1 0], [0 1])
; if D then ADD the first key of D to first key of 5 [0 0] and the second key of D to second key of 5
; if sum of a coordinate is < -1 "(< x -1)" or > 1 (> x 1) skip and remain last coordinate
; 1 = -1 1
; 2 = 0 1
; 3 = 1 1
; 4 = -1 0
; 5 = 0 0
; 6 = 1 0
; 7 = -1 -1
; 8 = 0 -1
; 9 = 1 -1
;
; {:U [ 0 1]
; :R [ 1 0]
; :D [ 0 -1]
; :L [-1 0]}
;
; 1.
; Start with 5: 0 0
; D: 0 -1 = 8 => 0 -1 (new position 8)
; L: -1 0 = 7 => -1 -1 (new position 7)
; L: -1 0 = 7 => -2 -1 (not possible) => -1 -1 (same position 7)
; U: 0 1 = 4 => -1 0 (new position 4)
;
; 1 2 3
; 4 5 6
; 7 8 9
DLRRRRLRLDRRRURRURULRLLULUURRRDDLDULDULLUUDLURLURLLDLUUUDUUUULDRDUUDUDDRRLRDDDUDLDLLRUURDRULUULRLRDULULLRLRLRLDRLUULDLDDDDRRLRUUUDDRURRULLLRURLUURULLRLUDDLDRUULDRURULRRRLLLRDLULDRRDDUDLURURLDULDRDRLDDUURRDUDDRDUURDULDUURDUDRDRULDUDUULRRULUUURDUURUDLDURDLRLURUUDRRDLRUDRULRURLDLLDLLRRDRDRLRRRULDRRLDUURLUUDLUUDDLLRULRDUUDURURLUURDRRRUDLRDULRRRLDRDULRUUDDDLRDUULDRLLDRULUULULRDRUUUULULLRLLLRUURUULRRLDDDRULRRRUDURUR
RULRUUUDLLUDURDRDDLLRLLUDRUDDRLRRDLDLDRDULDLULURDLUDDDUULURLDRUUURURLLRRDDDUUDRLRLLDLDRDDDRDUDLRDRDLLLDDLDUDDRUDUUDLLLLLDULRLURRRLLURUUULUDRLRLRLURRDRLLLRLLULRLLLDDLRLRDLUUUUUDULULDDULLUDUURDLRUDLRUDLRLLRLDLULRLDUDRURURDLRULDLULULDLLDLDLDLLLUDUDDLRLRRDULLUDRDDLLLDUURDULUDURLLLDRUDDDLRLULDLDRRDDDRDULDDUDRDDULLULRRLRUULRDUDURUDULUDUDURLDRDUUDDRRLRURDRRLRDDDDRUDLUDLDDLRDLUUDLRRURDDLURDLRDLLRDRDLDLDUUUURULUULDDDDLDULUURRRULUDLLLDRULDRURL
RRRLRDLLDUURDRRRLURDUULUDURDRRUUDURURRLDLLDRDLRRURDDUDDURLRUUDDULULRUUDRLUUDDLLDDDLRRRDLLLLLLRRURDULDLURRURRDDLDDDUDURRDURRRLUDRRULLRULDRLULRULDDRLLRDLRDUURULURLUURLRRULDULULUULDUDLRLDRDDRRRUUULULDUURLRLLURRLURDUUDDDRUULDLLLDRUURLRRLLDDUDRDLDDDULDRDDDUDRRLLLULURDUDLLUUURRLDULURURDDLUDLLRLDRULULURDLDRLURDLRRDRRUULLULDLURRDDUDRDDDLDUDLDRRUDRULDLDULRLLRRRRDDRLUURRRRDDLLRUURRLRURULDDULRLULRURRUULDUUDURDRRLRLUDRULDRUULUUDRDURDURRLULDDDULDDLRDURRUUUUUDDRRDLRDULUUDDL
DRRLLRRLULDDULRDDLRLDRURDDUDULURRDLUUULURRRLLRLULURLLRLLDLLUDDLLRDRURRDLDDURRURDRDDUDDDLLRLDLDLDDDDRRRRUDUDLRDUDDURLLRURRDUDLRLLUDDRLDUUDDLLLUDRRRLLDDULUDDRLLUDDULLDDLRLDLRURRLUDDLULULDLUURDLLUDUDRRRRDULUDLRRLRUDDUUDRRLLRUUDRRLDDLRRRUDRRDRRDDUDLULLURRUURLLLDRDDLUDDDUDDRURURDLRUULLRDRUUDRDUDRLULLDURUUULDDLDRDRUDRUDUULDDRLRDRRDRRRRLRLRUULDDUUDDLLLLRRRDUDLRDLDUDDUURLUDURLDRRRDRUDUDRLDLRLDRDDLUDRURLRDRDLDUDDDLRLULLUULURLDDDULDUDDDLDRLDLURULLUDLLDRULDLLLDUL
LDULURUULLUDLDDRLLDURRULRLURLLURLRRLRDLDDRUURULLRUURUURRUDDDLRRLDDLULDURLLRDURDLLLURLDRULLURLRLDRDRULURDULDLLDUULLLDUDULDURLUDRULRUUUUUUDUUDDDLLURDLDLRLRDLULRDRULUUDRLULLURLRLDURDRRDUDDDURLLUUDRRURUDLDUDRLRLDRLLLLDLLLURRUDDURLDDRULLRRRRDUULDLUDLDRDUUURLDLLLDLRLRRLDDULLRURRRULDLURLURRRRULUURLLUULRURDURURLRRDULLDULLUDURDUDRLUULULDRRDLLDRDRRULLLDDDRDUDLRDLRDDURRLDUDLLRUDRRRUDRURURRRRDRDDRULRRLLDDRRRLDLULRLRRRUDUDULRDLUDRULRRRRLUULRULRLLRLLURDLUURDULRLDLRLURDUURUULUUDRLLUDRULULULLLLRLDLLLDDDLUULUDLLLDDULRDRULURDLLRRDRLUDRD
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment