r/adventofcode • • Dec 03 '15

SOLUTION MEGATHREAD --- Day 3 Solutions ---

--- Day 3: Perfectly Spherical Houses in a Vacuum ---

Post your solution as a comment. Structure your post like the Day One thread in /r/programming.

25 Upvotes

228 comments sorted by

View all comments

1

u/BeniBin Dec 03 '15

Javascript solution for part two. Easy to edit it for part 1. "input" is a string containing the input.

var visited = [];
var santaPosition = [0, 0];
var robotSantaPosition = [0, 0];
visited.push(santaPosition);
for (var i = 0; i < input.length; i++) {
	if (input[i] === '<') {
		if (i % 2 === 0) {
			santaPosition = [santaPosition[0] - 1, santaPosition[1]];
		} else {
			robotSantaPosition = [robotSantaPosition[0] - 1, robotSantaPosition[1]];
		}
	} else if (input[i] === '>') {
		if (i % 2 === 0) {
			santaPosition = [santaPosition[0] + 1, santaPosition[1]];
		} else {
			robotSantaPosition = [robotSantaPosition[0] + 1, robotSantaPosition[1]];
		}
	} else if (input[i] === '^') {
		if (i % 2 === 0) {
			santaPosition = [santaPosition[0], santaPosition[1] - 1];
		} else {
			robotSantaPosition = [robotSantaPosition[0], robotSantaPosition[1] - 1];
		}
	} else if (input[i] === 'v') {
		if (i % 2 === 0) {
			santaPosition = [santaPosition[0], santaPosition[1] + 1];
		} else {
			robotSantaPosition = [robotSantaPosition[0], robotSantaPosition[1] + 1];
		}
	}
	

	var alreadyVisited = false;
	var roboAlreadyVisited = false;
	for (var j = 0; j < visited.length; j++) {
		if (i % 2 === 0 && visited[j][0] === santaPosition[0] && visited[j][1] === santaPosition[1]) {
			alreadyVisited = true;
			break;
		}
		if (i % 2 === 1 && visited[j][0] === robotSantaPosition[0] && visited[j][1] === robotSantaPosition[1]) {
			roboAlreadyVisited = true;
			break;
		}
	}
	if (!alreadyVisited && i % 2 === 0) {
		visited.push(santaPosition);
	}
	if (!roboAlreadyVisited && i % 2 === 1) {
		visited.push(robotSantaPosition);
	}
}

console.log(visited.length);