diff --git a/labs/01/primes b/labs/01/primes new file mode 100755 index 0000000..fad07ff Binary files /dev/null and b/labs/01/primes differ diff --git a/labs/01/primes.rs b/labs/01/primes.rs new file mode 100644 index 0000000..c82ac14 --- /dev/null +++ b/labs/01/primes.rs @@ -0,0 +1,50 @@ +use std::collections::HashMap; + +fn sieve(p: Vec, mut acc: Vec, n: usize) -> Vec { + if p.len() == 0 { + return acc; + } + + let h = p[0]; + + if h * h > n { + acc.extend(p); // acc ++ [h | t] in Elixir impl + return acc; + } + + acc.push(h); + let remaining = p + .into_iter() + .skip(1) // + .filter(|x| x % h != 0) + .collect(); + + sieve(remaining, acc, n) +} + +fn primes(m: usize, n: usize) -> Vec { + let c = (2..=n).collect(); + sieve(c, Vec::new(), n) + .into_iter() + .filter(|x| x > (&m)) + .collect() +} + +fn sort_prime(n: usize) -> String { + let mut digits: Vec = n.to_string().chars().collect(); + digits.sort(); + digits.into_iter().collect() +} + +fn main() { + let p = primes(100_000, 1_000_000); + println!("{}", p.len()); + + let mut groups: HashMap> = HashMap::new(); + for x in p { + groups.entry(sort_prime(x)).or_default().push(x); + } + + let largest = groups.values().max_by_key(|g| g.len()).unwrap(); + println!("{}", largest.len()); +} diff --git a/labs/01/sort.rs b/labs/01/sort.rs new file mode 100644 index 0000000..49498fc --- /dev/null +++ b/labs/01/sort.rs @@ -0,0 +1,32 @@ +use std::env; +use std::fs; +use std::io; + +fn record(line: &str) -> Option<(String, String, u8)> { + let mut fields = line.split_whitespace(); + let first_name = fields.next()?; + let last_name = fields.next()?; + let score: u8 = fields.next()?.parse().ok()?; + + if score > 100 { + return None; + } + + Some((first_name.to_string(), last_name.to_string(), score)) +} + +fn main() { + let input = match env::args().nth(1) { + Some(path) => fs::read_to_string(path).unwrap_or_default(), + None => io::read_to_string(io::stdin()).unwrap_or_default(), + }; + + let mut records: Vec<(String, String, u8)> = input.lines().filter_map(record).collect(); + records.sort(); + records.dedup(); + records.sort_by_key(|r| r.2); + + for (first_name, last_name, score) in records { + println!("{} {}, {}", score, last_name, first_name); + } +}