} } 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);
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);
$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);