// ==================================================
// > SOLUTION 1 - ~500ms
// ==================================================
$solution_1 = 0;
foreach ($input->range as $pwd) {
$pwd = (string) $pwd;
$cons = false;
$desc = false;
for ($i = 0; $i <= strlen($pwd) - 2; $i++) {
if ($pwd[$i] == $pwd[$i + 1]) {
$cons = true;
}
if ($pwd[$i] > $pwd[$i + 1]) {
$desc = true;
}
}
if ($cons && !$desc) {
$solution_1++;
}
}
// ==================================================
// > SOLUTION 1 - ~500ms
// ==================================================
$decreas = set(range(9, 1))->map(fn ($i) => set(range($i - 1, 0))->map(fn ($j) => "$i$j")->join("|"))->join("|");
$couples = set(range(0, 9))->map(fn ($i) => "$i$i")->join("|");
$solution_1 = $input->range->filter(
fn ($number) => !preg_match("/($decreas)/", $number) && preg_match("/($couples)/", $number)
)->count();
// ==================================================
// > SOLUTION 1 - ~120ms
// ==================================================
$digits = $input->range->join("\n") . "\n";
$digits = preg_replace("/[0-9]*($decreas)[0-9]*\n/", "", $digits);
$digits = preg_replace("/[0-9]*($couples)[0-9]*\n/", "+\n", $digits);
$digits = preg_replace("/[0-9].*\n/", "", $digits);
$solution_1 = count(explode("\n", trim($digits)));
// ==================================================
// > SOLUTION 2
// ==================================================
$trouples = set(range(0, 9))->map(fn ($i) => "$i$i$i$i$i$i|$i$i$i$i$i|$i$i$i$i|$i$i$i")->join("|");
$solution_2 = $input->range->filter(
fn ($number) => !preg_match("/($decreas)/", $number) && (($number = preg_replace("/($trouples)/", "", $number)) && preg_match("/($couples)/", $number))
)->count();