Optimize ~11s to instant!
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Thanks JetBrains AI :)
This commit is contained in:
parent
50db9f329c
commit
9d1c297bbd
@ -30,10 +30,13 @@ final class Day7 extends Solution
|
|||||||
{
|
{
|
||||||
$crabs = array_map(static fn (string $crab): int => (int) $crab, explode(',', $data));
|
$crabs = array_map(static fn (string $crab): int => (int) $crab, explode(',', $data));
|
||||||
|
|
||||||
/** @psalm-param array{int: int} $fuelPerPosition */
|
/** @var array<int, int> $fuelPerPosition */
|
||||||
$fuelPerPosition = [];
|
$fuelPerPosition = [];
|
||||||
|
|
||||||
for ($position = min($crabs); $position <= max($crabs); ++$position) {
|
$minCrab = min($crabs);
|
||||||
|
$maxCrab = max($crabs);
|
||||||
|
|
||||||
|
for ($position = $minCrab; $position <= $maxCrab; ++$position) {
|
||||||
foreach ($crabs as $crab) {
|
foreach ($crabs as $crab) {
|
||||||
if (!isset($fuelPerPosition[$position])) {
|
if (!isset($fuelPerPosition[$position])) {
|
||||||
$fuelPerPosition[$position] = 0;
|
$fuelPerPosition[$position] = 0;
|
||||||
@ -42,20 +45,13 @@ final class Day7 extends Solution
|
|||||||
$consumption = abs($position - $crab);
|
$consumption = abs($position - $crab);
|
||||||
|
|
||||||
if ($forPart2) {
|
if ($forPart2) {
|
||||||
$newConsumption = 0;
|
$consumption = $consumption * ($consumption + 1) / 2;
|
||||||
// I'm sure there's another way than brute-forcing, but hey, this also works!
|
|
||||||
for ($steps = 1; $steps <= $consumption; ++$steps) {
|
|
||||||
$newConsumption += $steps;
|
|
||||||
}
|
|
||||||
|
|
||||||
$consumption = $newConsumption;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$fuelPerPosition[$position] += $consumption;
|
$fuelPerPosition[$position] += $consumption;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @psalm-suppress ArgumentTypeCoercion */
|
return (int) min($fuelPerPosition);
|
||||||
return min($fuelPerPosition);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user