PHP Fish
function fish(array $a, array $b): int
{
$size = count($a);
$dead = 0;
$fish = [];
for ($i = 0; $i < $size; $i++) {
if ($b[$i] === 1) {
$fish[] = $a[$i];
} elseif (isset($fish[0])) {
while (isset($fish[0])) {
$dead++;
if ($a[$i] > end($fish)) {
array_pop($fish);
} else {
break;
}
}
}
}
return $size - $dead;
}
This uses a stack for downstream fish and resolves fights only when opposite directions meet.