<?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); }