Eric Wastl has created a series of holiday themed programming exercises over at Advent of Code and I thought it would be fun to post my solutions to these exercises now that they have all been released. I'll be posting more of my solutions as I have time to write up my methodologies (and complete some of them).
The first set of puzzles involves Santa navigating an infinite high-rise building with and infinite basement. Santa is given instructions in the form of a string of parentheses which tell him to go up or down one floor.
Part 1
Problem
Santa is trying to deliver presents in a large apartment building, but he can't find the right floor - the directions he got are a little confusing. He starts on the ground floor (floor
0
) and then follows the instructions one character at a time.An opening parenthesis,
(
, means he should go up one floor, and a closing parenthesis,)
, means he should go down one floor.The apartment building is very tall, and the basement is very deep; he will never find the top or bottom floors.
Methodology
Both of these solutions follow the same basic formula. First, I read in the
input that I've saved in source/day1source.txt
and assign it to a variable.
Next, I create a variable to hold the value of the current floor. I then use a
loop to loop through each character in the string. For each character I check if
the instruction is to go up one floor and if it is, I increment the floor
variable by 1, otherwise I decrement the floor
variable by 1. When the loop
completes going through all the characters, I print out the final floor
variable value.
Solutions
Node.js
var fs = require("fs");
var source = fs.readFileSync("../source/day1source.txt").toString();
var end = source.length;
var floor = 1;
for (var i = 0; i < end; i++) {
if (source.charAt(i) === "(") {
floor++;
} else {
floor--;
}
}
console.log("Santa ends up on floor " + floor);
Python
filename = '../source/day1source.txt'
with open(filename) as f:
source = [line.rstrip('\n') for line in open(filename)]
floor = 0
for line in source:
for char in line:
if char == '(':
floor = floor + 1
else:
floor = floor - 1
print "Santa ends up on floor", floor
Part 2
Problem
Now, given the same instructions, find the position of the first character that causes him to enter the basement (floor
-1
). The first character in the instructions has position1
, the second character has position2
, and so on.
Methodology
To solve this, I modified my code to detect when the floor
variable equals
-1
and prints out the current position in the string.
Solutions
Node.js
var fs = require("fs");
var source = fs.readFileSync("../source/day1source.txt").toString();
var end = source.length;
var floor = 1;
for (var i = 0; i < end; i++) {
if (source.charAt(i) === "(") {
floor++;
} else {
floor--;
}
if (floor === -1) {
console.log(
"The character " +
source.charAt(i) +
" at position " +
i +
" sent santa to the basement.",
);
}
}
Python
filename = '../source/day1source.txt'
with open(filename) as f:
source = [line.rstrip('\n') for line in open(filename)]
floor = 0
count = 0
for line in source:
for char in line:
if char == '(':
floor = floor + 1
else:
floor = floor - 1
count = count + 1
if floor == -1:
print "Santa enters the basement on instruction", count
break