This commit is contained in:
Spectre 2023-12-04 13:43:34 +01:00
parent 1299527ab2
commit 19e598e07d
10 changed files with 178 additions and 30 deletions

View file

@ -1,6 +1,5 @@
use std::any::Any;
use shared::{Answer, Solution};
use regex::{Regex, Captures};
use regex::{Regex};
pub struct Day01;
@ -51,7 +50,7 @@ impl Solution for Day01 {
fn matches(cap: &regex::Captures) -> u64 {
for i in 1..10 {
match cap.get(i) {
Some(val) => return (i as u64),
Some(_) => return i as u64,
None => (),
};
}

View file

@ -1,16 +1,8 @@
use std::any::Any;
use std::collections::HashMap;
use shared::{Answer, Solution};
use regex::{Regex, Captures};
use regex::{Regex};
pub struct Day02;
const POSSIBLE: HashMap<&str, u64> = HashMap::from([
("red", 12),
("green", 13),
("blue", 14)
]);
const POSSIBLE_RED : u64 = 12;
const POSSIBLE_BLUE : u64 = 14;
const POSSIBLE_GREEN : u64 = 13;
@ -27,28 +19,52 @@ impl Solution for Day02 {
let mut sum: u64 = 0;
for (i, game) in games.iter().enumerate() {
let mut max_red : u64 = 0;
let mut max_blue : u64 = 0;
let mut max_green : u64 = 0;
let mut max_red: u64 = 0;
let mut max_blue: u64 = 0;
let mut max_green: u64 = 0;
for m in re.captures_iter(&game) {
match m.extract() {
Some("red") => max_red = max_red.max(m[1].parse::<u64>().unwrap()),
Some("blue") => max_blue = max_blue.max(m[1].parse::<u64>().unwrap()),
Some("green") => max_green = max_green.max(m[1].parse::<u64>().unwrap()),
_ => (),
match m.extract::<2>().1 {
[n, "red"] => max_red = max_red.max(n.parse::<u64>().unwrap()),
[n, "blue"] => max_blue = max_blue.max(n.parse::<u64>().unwrap()),
[n, "green"] => max_green = max_green.max(n.parse::<u64>().unwrap()),
other => println!("{:?}", other),
}
}
if max_red <= POSSIBLE_RED && max_blue <= POSSIBLE_BLUE && max_green <= POSSIBLE_GREEN {
sum += i + 1;
sum += (i as u64) + 1;
}
}
sum
Answer::from(sum)
}
fn part_2(&self, input: &str) -> Answer {
Answer::Unimplemented
let games: Vec<&str> = input.split("\n")
.collect();
let re = Regex::new(r"(\d+) (\w+)").unwrap();
let mut sum: u64 = 0;
for (i, game) in games.iter().enumerate() {
let mut min_red: u64 = 0;
let mut min_blue: u64 = 0;
let mut min_green: u64 = 0;
for m in re.captures_iter(&game) {
match m.extract::<2>().1 {
[n, "red"] => min_red = min_red.max(n.parse::<u64>().unwrap()),
[n, "blue"] => min_blue = min_blue.max(n.parse::<u64>().unwrap()),
[n, "green"] => min_green = min_green.max(n.parse::<u64>().unwrap()),
other => println!("{:?}", other),
}
}
sum += min_red * min_blue * min_green;
}
Answer::from(sum)
}
}

32
aoc2023/src/day03.rs Normal file
View file

@ -0,0 +1,32 @@
use std::net::Shutdown::Read;
use shared::{Answer, Solution};
use regex::Regex;
pub struct Day03;
impl Solution for Day03 {
fn part_1(&self, input: &str) -> Answer {
let lines = input.split("\n").collect();
let pattern = Regex::new(
// r"[^\d.^]?(\d+)[\d.]|[^\d.](\d+)[\d.$]?"
r"(\d+)"
).unwrap();
let mut sum: u64 = 0;
for i in 0..lines.len() {
for m in pattern.find_iter(lines[i]) {
match lines.get(i-1) {
Some()
}
}
}
Answer::Unimplemented
}
fn part_2(&self, input: &str) -> Answer {
todo!()
}
}

View file

@ -1,4 +1,3 @@
use shared::Solution;
pub mod day01;
pub mod day02;
mod day03;