Day 6: Guard Gallivant
Megathread guidelines
- Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
- You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL
FAQ
- What is this?: Here is a post with a large amount of details: https://programming.dev/post/6637268
- Where do I participate?: https://adventofcode.com/
- Is there a leaderboard for the community?: We have a programming.dev leaderboard with the info on how to join in this post: https://programming.dev/post/6631465
Uiua
Part one was simple enough. Part two nearly made me give up.
Part two has the most ugly and least performant code I’ve made in uiua so far but it gets the job done and that’s all I care about for now.
Run with example input here
RotateClock ← ( ⊙⊙(⍉⇌) ⊙(⇌⍜(⊡0)(-⊙(⧻⊡0.)+1)) ↻¯1 ) RotateCounter ← ( ⊙⊙(⇌⍉) ⊙(⍜(⊡0)(-⊙(⧻.)+1)⇌) ↻1 ) NewPos ← ( ⊙⍜(⊙⊡:)(-1+⊙(⊗@#)⟜↘⊙.)⟜°⊟ ⍜(⊡1)⋅ ) MarkPath ← ( RotateClock ⍢( # replace characters up til next '#' ⊙(⊙⍜(↘⊙⊡:)(⍜(↙)(▽:@^⧻)⊗@#.)⟜°⊟ NewPos ) RotateCounter | ⋅(≠0⊡0)) ◌◌ ) PartOne ← ( &rs ∞ &fo "input-6.txt" ⊜∘≠@\n. # maybe make compatible with # non-up facing inputs ♭⊚=@^. [0 1 2 3] MarkPath &fwa "test.txt" json. /+/+=@^ ) PartTwo ← ( &rs ∞ &fo "input-6.txt" ⊜∘≠@\n. # maybe make compatible with # non-up facing inputs ♭⊚=@^. [0 1 2 3] ◡MarkPath ⊙:: # rotate the field to match the intital state ⊙⊙( ⊙(⊚=@#) ⍢(⇌⍉|¬≍⊚=@#) ⊙◌ ) ⊙⊙(⊚=@^.) ⊙⊙⊙¤∩¤ ⊞(⊙⊙(⍜⊡⋅@#) RotateClock ⊙NewPos ¤¯1_¯1_¯1 ⍢(⊙◡(⊂⊢) ⊂ ⊙(RotateCounter ⊙NewPos ) | =1+⊙(∈↘1⇌)◡⋅(≠129⊡2)⊙(⊂⊢)) # 129 = length of input array. Hardcoded because # the condition block doesn't seem to get the # input array passed to it so the length can't # be read dynamically ⊙(⊂⊢) ∈ ⊙◌ ) /+♭ ) &p "Day 6:" &pf "Part 1: " &p PartOne &pf "Part 2: " &p PartTwo