1
0
Fork 0
advent-of-code/2020/day15.php

44 lines
1 KiB
PHP
Raw Normal View History

2024-02-08 09:55:40 +01:00
<?php
$input_file = '../inputs/day15.txt';
if (file_exists($input_file)) {
$input = file_get_contents($input_file);
if ($input != null) {
$numbers = array_map('trim', explode(',', $input));
print 'Part 1 answer: ' . solve_part_one($numbers) . "\n";
print 'Part 2 answer: ' . solve_part_two($numbers) . "\n";
}
}
function solve_part_one(array $numbers): int
{
return get_number_in_sequence($numbers, 2020);
}
function solve_part_two(array $numbers): int
{
ini_set('memory_limit', '-1');
return get_number_in_sequence($numbers, 30000000);
}
function get_number_in_sequence(array $initial_numbers, int $num): int
{
$last_spoken = [];
foreach ($initial_numbers as $turn => $number)
$last_spoken[(int)$number] = (int)$turn + 1;
$last = array_keys($last_spoken)[count($last_spoken) - 1];
for ($i = count($last_spoken); $i < $num; $i++) {
if (array_key_exists($last, $last_spoken)) {
$prev = $last;
$last = $i - $last_spoken[$last];
$last_spoken[$prev] = $i;
} else {
$last_spoken[$last] = $i;
$last = 0;
}
}
return $last;
}