<?php
function seqCheck(array $arr, int $maxMis): bool
{
$oos = 0;
$mis = 0;
foreach ($arr as $k => $v) {
if ($k > 0 && $v < $arr[$k - 1]) {
$oos++; // number out of sequence
}
if ($k > 0 && $v !== $arr[$k - 1] + 1) {
$mis++; // number missing in sequence
}
}
if ($oos > 0 || $mis > $maxMis) {
return false;
} else {
return true;
}
}
$tests = [
[[2, 3, 5, 6], 0],
[[2, 3, 5, 6], 1],
[[2, 5, 6, 8], 1],
[[3, 6, 10, 16], 1],
[[5, 6, 7, 8, 9, 10, 11], 1],
[[1, 3, 5], 2],
[[1, 5, 3], 2],
];
foreach ($tests as [$array, $timesForgivable]) {
printf(
"Test: %-17s,\tMax Forgiven: %d,\tOutcome: %s\n",
json_encode($array),
$timesForgivable,
json_encode(seqCheck($array, $timesForgivable))
);
}
preferences:
23.14 ms | 405 KiB | 5 Q