Пример #1
0
        }
    }
    return array($totalLit, $totalBrightness);
}
$input = explode("\n", trim(file_get_contents(__DIR__ . '/files/input_06.txt')));
$lights = $lights2 = turn(array(), 'off', 0, 0, 999, 999);
foreach ($input as $instruction) {
    preg_match('/(turn off|turn on|toggle) (\\d{1,3}),(\\d{1,3}) through (\\d{1,3}),(\\d{1,3})/', $instruction, $matches);
    list($line, $action, $startX, $startY, $endX, $endY) = $matches;
    switch ($action) {
        case 'turn on':
            $lights = turn($lights, 'on', $startX, $startY, $endX, $endY);
            $lights2 = turn($lights2, 'increase', $startX, $startY, $endX, $endY);
            break;
        case 'turn off':
            $lights = turn($lights, 'off', $startX, $startY, $endX, $endY);
            $lights2 = turn($lights2, 'decrease', $startX, $startY, $endX, $endY);
            break;
        case 'toggle':
            $lights = turn($lights, 'toggle', $startX, $startY, $endX, $endY);
            $lights2 = turn($lights2, 'increase', $startX, $startY, $endX, $endY, 2);
            break;
    }
}
list($lit, $brightness) = countLights($lights, $lights2);
echo sprintf('------ Day 6 ------' . "\r\n");
echo sprintf('See the instruction on http://adventofcode.com/day/6' . "\r\n\r\n");
echo sprintf('--- Part 1 --- ' . "\r\n\r\n");
echo sprintf('%d lights are lit' . "\r\n\r\n", $lit);
echo sprintf('--- Part 2 --- ' . "\r\n\r\n");
echo sprintf('The total brightness of all lights combined is %d' . "\r\n\r\n", $brightness);
Пример #2
0
foreach ($lines as $i => $line) {
    $chars = str_split($line);
    $grid[$i + 1] = [];
    foreach ($chars as $j => $char) {
        $grid[$i + 1][$j + 1] = $char === '#';
    }
}
$grid1 = updateGrid($grid, 100);
printf('ans#18.1: %u' . PHP_EOL, countLights($grid1));
// 4 corners stuck @ on
$stuck = [[1, 1], [1, count($grid)], [count($grid), 1], [count($grid), count($grid)]];
foreach ($stuck as $xy) {
    $grid[$xy[0]][$xy[1]] = true;
}
$grid2 = updateGrid($grid, 100, $stuck);
printf('ans#18.2: %u' . PHP_EOL, countLights($grid2));
function updateGrid($grid, $num, $stuck = [], $show = false)
{
    if ($num < 1) {
        return $grid;
    }
    $newGrid = $grid;
    $xnum = count($grid);
    $ynum = count(reset($grid));
    foreach ($grid as $i => $row) {
        foreach ($row as $j => $on) {
            if (in_array([$i, $j], $stuck)) {
                continue;
            }
            $minX = max(1, $i - 1);
            $maxX = min($xnum, $i + 1);
Пример #3
0
    $count = 0;
    foreach ($grid as $row) {
        foreach ($row as $cell) {
            if ($cell) {
                $count++;
            }
        }
    }
    return $count;
}
function calculateLightStrength($grid)
{
    $strength = 0;
    foreach ($grid as $row) {
        foreach ($row as $cell) {
            $strength = $strength + $cell;
        }
    }
    return $strength;
}
$instructions = getInstructions("6input.txt");
$grid = generateGrid();
foreach ($instructions as $instruction) {
    processInstructionsFromSanta($instruction, $grid);
}
echo "Lights count: " . countLights($grid) . "<br>";
$grid = generateGrid(0);
foreach ($instructions as $instruction) {
    processInstructionsFromSanta($instruction, $grid, true);
}
echo "Light strength: " . calculateLightStrength($grid);