✨ Finit le jour 8 et le début du 9
This commit is contained in:
parent
f1899b0640
commit
c290b5fee6
15
day_8/part_1.php
Normal file
15
day_8/part_1.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$output = array_map(static function ($line) {
|
||||||
|
return explode('|', $line)[1];
|
||||||
|
}, explode("\n", file_get_contents('./input.txt')));
|
||||||
|
|
||||||
|
echo array_reduce($output, static function($carry, $item) {
|
||||||
|
$count = 0;
|
||||||
|
$items = explode(' ', $item);
|
||||||
|
foreach ($items as $item) {
|
||||||
|
$count += in_array(strlen($item), [2, 4, 3, 7]) ? 1 : 0;
|
||||||
|
}
|
||||||
|
$carry += $count;
|
||||||
|
return $carry;
|
||||||
|
});
|
99
day_8/part_2.php
Normal file
99
day_8/part_2.php
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$entries = explode("\n", file_get_contents('./input.txt'));
|
||||||
|
|
||||||
|
$outputs = [];
|
||||||
|
|
||||||
|
foreach ($entries as $entry) {
|
||||||
|
[$uniques, $output] = explode('|', $entry);
|
||||||
|
$uniques = array_filter(explode(' ', $uniques));
|
||||||
|
$output = array_filter(explode(' ', $output));
|
||||||
|
|
||||||
|
$mapping = [];
|
||||||
|
while (count($mapping) !== 10) {
|
||||||
|
foreach ($uniques as $unique) {
|
||||||
|
$unique = sort_string($unique);
|
||||||
|
if (in_array($unique, $mapping)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
switch (strlen($unique)) {
|
||||||
|
case 2: $mapping[1] = $unique; break;
|
||||||
|
case 4: $mapping[4] = $unique; break;
|
||||||
|
case 3: $mapping[7] = $unique; break;
|
||||||
|
case 7: $mapping[8] = $unique; break;
|
||||||
|
case 5:
|
||||||
|
if (array_key_exists(1, $mapping)) {
|
||||||
|
$segments_1 = str_split($mapping[1]);
|
||||||
|
if (str_contains($unique, $segments_1[0]) && str_contains($unique, $segments_1[1])) {
|
||||||
|
$mapping[3] = $unique;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if (array_key_exists(9, $mapping)) {
|
||||||
|
$segments_9 = str_split($mapping[9]);
|
||||||
|
$count = 0;
|
||||||
|
foreach ($segments_9 as $segment_9) {
|
||||||
|
if (!str_contains($unique, $segment_9)) {
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($count === 1) {
|
||||||
|
$mapping[5] = $unique;
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
$mapping[2] = $unique;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
if (array_key_exists(1, $mapping)) {
|
||||||
|
$segments_1 = str_split($mapping[1]);
|
||||||
|
if (!str_contains($unique, $segments_1[0]) || !str_contains($unique, $segments_1[1])) {
|
||||||
|
$mapping[6] = $unique;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (array_key_exists(4, $mapping)) {
|
||||||
|
$segments_4 = str_split($mapping[4]);
|
||||||
|
if (
|
||||||
|
str_contains($unique, $segments_4[0]) &&
|
||||||
|
str_contains($unique, $segments_4[1]) &&
|
||||||
|
str_contains($unique, $segments_4[2]) &&
|
||||||
|
str_contains($unique, $segments_4[3])
|
||||||
|
) {
|
||||||
|
$mapping[9] = $unique;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (array_key_exists(6, $mapping) && array_key_exists(9, $mapping)) {
|
||||||
|
$mapping[0] = $unique;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
echo 'unknown length : '.strlen($unique);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$number = '';
|
||||||
|
foreach ($output as $item) {
|
||||||
|
$item = sort_string($item);
|
||||||
|
$number .= array_search($item, $mapping);
|
||||||
|
}
|
||||||
|
|
||||||
|
echo sprintf('%u%s', $number, "\n");
|
||||||
|
$outputs[] = (int) $number;
|
||||||
|
}
|
||||||
|
|
||||||
|
echo array_sum($outputs);
|
||||||
|
|
||||||
|
function sort_string(string $string)
|
||||||
|
{
|
||||||
|
$string = str_split($string);
|
||||||
|
sort($string);
|
||||||
|
return implode($string);
|
||||||
|
}
|
||||||
|
|
31
day_9/part_1.php
Normal file
31
day_9/part_1.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$grid = array_map(static function ($row) {
|
||||||
|
return str_split($row);
|
||||||
|
}, explode("\n", file_get_contents('./input.txt')));
|
||||||
|
|
||||||
|
$low_points = [];
|
||||||
|
|
||||||
|
foreach ($grid as $i => $row) {
|
||||||
|
foreach ($row as $j => $cell) {
|
||||||
|
$count = 0;
|
||||||
|
if (!array_key_exists($i - 1, $grid) || $grid[$i - 1][$j] > $cell) {
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
if (!array_key_exists($i + 1, $grid) || $grid[$i + 1][$j] > $cell) {
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
if (!array_key_exists($j - 1, $row) ||$row[$j - 1] > $cell) {
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
if (!array_key_exists($j + 1, $row) || $row[$j + 1] > $cell) {
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($count === 4) {
|
||||||
|
$low_points[] = (int) $cell;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo array_sum($low_points) + count($low_points);
|
Loading…
Reference in New Issue
Block a user