use std::env;
use std::process;
use rust_project::Config;
mod spider;
mod utils;
use std::collections::HashMap;
use std::ops::AddAssign;
fn main() {
spider::run_cmd();
spider::main2();
utils::run_cmd();
utils::util();
println!("Hello, world!");
let args: Vec<String> = env::args().collect();
println!("{:?}", args);
let config = Config::new(&args).unwrap_or_else(|err| {
eprintln!("Problem parsing argument:{}", err);
process::exit(1);
});
let query = &config.query;
let filename = &config.filename;
println!("-query is <{}>", query);
println!("-filename is <{}>", filename);
if let Err(e) = rust_project::run(config) {
println!("\nApplication error: {}", e);
}
let numbers = vec![1, 45, 23, 65, 788, 432, 78, 65, 65, 46, 3, 6543, 23, 65];
let median = find_median(&numbers);
match median {
Some(value) => println!("median:{value}"),
_ => (),
}
let mode = find2(&numbers);
match mode {
Some(value) => println!("mode:{value}"),
_ => (),
}
}
fn find_median(numbers: &Vec<i32>) -> Option<i32> {
if numbers.is_empty() {
return None;
}
let mut new_vec = numbers.to_vec();
new_vec.sort();
let pos = new_vec.len() / 2;
Option::from(*new_vec.get(pos).unwrap())
}
fn find2(numbers: &Vec<i32>) -> Option<i32> {
numbers
.iter()
.fold(HashMap::new(), |mut acc, i| {
acc.entry(i).or_insert(0).add_assign(1);
acc
})
.iter()
.reduce(
|current, next| {
if current.1 < next.1 {
next
} else {
current
}
},
)
.map(|e| **e.0)
}