# aoc 2016/1 &fras $ input.txt °/$"_, _" ⍜⇌↘₁ ≡◇⊃[⍥¯⊙i ⨂"LR"⊢|⋕↘1] # pre-process \(⊂⊢⊙⊣⊸⍜∩⊢×) # directions at each token ⬚0/(+⊙/×) # move in direction +∩⌵°ℂ $Part₁ # the idea is to represent our position # as a complex number (2d vector). rotate by # 90 or -90 degrees when you encounter L or R # by multiplying by i or -i on the direction # vector. # this can be done by folding with the initial # values i (direction) and 0 (position), pattern- # matching the next token on L or R and recognizing # them by ⍩. # once the direction vector has been rotated # accordingly, ⍥\+⋕ to add the direction unit vector # to the position vector n times for token Ln or Rn. # # we can see many awesome pieces of functional and # array oriented code! &fras $ input.txt °/$"_, _" ⍜⇌↘₁ ∧◇(⍥(⊙⊂⟜⊣\+)⋕ ⍣( ⍩⊙⍜⊢(×i) °(⊂@L) | ⍩⊙⍜⊢(ׯi) °(⊂@R)) )⊙i_0⊙[] ⌵+°ℂ ⊡⊸(⊢⍖=1⧆)⇌ ◌ $Part₂ # for this part, we only need to keep track of # each intermediate step (all our positions). # this by modifying the ⍥-loop to keep a log. # then we can find the first reoccurring position # using the new ⧆.