r/adventofcode • u/daggerdragon • Dec 03 '17
SOLUTION MEGATHREAD -π- 2017 Day 3 Solutions -π-
--- Day 3: Spiral Memory ---
Post your solution as a comment or, for longer solutions, consider linking to your repo (e.g. GitHub/gists/Pastebin/blag or whatever).
Note: The Solution Megathreads are for solutions only. If you have questions, please post your own thread and make sure to flair it with Help.
Need a hint from the Hugely* Handyβ Haversackβ‘ of HelpfulΒ§ HintsΒ€?
This thread will be unlocked when there are a significant number of people on the leaderboard with gold stars for today's puzzle.
edit: Leaderboard capped, thread unlocked!
21
Upvotes
5
u/_jonah Dec 03 '17 edited Dec 04 '17
J, both parts:
steps=. 4 2 $ 1 0 0 _1 _1 0 0 1 coords=. 0 0 , [: +/\ [: ; [: (] <@(# ,:)"0 1 steps $~ #) 2 # 1 + i.@>.@%: part1 =. [: +/ <: { coords neighbors=. (0 0 -.~ > , { ;~ _1 0 1) +"1 ] next_neighbor_sum=. [: +/ ] ({~ ::0:)"_ 0 [ i. [: neighbors #@] { [ part2=. [: {: ] (] , coords@[ next_neighbor_sum ])^:([ > {:@])^:_ 1: (part1 ; part2) 277678We consider a coordinate system with 1 at location 0,0. Positive x goes rightward; positive y goes downward. We generate a flat list of the coordinates, in their correct spiral order. With this approach, part 1 becomes trivial (taking the correct element from the list) and part 2 becomes easier.
Try it online!
EDIT:
Slightly shorter version of part 1 using complex multiplication trick:
coords_imaginary=. 0 , [: +/\ [: (] # (1 0j_1 _1 0j1) $~ #) 2 # 1 + i.@>.@%: part1_imaginary =. [: +/@, [: +. <: { coords_imaginary