Skip to content

Commit 12e9637

Browse files
committed
Day 3 Rust solutions
1 parent 5172985 commit 12e9637

File tree

3 files changed

+66
-0
lines changed

3 files changed

+66
-0
lines changed

day-03/Cargo.toml

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
[package]
2+
name = "day-03"
3+
version = "0.1.0"
4+
edition = "2024"
5+
6+
[dependencies]
7+
regex = "1.11.1"
8+
9+
[[bin]]
10+
name = "03-1"
11+
path = "src/03-1.rs"
12+
13+
[[bin]]
14+
name = "03-2"
15+
path = "src/03-2.rs"

day-03/src/03-1.rs

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
use std::fs;
2+
use regex::Regex;
3+
4+
fn main() {
5+
let input = fs::read_to_string("../03.input").unwrap();
6+
let inst = Regex::new(r"mul\([0-9]+,[0-9]+\)").unwrap();
7+
8+
let score = inst.find_iter(&input)
9+
.map(|m| m.as_str())
10+
.map(|m| {
11+
let l = m.len();
12+
&m[4..l-1]
13+
})
14+
.map(|m| m.split(",")
15+
.map(|num| num.parse::<i64>().unwrap())
16+
.collect::<Vec<_>>())
17+
.map(|m| m[0] * m[1])
18+
.reduce(|a, b| a + b).unwrap();
19+
20+
println!("{score}");
21+
}

day-03/src/03-2.rs

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
use std::fs;
2+
use regex::Regex;
3+
4+
fn main() {
5+
let input = fs::read_to_string("../03.input").unwrap();
6+
let inst = Regex::new(r"do\(\)|don't\(\)|mul\([0-9]+,[0-9]+\)").unwrap();
7+
8+
let inst_iter = inst.find_iter(&input)
9+
.map(|m| m.as_str());
10+
11+
let mut enabled = true;
12+
let mut sum = 0;
13+
14+
for inst_str in inst_iter {
15+
if inst_str.contains(r"don't()") {
16+
enabled = false;
17+
} else if inst_str.contains(r"do()") {
18+
enabled = true;
19+
} else if enabled {
20+
let l = inst_str.len();
21+
let nums = inst_str[4..l-1]
22+
.split(",")
23+
.map(|num| num.parse::<i64>().unwrap())
24+
.collect::<Vec<_>>();
25+
sum += nums[0] * nums[1];
26+
}
27+
}
28+
29+
println!("{sum}");
30+
}

0 commit comments

Comments
 (0)