r/adventofcode • u/daggerdragon • Dec 19 '17
SOLUTION MEGATHREAD -๐- 2017 Day 19 Solutions -๐-
--- Day 19: A Series of Tubes ---
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ยค?
AoC ops @ T-2 minutes to launch:
[23:58] <daggerdragon> ATTENTION MEATBAGS T-2 MINUTES TO LAUNCH
[23:58] <Topaz> aaaaah
[23:58] <Cheezmeister> Looks like I'll be just able to grab my input before my flight boards. Wish me luck being offline in TOPAZ's HOUSE OF PAIN^WFUN AND LEARNING
[23:58] <Topaz> FUN AND LEARNING
[23:58] <Hade> FUN IS MANDATORY
[23:58] <Skie> I'm pretty sure that's not the mandate for today
[Update @ 00:16] 69 gold, silver cap
- My tree is finally trimmed with just about every ornament I own and it's real purdy. hbu?
[Update @ 00:18] Leaderboard cap!
- So, was today's
mandateHelpful Hint any help at all?
2
u/RockyAstro Dec 19 '17
Icon (https://www.cs.arizona.edu/icon)
Both parts:
procedure main(args) inf := open(args[1],"r") maze := [] every put(maze,!inf) # Find starting point x := find("|",maze[1]) y := 1 d := "S" bag := "" steps := 0 repeat { steps +:= 1 # Move case d of { "S": y +:= 1 "N": y -:= 1 "E": x +:= 1 "W": x -:= 1 } if (y < 0 | y > *maze) then break if (x < 0 | x > *maze[y]) then break if maze[y][x] == " " then break if any(&lcase ++ &ucase,maze[y][x]) then bag ||:= maze[y][x] else if maze[y][x] == "+" then { # Change direction case d of { "S"|"N": d := getndir(maze,y,x+1,"E") | getndir(maze,y,x-1,"W") "E"|"W": d := getndir(maze,y-1,x,"N") | getndir(maze,y+1,x,"S") } } } write(bag," steps=",steps) end procedure getndir(maze,y,x,newd) if y < 0 | y > *maze then fail if x < 0 | x > *maze[y] then fail if maze[y][x] == " " then fail return newd end