Skip to content

Commit 892b140

Browse files
committed
2025: day 12
1 parent ee1d6d3 commit 892b140

File tree

6 files changed

+138
-36
lines changed

6 files changed

+138
-36
lines changed

README.md

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# [Advent of Code](https://adventofcode.com) in Rust 🦀
22

3-
![Stars: 522](https://img.shields.io/badge/Stars-522⭐-blue)
4-
![Rust: 261](https://img.shields.io/badge/Rust-261-cyan?logo=Rust)
3+
![Stars: 524](https://img.shields.io/badge/Stars-524⭐-blue)
4+
![Rust: 262](https://img.shields.io/badge/Rust-262-cyan?logo=Rust)
55
![Python: 127](https://img.shields.io/badge/Python-127-cyan?logo=Python)
66

77
<img src="./scripts/assets/christmas_ferris_2015_2024.png" alt="Christmas Ferris" width="164" />
@@ -10,27 +10,28 @@
1010

1111
Made for fun 😎 and to practice Rust. Many thanks to [Eric Wastl](https://twitter.com/ericwastl).
1212

13-
## 2025 (current event) ([Calendar](https://adventofcode.com/2025)) ([Solutions](src/year2025/)) : 22⭐
14-
15-
Puzzle | Stars | Languages
16-
----------------------------------------------------------------- | ----- | -----------
17-
[Day 1: Secret Entrance](https://adventofcode.com/2025/day/1) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day1/day1.rs) [![Python](./scripts/assets/python.png)](src/year2025/day1/day1.py) [![C](./scripts/assets/c.png)](src/year2025/day1/day1.c) [![Go](./scripts/assets/go.png)](src/year2025/day1/day1.go)
18-
[Day 2: Gift Shop](https://adventofcode.com/2025/day/2) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day2/day2.rs) [![Python](./scripts/assets/python.png)](src/year2025/day2/day2.py) [![Go](./scripts/assets/go.png)](src/year2025/day2/day2.go)
19-
[Day 3: Lobby](https://adventofcode.com/2025/day/3) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day3/day3.rs) [![Python](./scripts/assets/python.png)](src/year2025/day3/day3.py) [![Go](./scripts/assets/go.png)](src/year2025/day3/day3.go)
20-
[Day 4: Printing Department](https://adventofcode.com/2025/day/4) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day4/day4.rs) [![Python](./scripts/assets/python.png)](src/year2025/day4/day4.py) [![Go](./scripts/assets/go.png)](src/year2025/day4/day4.go)
21-
[Day 5: Cafeteria](https://adventofcode.com/2025/day/5) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day5/day5.rs) [![Go](./scripts/assets/go.png)](src/year2025/day5/day5.go)
22-
[Day 6: Trash Compactor](https://adventofcode.com/2025/day/6) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day6/day6.rs) [![Rust](./scripts/assets/rust.png)](src/year2025/day6/day6_declarative.rs) [![Python](./scripts/assets/python.png)](src/year2025/day6/day6.py)
23-
[Day 7: Laboratories](https://adventofcode.com/2025/day/7) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day7/day7.rs) [![Go](./scripts/assets/go.png)](src/year2025/day7/day7.go) [🎁](src/year2025/day7/README.md)
24-
[Day 8: Playground](https://adventofcode.com/2025/day/8) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day8/day8.rs)
25-
[Day 9: Movie Theater](https://adventofcode.com/2025/day/9) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day9/day9.rs) [![Rust](./scripts/assets/rust.png)](src/year2025/day9/day9_geo.rs) [![Python](./scripts/assets/python.png)](src/year2025/day9/day9_img.py) [🎁](src/year2025/day9/README.md)
26-
[Day 10: Factory](https://adventofcode.com/2025/day/10) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day10/day10.rs)
27-
[Day 11: Reactor](https://adventofcode.com/2025/day/11) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day11/day11.rs)
13+
## 2025 (current event) ([Calendar](https://adventofcode.com/2025)) ([Solutions](src/year2025/)) : 24⭐
14+
15+
Puzzle | Stars | Languages
16+
------------------------------------------------------------------- | ----- | -----------
17+
[Day 1: Secret Entrance](https://adventofcode.com/2025/day/1) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day1/day1.rs) [![Python](./scripts/assets/python.png)](src/year2025/day1/day1.py) [![C](./scripts/assets/c.png)](src/year2025/day1/day1.c) [![Go](./scripts/assets/go.png)](src/year2025/day1/day1.go)
18+
[Day 2: Gift Shop](https://adventofcode.com/2025/day/2) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day2/day2.rs) [![Python](./scripts/assets/python.png)](src/year2025/day2/day2.py) [![Go](./scripts/assets/go.png)](src/year2025/day2/day2.go)
19+
[Day 3: Lobby](https://adventofcode.com/2025/day/3) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day3/day3.rs) [![Python](./scripts/assets/python.png)](src/year2025/day3/day3.py) [![Go](./scripts/assets/go.png)](src/year2025/day3/day3.go)
20+
[Day 4: Printing Department](https://adventofcode.com/2025/day/4) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day4/day4.rs) [![Python](./scripts/assets/python.png)](src/year2025/day4/day4.py) [![Go](./scripts/assets/go.png)](src/year2025/day4/day4.go)
21+
[Day 5: Cafeteria](https://adventofcode.com/2025/day/5) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day5/day5.rs) [![Go](./scripts/assets/go.png)](src/year2025/day5/day5.go)
22+
[Day 6: Trash Compactor](https://adventofcode.com/2025/day/6) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day6/day6.rs) [![Rust](./scripts/assets/rust.png)](src/year2025/day6/day6_declarative.rs) [![Python](./scripts/assets/python.png)](src/year2025/day6/day6.py)
23+
[Day 7: Laboratories](https://adventofcode.com/2025/day/7) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day7/day7.rs) [![Go](./scripts/assets/go.png)](src/year2025/day7/day7.go) [🎁](src/year2025/day7/README.md)
24+
[Day 8: Playground](https://adventofcode.com/2025/day/8) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day8/day8.rs)
25+
[Day 9: Movie Theater](https://adventofcode.com/2025/day/9) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day9/day9.rs) [![Rust](./scripts/assets/rust.png)](src/year2025/day9/day9_geo.rs) [![Python](./scripts/assets/python.png)](src/year2025/day9/day9_img.py) [🎁](src/year2025/day9/README.md)
26+
[Day 10: Factory](https://adventofcode.com/2025/day/10) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day10/day10.rs)
27+
[Day 11: Reactor](https://adventofcode.com/2025/day/11) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day11/day11.rs)
28+
[Day 12: Christmas Tree Farm](https://adventofcode.com/2025/day/12) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2025/day12/day12.rs)
2829

2930
## All years
3031

3132
Calendar | Solutions | Stars | Rust | Python | 🎁
3233
-------- | --------- | ----- | ---- | ------ | --
33-
[Advent of Code 2025](https://adventofcode.com/2025) | [Solutions](src/year2025/README.md) | 22⭐ | 11 | 5 | 2
34+
[Advent of Code 2025](https://adventofcode.com/2025) | [Solutions](src/year2025/README.md) | 24⭐ | 12 | 5 | 2
3435
[Advent of Code 2024](https://adventofcode.com/2024) | [Solutions](src/year2024/README.md) | 50⭐ | 25 | 11 | 3
3536
[Advent of Code 2023](https://adventofcode.com/2023) | [Solutions](src/year2023/README.md) | 50⭐ | 25 | 10 | 2
3637
[Advent of Code 2022](https://adventofcode.com/2022) | [Solutions](src/year2022/README.md) | 50⭐ | 25 | 18 | 1

scripts/runall.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,21 @@ def aoc_available_puzzles(
7575
return puzzles
7676

7777

78+
def aoc_nb_answers(year: int, day: int) -> int:
79+
if year < 2025:
80+
if day == 25:
81+
return 1
82+
if 1 <= day <= 24:
83+
return 2
84+
return 0
85+
else:
86+
if day == 12:
87+
return 1
88+
if 1 <= day <= 11:
89+
return 2
90+
return 0
91+
92+
7893
class Env:
7994
"""
8095
Variables that can be overridden by environment variables.
@@ -797,7 +812,7 @@ def run_day(
797812
timing_status = "☽" if in_cache else " "
798813

799814
if (not in_cache and not dry_run) or refresh:
800-
nb_expected = 1 if day == 25 else 2
815+
nb_expected = aoc_nb_answers(year, day)
801816

802817
cached_e = e
803818

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,5 +127,5 @@ make_year!(year2024
127127
);
128128

129129
make_year!(year2025
130-
day1,day2,day3,day4,day5,day6,day7,day8,day9,day10,day11
130+
day1,day2,day3,day4,day5,day6,day7,day8,day9,day10,day11,day12
131131
);

src/year2025/README.md

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
11
# Advent of Code in Rust 🦀
22

33
![AoC2025](https://img.shields.io/badge/Advent_of_Code-2025-8A2BE2)
4-
![Stars: 22](https://img.shields.io/badge/Stars-22⭐-blue)
5-
![Rust: 13](https://img.shields.io/badge/Rust-13-cyan?logo=Rust)
4+
![Stars: 24](https://img.shields.io/badge/Stars-24⭐-blue)
5+
![Rust: 14](https://img.shields.io/badge/Rust-14-cyan?logo=Rust)
66
![Python: 6](https://img.shields.io/badge/Python-6-cyan?logo=Python)
77

8-
## 2025 ([Calendar](https://adventofcode.com/2025)) ([Solutions](./)) : 22
8+
## 2025 ([Calendar](https://adventofcode.com/2025)) ([Solutions](./)) : 24
99

10-
Puzzle | Stars | Languages
11-
----------------------------------------------------------------- | ----- | -----------
12-
[Day 1: Secret Entrance](https://adventofcode.com/2025/day/1) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day1/day1.rs) [![Python](../../scripts/assets/python.png)](day1/day1.py) [![C](../../scripts/assets/c.png)](day1/day1.c) [![Go](../../scripts/assets/go.png)](day1/day1.go)
13-
[Day 2: Gift Shop](https://adventofcode.com/2025/day/2) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day2/day2.rs) [![Python](../../scripts/assets/python.png)](day2/day2.py) [![Go](../../scripts/assets/go.png)](day2/day2.go)
14-
[Day 3: Lobby](https://adventofcode.com/2025/day/3) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day3/day3.rs) [![Python](../../scripts/assets/python.png)](day3/day3.py) [![Go](../../scripts/assets/go.png)](day3/day3.go)
15-
[Day 4: Printing Department](https://adventofcode.com/2025/day/4) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day4/day4.rs) [![Python](../../scripts/assets/python.png)](day4/day4.py) [![Go](../../scripts/assets/go.png)](day4/day4.go)
16-
[Day 5: Cafeteria](https://adventofcode.com/2025/day/5) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day5/day5.rs) [![Go](../../scripts/assets/go.png)](day5/day5.go)
17-
[Day 6: Trash Compactor](https://adventofcode.com/2025/day/6) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day6/day6.rs) [![Rust](../../scripts/assets/rust.png)](day6/day6_declarative.rs) [![Python](../../scripts/assets/python.png)](day6/day6.py)
18-
[Day 7: Laboratories](https://adventofcode.com/2025/day/7) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day7/day7.rs) [![Go](../../scripts/assets/go.png)](day7/day7.go) [🎁](day7/README.md)
19-
[Day 8: Playground](https://adventofcode.com/2025/day/8) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day8/day8.rs)
20-
[Day 9: Movie Theater](https://adventofcode.com/2025/day/9) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day9/day9.rs) [![Rust](../../scripts/assets/rust.png)](day9/day9_geo.rs) [![Python](../../scripts/assets/python.png)](day9/day9_img.py) [🎁](day9/README.md)
21-
[Day 10: Factory](https://adventofcode.com/2025/day/10) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day10/day10.rs)
22-
[Day 11: Reactor](https://adventofcode.com/2025/day/11) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day11/day11.rs)
10+
Puzzle | Stars | Languages
11+
------------------------------------------------------------------- | ----- | -----------
12+
[Day 1: Secret Entrance](https://adventofcode.com/2025/day/1) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day1/day1.rs) [![Python](../../scripts/assets/python.png)](day1/day1.py) [![C](../../scripts/assets/c.png)](day1/day1.c) [![Go](../../scripts/assets/go.png)](day1/day1.go)
13+
[Day 2: Gift Shop](https://adventofcode.com/2025/day/2) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day2/day2.rs) [![Python](../../scripts/assets/python.png)](day2/day2.py) [![Go](../../scripts/assets/go.png)](day2/day2.go)
14+
[Day 3: Lobby](https://adventofcode.com/2025/day/3) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day3/day3.rs) [![Python](../../scripts/assets/python.png)](day3/day3.py) [![Go](../../scripts/assets/go.png)](day3/day3.go)
15+
[Day 4: Printing Department](https://adventofcode.com/2025/day/4) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day4/day4.rs) [![Python](../../scripts/assets/python.png)](day4/day4.py) [![Go](../../scripts/assets/go.png)](day4/day4.go)
16+
[Day 5: Cafeteria](https://adventofcode.com/2025/day/5) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day5/day5.rs) [![Go](../../scripts/assets/go.png)](day5/day5.go)
17+
[Day 6: Trash Compactor](https://adventofcode.com/2025/day/6) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day6/day6.rs) [![Rust](../../scripts/assets/rust.png)](day6/day6_declarative.rs) [![Python](../../scripts/assets/python.png)](day6/day6.py)
18+
[Day 7: Laboratories](https://adventofcode.com/2025/day/7) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day7/day7.rs) [![Go](../../scripts/assets/go.png)](day7/day7.go) [🎁](day7/README.md)
19+
[Day 8: Playground](https://adventofcode.com/2025/day/8) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day8/day8.rs)
20+
[Day 9: Movie Theater](https://adventofcode.com/2025/day/9) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day9/day9.rs) [![Rust](../../scripts/assets/rust.png)](day9/day9_geo.rs) [![Python](../../scripts/assets/python.png)](day9/day9_img.py) [🎁](day9/README.md)
21+
[Day 10: Factory](https://adventofcode.com/2025/day/10) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day10/day10.rs)
22+
[Day 11: Reactor](https://adventofcode.com/2025/day/11) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day11/day11.rs)
23+
[Day 12: Christmas Tree Farm](https://adventofcode.com/2025/day/12) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day12/day12.rs)

src/year2025/day12/day12.rs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
//! [Day 12: Christmas Tree Farm](https://adventofcode.com/2025/day/12)
2+
3+
/// # Panics
4+
#[must_use]
5+
pub fn solve(data: &str) -> (usize, aoc::Christmas) {
6+
let part1 = data
7+
.split("\n\n")
8+
.map(|s| {
9+
if s.contains('x') {
10+
s.lines()
11+
.map(|line| {
12+
let (size, counts) = line.split_once(": ").unwrap();
13+
let (width, height) = size.split_once('x').unwrap();
14+
15+
let size: usize =
16+
width.parse::<usize>().unwrap() * height.parse::<usize>().unwrap();
17+
18+
usize::from(
19+
size >= 9 * counts
20+
.split_ascii_whitespace()
21+
.map(|s| s.parse::<usize>().unwrap())
22+
.sum::<usize>(),
23+
)
24+
})
25+
.sum()
26+
} else {
27+
0
28+
}
29+
})
30+
.sum();
31+
32+
(part1, aoc::CHRISTMAS)
33+
}
34+
35+
pub fn main() {
36+
let args = aoc::parse_args();
37+
args.run(solve);
38+
}
39+
40+
#[cfg(test)]
41+
mod test {
42+
use super::*;
43+
44+
const TEST_INPUT: &str = include_str!("test.txt");
45+
46+
#[test]
47+
fn part1() {
48+
let (part1, _) = solve(TEST_INPUT);
49+
assert_ne!(part1, 0); // dummy solver does not work for test input
50+
// assert_eq!(part1, 3);
51+
}
52+
}

src/year2025/day12/test.txt

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
0:
2+
###
3+
##.
4+
##.
5+
6+
1:
7+
###
8+
##.
9+
.##
10+
11+
2:
12+
.##
13+
###
14+
##.
15+
16+
3:
17+
##.
18+
###
19+
##.
20+
21+
4:
22+
###
23+
#..
24+
###
25+
26+
5:
27+
###
28+
.#.
29+
###
30+
31+
4x4: 0 0 0 0 2 0
32+
12x5: 1 0 1 0 2 2
33+
12x5: 1 0 1 0 3 2

0 commit comments

Comments
 (0)