This commit is contained in:
Alie 2023-12-01 10:56:45 +01:00
parent d9446653f0
commit fe702cc9c4
5 changed files with 1107 additions and 1 deletions

11
Cargo.lock generated Normal file
View File

@ -0,0 +1,11 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "day01"
version = "0.1.0"
[[package]]
name = "template"
version = "0.1.0"

View File

@ -2,7 +2,7 @@
members = [
"template",
# "day01",
"day01",
# "day02",
# "day03",
# "day04",

8
day01/Cargo.toml Normal file
View File

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

1000
day01/input.txt Normal file

File diff suppressed because it is too large Load Diff

87
day01/src/main.rs Normal file
View File

@ -0,0 +1,87 @@
use std::{fs, ops::Add};
fn main() {
const FILE_PATH: &str = "input.txt";
println!(
"Welcome to AOC2023 day 1, first we will read the file {}",
FILE_PATH
);
let contents = fs::read_to_string(FILE_PATH).expect("Should have been able to read the file");
println!("And we parse the file!");
println!("First thing: {}", calculate(&parse(&contents)));
println!(
"Second thing: {}",
calculate(&parse(&text2digits(&contents)))
);
}
fn parse(input: &str) -> Vec<i32> {
input
.lines()
.map(|line| {
let digits = line.chars().filter(|c| c.is_digit(10)).collect::<Vec<_>>();
let len_digits = digits.len() - 1;
let number: String = digits[0].to_string().add(&digits[len_digits].to_string());
number.parse().expect("NAN")
})
.collect::<Vec<_>>()
}
const NUMTEXT: [(&str, &str); 12] = [
("four", "4"),
("seven", "7"),
("e", "ee"),
("nine", "9"),
("five", "5"),
("t", "tt"),
("three", "3"),
("eight", "8"),
("o", "oo"),
("one", "1"),
("two", "2"),
("six", "6"),
];
fn text2digits(input: &str) -> String {
input
.lines()
.map(|line| {
let mut line: String = line.to_string();
for (name, num) in NUMTEXT {
line = line.replacen(name, num, 99999);
}
line.add("\n")
})
.collect()
}
fn calculate(numbers: &Vec<i32>) -> i32 {
numbers.iter().sum()
}
#[cfg(test)]
mod test {
const INPUT1: &str = r#"1abc2
pqr3stu8vwx
a1b2c3d4e5f
treb7uchet"#;
const INPUT2: &str = r#"two1nine
eightwothree
abcone2threexyz
xtwone3four
4nineeightseven2
zoneight234
7pqrstsixteen"#;
use super::*;
#[test]
fn test1() {
let tst = parse(INPUT1);
assert_eq!(calculate(&tst), 142);
}
#[test]
fn test2() {
let tst = parse(&text2digits(INPUT2));
assert_eq!(calculate(&tst), 281);
}
}