add 22
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "euler22"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
@@ -0,0 +1,42 @@
|
||||
fn main() {
|
||||
let mut sum = 0;
|
||||
let names = read_sorted_names("0022_names.txt");
|
||||
for (i, name) in names.into_iter().enumerate() {
|
||||
sum += (i + 1) * get_name_value(&name);
|
||||
}
|
||||
|
||||
println!("{sum}");
|
||||
}
|
||||
|
||||
fn read_sorted_names(filename: &str) -> Vec<String> {
|
||||
let content = std::fs::read_to_string(filename).unwrap();
|
||||
let mut names: Vec<String> = content
|
||||
.split(',')
|
||||
.map(|n| {
|
||||
n.chars()
|
||||
.skip(1)
|
||||
.take_while(|c| c.is_ascii_uppercase())
|
||||
.collect()
|
||||
})
|
||||
.collect();
|
||||
names.sort_unstable();
|
||||
names
|
||||
}
|
||||
|
||||
fn get_name_value(name: &str) -> usize {
|
||||
name.as_bytes()
|
||||
.iter()
|
||||
.map(|c| (c - 64) as usize)
|
||||
.sum::<usize>()
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::get_name_value;
|
||||
|
||||
#[test]
|
||||
fn colin() {
|
||||
let value = get_name_value("COLIN");
|
||||
assert_eq!(value, 53);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user