14th day both parts
This commit is contained in:
39
14/part2.php
Normal file
39
14/part2.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
$lines = file('input', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
||||
|
||||
$mapings = [];
|
||||
$before = [];
|
||||
$initialMappings = [];
|
||||
$template = array_shift($lines);
|
||||
for ($i = 0; $i < strlen($template) - 1; $i++) {
|
||||
$pair = substr($template, $i, 2);
|
||||
$before[$pair] = 1;
|
||||
}
|
||||
foreach ($lines as $item) {
|
||||
$line = explode(' -> ', $item);
|
||||
$mapings[$line[0]] = $line[1];
|
||||
$initialMappings[$line[0]] = 0;
|
||||
}
|
||||
|
||||
for ($step = 1; $step <= 40; $step++) {
|
||||
$after = $initialMappings;
|
||||
foreach ($before as $pair => $count) {
|
||||
$left = $pair[0] . $mapings[$pair];
|
||||
$right = $mapings[$pair] . $pair[1];
|
||||
$after[$left] += $count;
|
||||
$after[$right] += $count;
|
||||
}
|
||||
$before = $after;
|
||||
}
|
||||
$letters = [];
|
||||
foreach ($before as $pair => $count) {
|
||||
$left = $pair[0];
|
||||
if (!isset($letters[$left])) {
|
||||
$letters[$left] = 0;
|
||||
}
|
||||
$letters[$left] += $count;
|
||||
}
|
||||
$letters[substr($template, -1)] += 1;
|
||||
sort($letters);
|
||||
|
||||
echo array_pop($letters) - array_shift($letters); //2516901104210
|
||||
Reference in New Issue
Block a user