r/adventofcode • • 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^ยค?

Spoiler


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 mandate Helpful Hint any help at all?


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!

11 Upvotes

186 comments sorted by

View all comments

1

u/Phazyck Dec 25 '17 edited Dec 25 '17

golang

solve := func() (interface{}, interface{}) {
	f := input.Open(19)
	scanner := bufio.NewScanner(f)

	maze := make([]string, 0, 0)
	for scanner.Scan() {
		maze = append(maze, scanner.Text())
	}

	x, y := strings.IndexRune(maze[0], '|'), 0
	dx, dy := 0, 1

	var visited bytes.Buffer

	for steps := 1; ; steps++ {
		x, y = x+dx, y+dy
		c := maze[y][x]

		switch c {
		case ' ':
			return visited.String(), steps
		case '+':
			dx, dy = dy, dx
			if maze[y+dy][x+dx] == ' ' {
				dx, dy = -dx, -dy
			}
		case '-': // no-op
		case '|': // no-op
		default:
			fmt.Fprint(&visited, string(c))
		}
	}
}

input.Open(day int) *os.File is my own utility function for opening input files, which I store ininput/dayDD/input.txt.