Compare commits

...

3 Commits

Author SHA1 Message Date
513448bbbd wip part2 2023-12-04 10:19:30 +01:00
b57ebdc97f add regex 2023-12-04 10:19:25 +01:00
b8439282b0 day1 part1 2023-12-01 22:58:10 +01:00
6 changed files with 1115 additions and 0 deletions

16
2023/day-01/Cargo.toml Normal file
View File

@ -0,0 +1,16 @@
[package]
name = "day-01"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[[bin]]
name = "part1"
path = "src/part1.rs"
[[bin]]
name = "part2"
path = "src/part2.rs"
[dependencies]
regex = "1.10.2"

1000
2023/day-01/src/input.txt Normal file

File diff suppressed because it is too large Load Diff

35
2023/day-01/src/part1.rs Normal file
View File

@ -0,0 +1,35 @@
fn main() {
let input = include_str!("./input.txt");
let output = process(input);
println!("{}", output);
}
fn process(input: &str) -> i32 {
let lines: i32 = input
.lines()
.into_iter()
.map(|line| {
let line_vec = line
.chars()
.filter(|c| c.is_digit(10))
.collect::<Vec<char>>();
let first = line_vec.clone().into_iter().nth(0);
let last = line_vec.clone().into_iter().nth_back(0);
[first.unwrap(), last.unwrap()].into_iter().collect()
})
.collect::<Vec<String>>()
.iter()
.map(|x| x.parse::<i32>().unwrap())
.sum();
lines
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_logic() {
let input = include_str!("./testinput.txt");
assert_eq!(process(input), 142);
}
}

53
2023/day-01/src/part2.rs Normal file
View File

@ -0,0 +1,53 @@
use regex::Regex;
fn main() {
let input = include_str!("./input.txt");
let output = process(input);
println!("{}", output);
}
fn process(input: &str) -> i32 {
let lines: i32 = input
.lines()
.into_iter()
.map(|x| replacer(x))
.map(|line| {
println!("{line}");
let line_vec = line
.chars()
.filter(|c| c.is_digit(10))
.collect::<Vec<char>>();
let first = line_vec.clone().into_iter().nth(0);
let last = line_vec.clone().into_iter().nth_back(0);
[first.unwrap(), last.unwrap()].into_iter().collect()
})
.collect::<Vec<String>>()
.iter()
.map(|x| x.parse::<i32>().unwrap())
.sum();
lines
}
fn replacer(x: &str) -> String {
let re = Regex::new("(one|two|three|four|five|six|seven|eight|nine)");
x.replace("one", "1")
.replace("two", "2")
.replace("three", "3")
.replace("four", "4")
.replace("five", "5")
.replace("six", "6")
.replace("seven", "7")
.replace("eight", "8")
.replace("nine", "9")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_logic() {
let input = include_str!("./testinput2.txt");
assert_eq!(process(input), 281);
}
}

View File

@ -0,0 +1,4 @@
1abc2
pqr3stu8vwx
a1b2c3d4e5f
treb7uchet

View File

@ -0,0 +1,7 @@
two1nine
eightwothree
abcone2threexyz
xtwone3four
4nineeightseven2
zoneight234
7pqrstsixteen