Open AnicetNgrt opened 2 years ago
extern crate alloc; use std::{collections::HashMap, fmt::Debug}; const JAVASCRIPT: i32 = 666; fn main() { let priorittaires = vec![ "dwight@dunder-mifflin.com", "michael@dunder-mifflin.com", "phyllis@dunder-mifflin.com", ]; let éxpéditeur = vec![ "dwight@dunder-mifflin.com", "jul@totemproduction.fr", "michael@dunder-mifflin.com", "phyllis@dunder-mifflin.com", "matthieu@coddity.com", ]; println!( "{}", compté_ellamment_qui_sont_les_mèmes::<&str, i32, i32>(priorittaires, éxpéditeur) ); } fn compté_ellamment_qui_sont_les_mèmes<UnTypeDestinataireDunEmail, UnTypePourConpter, K>( prioritaire: Vec<UnTypeDestinataireDunEmail>, éxpéditeurs: Vec<UnTypeDestinataireDunEmail>, ) -> UnTypePourConpter where UnTypeDestinataireDunEmail: std::cmp::PartialOrd, UnTypePourConpter: increment::Incrementable + std::convert::From<i32>, UnTypePourConpter: std::default::Default, UnTypePourConpter: std::ops::Add<Output = UnTypePourConpter>, UnTypePourConpter: std::ops::Sub<Output = UnTypePourConpter>, UnTypePourConpter: core::convert::TryFrom<K>, UnTypePourConpter: core::marker::Copy, K: core::convert::TryFrom<i32>, <UnTypePourConpter as TryFrom<i32>>::Error: Debug, <K as TryFrom<i32>>::Error: Debug, <UnTypePourConpter as TryFrom<K>>::Error: Debug, UnTypePourConpter: core::clone::Clone, UnTypePourConpter: alloc::borrow::ToOwned<Owned = UnTypePourConpter>, UnTypeDestinataireDunEmail: std::hash::Hash, UnTypeDestinataireDunEmail: core::marker::Copy, UnTypeDestinataireDunEmail: core::cmp::Eq, { let mut deja_trouve = HashMap::<UnTypeDestinataireDunEmail, UnTypePourConpter>::new(); prioritaire .iter() .fold(UnTypePourConpter::default(), |conteur, ellemmant| { let petite_lambda_car_vive_haskell = Box::new(|élamment: &UnTypePourConpter| élamment.clone().to_owned()); let mut ajout_peutetre = UnTypePourConpter::default(); let mut ajout_deja = UnTypePourConpter::default(); conteur + éxpéditeurs.iter().fold( UnTypePourConpter::default(), |conmpteur_le_2e, éllément_le_2ème| match éllément_le_2ème .partial_cmp(ellemmant) { Some(ordre) => match ordre { std::cmp::Ordering::Less => { petite_lambda_car_vive_haskell(&conmpteur_le_2e) } std::cmp::Ordering::Equal => match conmpteur_le_2e.increment() { increment::IncResult::Ok(_resultat_balek) => { ajout_peutetre = match UnTypePourConpter::default().increment() { increment::IncResult::Ok(resultat) => resultat, increment::IncResult::OutOfBounds => { UnTypePourConpter::try_from(K::try_from(JAVASCRIPT).unwrap()) .unwrap() } increment::IncResult::UnknownError(erreur) => { UnTypePourConpter::try_from( K::try_from( erreur .into_bytes() .iter() .count() .try_into() .unwrap(), ) .unwrap(), ) .unwrap() } }; let mut ajout = ajout_peutetre - ajout_deja; ajout_deja = match UnTypePourConpter::default().increment() { increment::IncResult::Ok(resultat) => resultat, increment::IncResult::OutOfBounds => { UnTypePourConpter::try_from(K::try_from(JAVASCRIPT).unwrap()) .unwrap() } increment::IncResult::UnknownError(erreur) => { UnTypePourConpter::try_from( K::try_from( erreur .into_bytes() .iter() .count() .try_into() .unwrap(), ) .unwrap(), ) .unwrap() } }; if let Some(_trouve_deja_mais_balek) = deja_trouve.get(&éllément_le_2ème) { ajout = UnTypePourConpter::default() } deja_trouve.insert(*éllément_le_2ème, conmpteur_le_2e); conmpteur_le_2e + ajout } increment::IncResult::OutOfBounds => { UnTypePourConpter::try_from(K::try_from(JAVASCRIPT).unwrap()).unwrap() } increment::IncResult::UnknownError(erreur) => { UnTypePourConpter::try_from( K::try_from( erreur.into_bytes().iter().count().try_into().unwrap(), ) .unwrap(), ) .unwrap() } }, std::cmp::Ordering::Greater => { petite_lambda_car_vive_haskell(&conmpteur_le_2e) } }, None => petite_lambda_car_vive_haskell(&conmpteur_le_2e), }, ) }) }