init
This commit is contained in:
9
day1/Cargo.toml
Normal file
9
day1/Cargo.toml
Normal 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
1000
day1/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
52
day1/src/main.rs
Normal file
52
day1/src/main.rs
Normal 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);
|
||||
}
|
Reference in New Issue
Block a user