Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fn process_fat_accounts(accounts: &mut Vec<f32>, base: f32) -> f32 {
- let mut sum = 0_f32;
- for i in 0..accounts.len() {
- let money = accounts[i];
- if money > base {
- let f = (money / base).powf(1.3);
- if accounts[i] - f > base {
- accounts[i] -= f;
- sum += f;
- }
- }
- }
- sum
- }
- fn process_poor_accounts(accounts: &mut Vec<f32>, base: f32, benefits: f32) {
- let small_amount_limit = |x: f32| -> f32 {
- if x > 20_f32 {
- 20_f32
- } else {
- x
- }
- };
- /*
- real 0m2.385s
- user 0m2.360s
- sys 0m0.019s
- */
- let mut all_factors = 0_f32;
- for i in 0..accounts.len() {
- let mm = accounts[i];
- if mm < base {
- all_factors += small_amount_limit(base / mm);
- }
- }
- let amount_to_add = benefits / all_factors;
- for i in 0..accounts.len() {
- let money = accounts[i];
- if money < base {
- let f = small_amount_limit(base / money) * amount_to_add;
- accounts[i] += f;
- }
- }
- }
- //use std::mem;
- fn main() {
- const NUM: usize = 1000000;
- let mut accounts: Vec<f32> = Vec::with_capacity(NUM);
- //let mut accounts = [0_f32; 10000];
- for i in 0..NUM {
- accounts.push((i * 2) as f32);
- }
- //println!("account2: {} bytes in the stack", mem::size_of_val(&accounts2));
- let base: f32 = accounts.iter().sum::<f32>() / accounts.len() as f32;
- println!("base: {:.2}", base);
- for i in 0..100 {
- let benefits = process_fat_accounts(&mut accounts, base);
- process_poor_accounts(&mut accounts, base, benefits);
- //println!("[ {}] счета {:.2?} снято с жирных счетов #{:.2}", i, accounts.iter().take(10), benefits);
- println!(
- "[ {}] снято с жирных счетов #{:.2}",
- i, benefits
- );
- //accounts.iter().fold(String::new(), |acc, &num| acc + &num.to_string() + ", ")
- }
- println!("processed:");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement