Finished day 1 aoc 2023

This commit is contained in:
2023-12-04 10:31:19 +01:00
parent c414be2200
commit 048c66102b
2 changed files with 123 additions and 0 deletions

View File

@@ -21,6 +21,111 @@ fn solve_1(input: &str) -> u32 {
.sum()
}
fn digitify(chars: &str) -> u32 {
let mut chars_left = &chars[..];
while chars_left.len() > 0 {
if chars_left.len() >= 3 {
if let Some(digit) = chars_left.chars().next().unwrap().to_digit(10) {
return digit;
} else if &chars_left[0..3] == "one" {
return 1;
} else if &chars_left[0..3] == "two" {
return 2;
} else if &chars_left[0..3] == "six" {
return 6;
} else if chars_left.len() >= 4 {
if &chars_left[0..4] == "four" {
return 4;
} else if &chars_left[0..4] == "five" {
return 5;
} else if &chars_left[0..4] == "nine" {
return 9;
} else if chars_left.len() >= 5 {
if &chars_left[0..5] == "three" {
return 3;
} else if &chars_left[0..5] == "seven" {
return 7;
} else if &chars_left[0..5] == "eight" {
return 8;
} else {
chars_left = &chars_left[1..];
}
} else {
chars_left = &chars_left[1..];
}
} else {
chars_left = &chars_left[1..];
}
} else if let Some(digit) = chars_left.chars().next().unwrap().to_digit(10) {
return digit;
} else {
chars_left = &chars_left[1..];
}
}
return 0;
}
fn digitify_backwards(line: &str) -> u32 {
let chars_left = line.chars().rev().collect::<String>();
let mut chars_left = chars_left.as_str();
while chars_left.len() > 0 {
if chars_left.len() >= 3 {
if let Some(digit) = chars_left.chars().next().unwrap().to_digit(10) {
return digit;
} else if &chars_left[0..3] == "eno" {
return 1;
} else if &chars_left[0..3] == "owt" {
return 2;
} else if &chars_left[0..3] == "xis" {
return 6;
} else if chars_left.len() >= 4 {
if &chars_left[0..4] == "ruof" {
return 4;
} else if &chars_left[0..4] == "evif" {
return 5;
} else if &chars_left[0..4] == "enin" {
return 9;
} else if chars_left.len() >= 5 {
if &chars_left[0..5] == "eerht" {
return 3;
} else if &chars_left[0..5] == "neves" {
return 7;
} else if &chars_left[0..5] == "thgie" {
return 8;
} else {
chars_left = &chars_left[1..];
}
} else {
chars_left = &chars_left[1..];
}
} else {
chars_left = &chars_left[1..];
}
} else if let Some(digit) = chars_left.chars().next().unwrap().to_digit(10) {
return digit;
} else {
chars_left = &chars_left[1..];
}
}
return 0;
}
fn solve_2(input: &str) -> u32 {
input
.lines()
.map(|l| {
let first = digitify(&l[..]);
let last = digitify_backwards(&l[..]);
first * 10 + last
})
.sum()
}
fn main() {
println!("Hello, this is Patrick!");
@@ -29,6 +134,10 @@ fn main() {
let result_1 = solve_1(input_txt);
println!("The sum of all calibration values is {}", result_1);
let result_2 = solve_2(input_txt);
println!("The sum of all improved calibration values is {}", result_2);
}
#[cfg(test)]
@@ -41,4 +150,11 @@ mod tests {
assert_eq!(solve_1(test_input), 142);
}
#[test]
fn test_2() {
let test_input = include_str!("../test2.txt");
assert_eq!(solve_2(test_input), 281);
}
}