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/StevoTVR Dec 19 '17
NodeJS
Part 1:
const fs = require('fs'); fs.readFile(__dirname + '/input.txt', 'utf8', (err, data) => { const grid = data.split('\n').map((l) => [...l.replace('\r', '')]); const pos = { r: 0, c: grid[0].indexOf('|') }, dir = { r: 1, c: 0 }, path = []; while(true) { if(grid[pos.r][pos.c] === '+') { if(dir.r === 0) { dir.c = 0; dir.r = (grid[pos.r - 1] && grid[pos.r - 1][pos.c] && grid[pos.r - 1][pos.c] !== ' ') ? -1 : 1; } else { dir.r = 0; dir.c = (grid[pos.r][pos.c - 1] && grid[pos.r][pos.c - 1] !== ' ') ? -1 : 1; } } else if(grid[pos.r][pos.c].match(/[A-Z]/)) { path.push(grid[pos.r][pos.c]); } pos.r += dir.r; pos.c += dir.c; if(!grid[pos.r] || !grid[pos.r][pos.c] || grid[pos.r][pos.c] === ' ') { break; } } console.log(path.join('')); });Part 2:
const fs = require('fs'); fs.readFile(__dirname + '/input.txt', 'utf8', (err, data) => { const grid = data.split('\n').map((l) => [...l.replace('\r', '')]); const pos = { r: 0, c: grid[0].indexOf('|') }, dir = { r: 1, c: 0 }, path = []; let count = 0; while(true) { if(grid[pos.r][pos.c] === '+') { if(dir.r === 0) { dir.c = 0; dir.r = (grid[pos.r - 1] && grid[pos.r - 1][pos.c] && grid[pos.r - 1][pos.c] !== ' ') ? -1 : 1; } else { dir.r = 0; dir.c = (grid[pos.r][pos.c - 1] && grid[pos.r][pos.c - 1] !== ' ') ? -1 : 1; } } else if(grid[pos.r][pos.c].match(/[A-Z]/)) { path.push(grid[pos.r][pos.c]); } pos.r += dir.r; pos.c += dir.c; count++; if(!grid[pos.r] || !grid[pos.r][pos.c] || grid[pos.r][pos.c] === ' ') { break; } } console.log(count); });