lab 01
This commit is contained in:
3 files changed
+82
No files matched your search
Executable
BIN
Binary file not shown.
@@ -0,0 +1,50 @@
|
|||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
fn sieve(p: Vec<usize>, mut acc: Vec<usize>, n: usize) -> Vec<usize> {
|
||||||
|
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<usize> {
|
||||||
|
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<char> = 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<String, Vec<usize>> = 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());
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user