This commit is contained in:
Acvaxoort
2023-12-02 23:52:46 +01:00
commit 3d03dc50d3
6 changed files with 1198 additions and 0 deletions

9
day1/Cargo.toml Normal file
View File

@@ -0,0 +1,9 @@
[package]
name = "day1"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
regex = "1.10.2"

1000
day1/input.txt Normal file

File diff suppressed because it is too large Load Diff

52
day1/src/main.rs Normal file
View File

@@ -0,0 +1,52 @@
use std::fs::read_to_string;
use std::collections::HashMap;
use regex::Regex;
fn get_digit(text: &str, digits_map: &HashMap<&str, i32>) -> i32 {
match text.parse::<i32>() {
Ok(num) => {
num
}
Err(_) => {
digits_map[text]
}
}
}
fn main() {
let digits_map: HashMap<&str, i32> = HashMap::from([
("one", 1), ("two", 2), ("three", 3), ("four", 4), ("five", 5),
("six", 6), ("seven", 7), ("eight", 8), ("nine", 9)
]);
let mut sum1 = 0;
let mut sum2 = 0;
let forward_re = Regex::new("[0-9]|one|two|three|four|five|six|seven|eight|nine").unwrap();
let backward_re = Regex::new(&("[0-9]|".to_owned()
+ &"one|two|three|four|five|six|seven|eight|nine".chars().rev().collect::<String>())).unwrap();
for line in read_to_string("input.txt").unwrap().lines() {
// First task
let mut first_digit: i32 = -1;
let mut last_digit: i32 = -1;
for c in line.chars() {
match c.to_digit(10) {
Some(num) => {
if first_digit < 0 {
first_digit = num as i32;
}
last_digit = num as i32;
},
None => {}
}
}
sum1 += first_digit * 10 + last_digit;
// Second task
let first_digit2 = get_digit(forward_re.find(line).unwrap().as_str(), &digits_map);
let last_digit2 = get_digit(
&backward_re.find(&line.chars().rev().collect::<String>())
.unwrap().as_str().chars().rev().collect::<String>(), &digits_map);
sum2 += first_digit2 * 10 + last_digit2;
}
println!("Sum 1: {}", sum1);
println!("Sum 2: {}", sum2);
}