day06: Solve puzzles

main
Elis Hirwing 2021-12-06 08:07:09 +01:00
parent 3df8fdc687
commit 84a3c790c5
Signed by: etu
GPG Key ID: D57EFA625C9A925F
5 changed files with 76 additions and 0 deletions

View File

@ -18,6 +18,8 @@ day05:
php day05/solve.php input
day06:
php day06/solve.php input
day07:
day08:
day09:

1
day06/example.txt Normal file
View File

@ -0,0 +1 @@
3,4,3,1,2

1
day06/input.txt Normal file
View File

@ -0,0 +1 @@
2,1,1,4,4,1,3,4,2,4,2,1,1,4,3,5,1,1,5,1,1,5,4,5,4,1,5,1,3,1,4,2,3,2,1,2,5,5,2,3,1,2,3,3,1,4,3,1,1,1,1,5,2,1,1,1,5,3,3,2,1,4,1,1,1,3,1,1,5,5,1,4,4,4,4,5,1,5,1,1,5,5,2,2,5,4,1,5,4,1,4,1,1,1,1,5,3,2,4,1,1,1,4,4,1,2,1,1,5,2,1,1,1,4,4,4,4,3,3,1,1,5,1,5,2,1,4,1,2,4,4,4,4,2,2,2,4,4,4,2,1,5,5,2,1,1,1,4,4,1,4,2,3,3,3,3,3,5,4,1,5,1,4,5,5,1,1,1,4,1,2,4,4,1,2,3,3,3,3,5,1,4,2,5,5,2,1,1,1,1,3,3,1,1,2,3,2,5,4,2,1,1,2,2,2,1,3,1,5,4,1,1,5,3,3,2,2,3,1,1,1,1,2,4,2,2,5,1,2,4,2,1,1,3,2,5,5,3,1,3,3,1,4,1,1,5,5,1,5,4,1,1,1,1,2,3,3,1,2,3,1,5,1,3,1,1,3,1,1,1,1,1,1,5,1,1,5,5,2,1,1,5,2,4,5,5,1,1,5,1,5,5,1,1,3,3,1,1,3,1

33
day06/lib.php Normal file
View File

@ -0,0 +1,33 @@
<?php
declare(strict_types=1);
function buildFishIndex(array $fishes) : array
{
$index = [];
foreach ($fishes as $val) {
$index[$val] = ($index[$val] ?? 0) + 1;
}
return $index;
}
function decreaseFishesIndex(array $fishIndex) : array
{
$newIndex = [];
foreach ($fishIndex as $days => $amount) {
$newIndex[intval($days - 1)] = intval($amount);
}
foreach ($newIndex as $day => $amount) {
if ($day < 0) {
unset($newIndex[$day]);
$newIndex[8] = $amount;
$newIndex[6] = ($newIndex[6] ?? 0) + $amount;
}
}
return $newIndex;
}

39
day06/solve.php Normal file
View File

@ -0,0 +1,39 @@
<?php
declare(strict_types=1);
require_once(__DIR__.'/../lib/functions.php');
require_once(__DIR__.'/lib.php');
$entries = getLines(__DIR__.'/'.$argv[1].'.txt');
timedPrintf(
'[2021-12-06.1] Amount of fishes after 80 days: %d [Time: %ss]',
(function (array $entries) : int {
$fishes = explode(',', $entries[0]);
$fishIndex = buildFishIndex($fishes);
for ($i = 1; $i <= 80; $i++) {
$fishIndex = decreaseFishesIndex($fishIndex);
}
return array_sum($fishIndex);
}),
$entries
);
timedPrintf(
'[2021-12-06.2] Amount of fishes after 256 days: %d [Time: %ss]',
(function (array $entries) : int {
$fishes = explode(',', $entries[0]);
$fishIndex = buildFishIndex($fishes);
for ($i = 1; $i <= 256; $i++) {
$fishIndex = decreaseFishesIndex($fishIndex);
}
return array_sum($fishIndex);
}),
$entries
);