diff --git a/average b/average new file mode 100644 index 0000000..44a8f77 --- /dev/null +++ b/average @@ -0,0 +1,30 @@ +fn gen_shipments(mut shipments: Vec) -> Vec { + let total: u32 = shipments.iter().sum(); + let average = total as i32 / shipments.len() as i32; + + let mut adjustments: Vec = shipments.iter().map(|&x| x as i32 - average).collect(); + + // Перевіримо, чи загальний залишок не більше нуля (щоб врівноважити). + let excess: i32 = adjustments.iter().sum(); + + for i in 0..adjustments.len() { + if excess == 0 { + break; + } + if excess > 0 && adjustments[i] > 0 { + adjustments[i] -= 1; + } else if excess < 0 && adjustments[i] < 0 { + adjustments[i] += 1; + } + } + + // Перетворимо значення назад в Vec + let result: Vec = adjustments.iter().map(|&x| (x + average) as u32).collect(); + result +} + +fn main() { + let shipments = vec![8, 2, 2, 4, 4]; + let result = gen_shipments(shipments); + println!("{:?}", result); +}