KA
fn split_by_pred<T, F>(s: &mut [T], mut predicate: F) -> (&mut [T], &mut [T])
where
F: FnMut(&mut T) -> bool,
{
let mut left = 0;
let mut right = s.len();
while left < right {
if predicate(&mut s[left]) {
right -= 1;
s.swap(left, right);
} else {
left += 1;
}
}
s.split_at_mut(left);
}

