This commit is contained in:
kplaczek
2021-12-04 10:31:35 +01:00
parent d09dcfb2b4
commit fd05fbc8e5
6 changed files with 731 additions and 3 deletions

58
04/part1.php Normal file
View File

@@ -0,0 +1,58 @@
<?php
$input = file('input', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$numbers = explode(',', array_shift($input));
$input = array_map(fn($line) => explode(' ', str_replace(' ', ' ', trim($line))), $input);
$cards = array_chunk($input, 5);
foreach ($numbers as $number) {
$cards = checkNumber($cards, $number);
if (($cardId = isWinner($cards)) !== false) {
echo calculateScore($cards[$cardId], $number);
break;
}
}
function calculateScore($card, $number)
{
echo array_sum(array_map('array_sum', $card)) * $number;
}
function isWinner($cards)
{
foreach ($cards as $cardIndex => $card) {
foreach ($card as $rowId => $cardRow) {
if (array_sum(array_column($card, $rowId)) === 0) {
return $cardIndex;
}
if (array_sum($cardRow) === 0) {
return $cardIndex;
}
}
$diagonal1 = $diagonal2 = false;
for ($i = 0; $i < 5; $i++) {
$diagonal1 += (int)$card[$i][$i];
$diagonal2 += (int)$card[$i][4 - $i];
}
if ($diagonal1 === 0) {
return $cardIndex;
}
if ($diagonal2 === 0) {
return $cardIndex;
}
}
return false;
}
function checkNumber($cards, $number)
{
foreach ($cards as $cardIndex => $card) {
foreach ($card as $rowId => $cardRow) {
if (($index = array_search($number, $cardRow)) !== false) {
$cards[$cardIndex][$rowId][$index] = '';
}
}
}
return $cards;
}