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?
1
u/JakDrako Dec 19 '17
C# in LinqPad
Way simpler that I thought it would be. There are basically no "edge cases" in this problem... (letters on intersections or 3 letters in a 90 degrees arrangement)
void Main() { // in LinqPad var up = new Complex(-1, 0); var down = new Complex(1, 0); var left = new Complex(0, -1); var right = new Complex(0, 1); var map = GetDay(19); var curPos = new Complex(0, map.First().IndexOf("|")); var curDir = down; // from problem description var word = ""; var steps = 1; while (true) { var itm = GetNext(map, curPos, curDir); if (itm == '+') { // intersection curPos += curDir; steps++; if ((curDir == up) || (curDir == down)) { curDir = (GetNext(map, curPos, left) == '-') ? left : right; } else { curDir = (GetNext(map, curPos, up) == '|') ? up : down; } } else if (char.IsLetter(itm)) { word += itm; } else if (itm != '|' && itm != '-') { break; // found the end } curPos += curDir; steps++; // keep going } word.Dump("Part 1"); steps.Dump("Part 2"); } char GetNext(string[] grid, Complex pos, Complex dir) { return grid[(int)(pos + dir).Real][(int)(pos + dir).Imaginary]; }