function is_valid($n, $dampener = false) {
$dir = $n->last() - $n->first() < 0 ? -1 : 1;
for ($i = 1; $i < $n->count(); $i++) {
$diff = ($n[$i] - $n[$i-1]) * $dir;
if ($diff < 1 || $diff > 3) {
if (!$dampener) return false;
return is_valid($n->removeKeys([$i])->values()) || is_valid($n->removeKeys([$i-1])->values());
}
}
return true;
}
$solution_1 = $input->lines->filter(function ($l) {
return is_valid($l->numbers());
})->count();
$solution_2 = $input->lines->filter(function ($l) {
return is_valid($l->numbers(), true);
})->count();