pub fn split_bill_paisa(total_paisa: i64, count: usize) -> Vec<i64> {
if count == 0 || count > 10_000 {
return vec![];
}
if count == 1 {
return vec![total_paisa];
}
let n = count as i64;
let base = total_paisa.div_euclid(n);
let rem = total_paisa.rem_euclid(n);
(0..n).map(|i| base + i64::from(i < rem)).collect()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn splits_evenly() {
assert_eq!(split_bill_paisa(3000, 3), vec![1000, 1000, 1000]);
}
#[test]
fn remainder_spread_to_first_people() {
assert_eq!(split_bill_paisa(100, 3), vec![34, 33, 33]);
assert_eq!(split_bill_paisa(1, 2), vec![1, 0]);
}
#[test]
fn parts_always_sum_exactly() {
for (total, count) in [(12345, 7), (999, 2), (5000, 1), (1, 20)] {
let parts = split_bill_paisa(total, count);
assert_eq!(parts.iter().sum::<i64>(), total);
}
}
}