tangled
alpha
login
or
join now
thecoded.prof
/
aoc
0
fork
atom
Advent of Code
0
fork
atom
overview
issues
pulls
pipelines
feat: setup & day 1
thecoded.prof
3 months ago
4a7192ae
1414ea66
verified
This commit was signed with the committer's
known signature
.
thecoded.prof
SSH Key Fingerprint:
SHA256:ePn0u8NlJyz3J4Zl9MHOYW3f4XKoi5K1I4j53bwpG0U=
+115
8 changed files
expand all
collapse all
unified
split
2025
.gitignore
Cargo.lock
Cargo.toml
src
days
mod.rs
one
mod.rs
secret_entrance.rs
lib.rs
main.rs
+2
2025/.gitignore
···
1
1
+
/target
2
2
+
inputs
+16
2025/Cargo.lock
···
1
1
+
# This file is automatically @generated by Cargo.
2
2
+
# It is not intended for manual editing.
3
3
+
version = 4
4
4
+
5
5
+
[[package]]
6
6
+
name = "anyhow"
7
7
+
version = "1.0.100"
8
8
+
source = "registry+https://github.com/rust-lang/crates.io-index"
9
9
+
checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
10
10
+
11
11
+
[[package]]
12
12
+
name = "aoc2025"
13
13
+
version = "0.1.0"
14
14
+
dependencies = [
15
15
+
"anyhow",
16
16
+
]
+7
2025/Cargo.toml
···
1
1
+
[package]
2
2
+
name = "aoc2025"
3
3
+
version = "0.1.0"
4
4
+
edition = "2024"
5
5
+
6
6
+
[dependencies]
7
7
+
anyhow = "1.0.100"
+1
2025/src/days/mod.rs
···
1
1
+
pub mod one;
+1
2025/src/days/one/mod.rs
···
1
1
+
pub mod secret_entrance;
+37
2025/src/days/one/secret_entrance.rs
···
1
1
+
pub fn main() -> anyhow::Result<()> {
2
2
+
crate::run("Secret Entrance", "inputs/day1.txt", parse, part_a, part_b)
3
3
+
}
4
4
+
5
5
+
fn parse(input: &str) -> Vec<i32> {
6
6
+
input
7
7
+
.lines()
8
8
+
.filter(|line| !line.is_empty())
9
9
+
.filter_map(|line| line.replace("L", "-").replace("R", "").parse().ok())
10
10
+
.collect()
11
11
+
}
12
12
+
13
13
+
fn part_a(input: Vec<i32>) -> usize {
14
14
+
input
15
15
+
.iter()
16
16
+
.scan(50, |state, &rotation| {
17
17
+
*state += rotation;
18
18
+
Some(*state)
19
19
+
})
20
20
+
.filter(|&state| state % 100 == 0)
21
21
+
.count()
22
22
+
}
23
23
+
24
24
+
fn part_b(input: Vec<i32>) -> usize {
25
25
+
input
26
26
+
.iter()
27
27
+
.scan(50, |state, &rotation| {
28
28
+
let mut passes = (rotation / 100).abs() as usize;
29
29
+
let turn = rotation % 100;
30
30
+
if *state + turn <= 0 && *state != 0 || 99 < *state + turn {
31
31
+
passes += 1;
32
32
+
}
33
33
+
*state = (*state + turn).rem_euclid(100);
34
34
+
Some(passes)
35
35
+
})
36
36
+
.sum()
37
37
+
}
+47
2025/src/lib.rs
···
1
1
+
pub mod days;
2
2
+
3
3
+
use std::{fmt::Display, fs, time::Instant};
4
4
+
5
5
+
use anyhow::Result;
6
6
+
7
7
+
pub fn run<T, P, A, B, RA, RB>(
8
8
+
name: &str,
9
9
+
input_path: &str,
10
10
+
parse: P,
11
11
+
part_a: A,
12
12
+
part_b: B,
13
13
+
) -> Result<()>
14
14
+
where
15
15
+
T: Clone,
16
16
+
P: Fn(&str) -> T,
17
17
+
A: Fn(T) -> RA,
18
18
+
B: Fn(T) -> RB,
19
19
+
RA: Display,
20
20
+
RB: Display,
21
21
+
{
22
22
+
let input = parse(&fs::read_to_string(input_path)?);
23
23
+
24
24
+
let label_a = format!("{name} Part A");
25
25
+
println!("{label_a}");
26
26
+
println!("{}", "-".repeat(label_a.len()));
27
27
+
let part_a_start = Instant::now();
28
28
+
println!("Part A answer: {}", part_a(input.clone()));
29
29
+
let part_a_elapsed = part_a_start.elapsed();
30
30
+
println!("Part A time: {:?}", part_a_elapsed);
31
31
+
32
32
+
println!();
33
33
+
34
34
+
let label_b = format!("{name} Part B");
35
35
+
println!("{label_b}");
36
36
+
println!("{}", "-".repeat(label_b.len()));
37
37
+
let part_b_start = Instant::now();
38
38
+
println!("Part B answer: {}", part_b(input.clone()));
39
39
+
let part_b_elapsed = part_b_start.elapsed();
40
40
+
println!("Part B time: {:?}", part_b_elapsed);
41
41
+
42
42
+
println!();
43
43
+
44
44
+
println!("Total time: {:?}", part_a_elapsed + part_b_elapsed);
45
45
+
46
46
+
Ok(())
47
47
+
}
+4
2025/src/main.rs
···
1
1
+
fn main() -> anyhow::Result<()> {
2
2
+
aoc2025::days::one::secret_entrance::main()?;
3
3
+
Ok(())
4
4
+
}