Advent of Code: 2015 – Day 01

Part 1

Problem: Starting at zero, move up one floor for every ‘(‘ and down one floor for every ‘)’.

Solution: Read in the input one character at a time using fgetc, then increment or decrement the current floor.

<?php

declare(strict_types=1);
error_reporting(E_ALL);

$floor = 0;

$fp = fopen('input', 'r');

while (($char = fgetc($fp)) !== false)
{
    if ($char === '(')
    {
        $floor++;
    }
    elseif ($char === ')')
    {
        $floor--;
    }
}

fclose($fp);

print("Final floor: $floor\n");

Part 2

Problem: Find the position of the first character which takes you into the basement.

Solution: As per the previous part, except keep a track of the current position and stop once the current floor is less than zero.

<?php

declare(strict_types=1);
error_reporting(E_ALL);

$floor = 0;
$position = 0;

$fp = fopen('input', 'r');

while (($char = fgetc($fp)) !== false)
{
    $position++;

    if ($char === '(')
    {
        $floor++;
    }
    elseif ($char === ')')
    {
        $floor--;
    }

    if ($floor < 0)
    {
        print("Position of basement: $position\n");
        break;
    }
}

fclose($fp);

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.