Skip to content

Commit b28c759

Browse files
committed
Rust single binary
1 parent f52e877 commit b28c759

File tree

7 files changed

+380
-4
lines changed

7 files changed

+380
-4
lines changed

2018/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
![AoC2018](https://img.shields.io/badge/Advent_of_Code-2018-8A2BE2)
44
![Stars: 50](https://img.shields.io/badge/Stars-50⭐-blue)
5-
![Rust: 26](https://img.shields.io/badge/Rust-26-cyan?logo=Rust)
5+
![Rust: 27](https://img.shields.io/badge/Rust-27-cyan?logo=Rust)
66
![Python: 4](https://img.shields.io/badge/Python-4-cyan?logo=Python)
77

88
## 2018 ([Calendar](https://adventofcode.com/2018)) ([Solutions](../2018/)) : 50⭐
@@ -17,7 +17,7 @@ Puzzle
1717
[Day 6: Chronal Coordinates](https://adventofcode.com/2018/day/6) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2018/day6/day6.rs)
1818
[Day 7: The Sum of Its Parts](https://adventofcode.com/2018/day/7) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2018/day7/day7.rs)
1919
[Day 8: Memory Maneuver](https://adventofcode.com/2018/day/8) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2018/day8/day8.rs) [![Python](../scripts/assets/python.png)](../2018/day8/day8.py)
20-
[Day 9: Marble Mania](https://adventofcode.com/2018/day/9) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2018/day9/day9.rs) [![C](../scripts/assets/c.png)](../2018/day9/day9.c)
20+
[Day 9: Marble Mania](https://adventofcode.com/2018/day/9) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2018/day9/day9.rs) [![Rust](../scripts/assets/rust.png)](../2018/day9_c/day9.rs) [![C](../scripts/assets/c.png)](../2018/day9_c/day9.c)
2121
[Day 10: The Stars Align](https://adventofcode.com/2018/day/10) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2018/day10/day10.rs)
2222
[Day 11: Chronal Charge](https://adventofcode.com/2018/day/11) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2018/day11/day11.rs)
2323
[Day 12: Subterranean Sustainability](https://adventofcode.com/2018/day/12) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2018/day12/day12.rs)
@@ -32,5 +32,5 @@ Puzzle
3232
[Day 21: Chronal Conversion](https://adventofcode.com/2018/day/21) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2018/day21/day21.rs)
3333
[Day 22: Mode Maze](https://adventofcode.com/2018/day/22) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2018/day22/day22.rs)
3434
[Day 23: Experimental Emergency Teleportation](https://adventofcode.com/2018/day/23) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2018/day23/day23.rs) [![Rust](../scripts/assets/rust.png)](../2018/day23_z3/day23.rs)
35-
[Day 24: Immune System Simulator 20XX](https://adventofcode.com/2018/day/24) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2018/day24/src/main.rs)
35+
[Day 24: Immune System Simulator 20XX](https://adventofcode.com/2018/day/24) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2018/day24/day24.rs)
3636
[Day 25: Four-Dimensional Adventure](https://adventofcode.com/2018/day/25) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2018/day25/day25.rs)

2019/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Puzzle
2626
[Day 15: Oxygen System](https://adventofcode.com/2019/day/15) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2019/day15/day15.rs) [![Python](../scripts/assets/python.png)](../2019/day15/day15.py) [🎁](../2019/day15/README.md)
2727
[Day 16: Flawed Frequency Transmission](https://adventofcode.com/2019/day/16) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2019/day16/day16.rs) [![Python](../scripts/assets/python.png)](../2019/day16/day16.py) [![C](../scripts/assets/c.png)](../2019/day16/day16.c)
2828
[Day 17: Set and Forget](https://adventofcode.com/2019/day/17) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2019/day17/day17.rs) [![Python](../scripts/assets/python.png)](../2019/day17/day17.py)
29-
[Day 18: Many-Worlds Interpretation](https://adventofcode.com/2019/day/18) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2019/day18/src/main.rs)
29+
[Day 18: Many-Worlds Interpretation](https://adventofcode.com/2019/day/18) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2019/day18/day18.rs)
3030
[Day 19: Tractor Beam](https://adventofcode.com/2019/day/19) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2019/day19/day19.rs) [![Python](../scripts/assets/python.png)](../2019/day19/day19.py)
3131
[Day 20: Donut Maze](https://adventofcode.com/2019/day/20) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2019/day20/day20.rs) [![Python](../scripts/assets/python.png)](../2019/day20/day20.py)
3232
[Day 21: Springdroid Adventure](https://adventofcode.com/2019/day/21) | ⭐⭐ | [![Rust](../scripts/assets/rust.png)](../2019/day21/day21.rs) [![Python](../scripts/assets/python.png)](../2019/day21/day21.py)

one/Cargo.toml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
[package]
2+
name = "one"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[features]
7+
ascii = []
8+
anim = ["image"]
9+
10+
[dependencies]
11+
aoc = { path = "../aoc" }
12+
assembunny = { path = "../2016/assembunny/" }
13+
intcode = { path = "../2019/intcode-rs/" }
14+
15+
rustc-hash = "*"
16+
colored = "*"
17+
pest = { version = "*", default-features = false }
18+
pest_derive = { version = "*", default-features = true }
19+
petgraph = "*"
20+
rand = "*"
21+
regex = "*"
22+
rustworkx-core = "*"
23+
scan_fmt = "*"
24+
serde_json = "*"
25+
strum = { version = "*", features = ["strum_macros", "derive"] }
26+
strum_macros = "*"
27+
text_io = "*"
28+
z3 = "*"
29+
nom = "*"
30+
num = "*"
31+
num-traits = "*"
32+
itertools = "*"
33+
lazy_static = "*"
34+
md5 = "*"
35+
image = { version = "*", optional = true }
36+
indicatif = "*"
37+
fraction = "*"
38+
geo = "*"
39+
geo-types = "*"
40+
bytecount = "*"
41+
divisors = "*"

one/build.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
fn main() {
2+
// Buy a Mac 
3+
println!(r"cargo:rustc-link-search=/opt/homebrew/lib");
4+
}

one/m.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#!/usr/bin/env python3
2+
3+
from pathlib import Path
4+
5+
6+
def gen(year):
7+
for src_dir in Path(f"../{year}").glob("day*"):
8+
if "_" in src_dir.name:
9+
continue
10+
11+
src_file = src_dir / (src_dir.name + ".rs")
12+
dest_dir = Path(f"src/year{year}") / src_dir.name
13+
dest_dir.mkdir(parents=True, exist_ok=True)
14+
15+
for txt in src_file.parent.glob("*.txt"):
16+
(dest_dir / txt.name).write_bytes(txt.read_bytes())
17+
18+
dest_file = dest_dir / (src_dir.name + ".rs")
19+
if src_file.is_file():
20+
21+
rs = src_file.read_text()
22+
rs = rs.replace('#[grammar = "day8.pest"]', '#[grammar = "src/year2017/day8/day8.pest"]')
23+
rs = rs.replace("\nfn main() {", "\npub fn main() {")
24+
rs = rs.replace("\nfn solve(", "\n#[must_use]\npub fn solve(")
25+
26+
dest_file.write_text(rs)
27+
28+
for txt in src_file.parent.glob("*.rs"):
29+
if txt.name != dest_file.name:
30+
z = dest_dir / dest_file.stem
31+
z.mkdir(parents=True, exist_ok=True)
32+
(z / txt.name).write_bytes(txt.read_bytes())
33+
34+
for txt in src_file.parent.glob("*.txt"):
35+
(dest_dir / txt.name).write_bytes(txt.read_bytes())
36+
37+
for txt in src_file.parent.glob("*.pest"):
38+
(dest_dir / txt.name).write_bytes(txt.read_bytes())
39+
40+
41+
gen(2015)
42+
gen(2016)
43+
gen(2017)
44+
gen(2018)
45+
gen(2019)
46+
gen(2020)
47+
gen(2021)
48+
gen(2022)
49+
gen(2023)
50+
gen(2024)

one/src/lib.rs

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
use std::iter::empty;
2+
3+
/// Get the array of all available solutions.
4+
#[must_use]
5+
pub fn solutions() -> Vec<Solution> {
6+
empty()
7+
.chain(year2015())
8+
.chain(year2016())
9+
.chain(year2017())
10+
.chain(year2018())
11+
.chain(year2019())
12+
.chain(year2020())
13+
.chain(year2021())
14+
.chain(year2022())
15+
.chain(year2024())
16+
.collect()
17+
}
18+
19+
/// A solution for given year and day.
20+
/// Offer two callbacks:
21+
/// - `solve` that takes the puzzle input and returns part one and two
22+
/// - `main` that acts like a standalone program for the given day
23+
#[derive(Clone)]
24+
pub struct Solution {
25+
pub year: u16,
26+
pub day: u8,
27+
pub solve: fn(&str) -> (String, String),
28+
pub main: fn() -> (),
29+
}
30+
31+
macro_rules! make_year {
32+
($year:tt $($day:tt),*) => {
33+
mod $year {
34+
$(pub mod $day { pub mod $day; })*
35+
}
36+
37+
#[must_use]
38+
pub fn $year() -> Vec<Solution> {
39+
vec![$({
40+
let year = stringify!($year)[4..].parse().unwrap();
41+
let day = stringify!($day)[3..].parse().unwrap();
42+
43+
let solve = |data: &str| {
44+
use crate::$year::$day::$day::solve;
45+
let (part1, part2) = solve(data);
46+
(part1.to_string(), part2.to_string())
47+
};
48+
49+
let main = || {
50+
use crate::$year::$day::$day::main;
51+
main();
52+
};
53+
54+
Solution { year, day, solve, main }
55+
},)*]
56+
}
57+
}
58+
}
59+
60+
make_year!(year2015
61+
day1,day2,day3,day4,day5,day6,day7,day8,day9,day10,day11,day12,day13,
62+
day14,day15,day16,day17,day18,day19,day20,day21,day22,day23,day24,day25
63+
);
64+
65+
make_year!(year2016
66+
day1,day2,day3,day4,day5,day6,day7,day8,day9,day10,day11,day12,day13,
67+
day14,day15,day16,day17,day18,day19,day20,day21,day22,day23,day24,day25
68+
);
69+
70+
make_year!(year2017
71+
day1,day2,day3,day4,day5,day6,day7,day8,day9,day10,day11,day12,day13,
72+
day14,day15,day16,day17,day18,day19,day20,day21,day22,day23,day24,day25
73+
);
74+
75+
make_year!(year2018
76+
day1,day2,day3,day4,day5,day6,day7,day8,day9,day10,day11,day12,day13,
77+
day14,day15,day16,day17,day18,day19,day20,day21,day22,day23,day24,day25
78+
);
79+
80+
make_year!(year2019
81+
day1,day2,day3,day4,day5,day6,day7,day8,day9,day10,day11,day12,day13,
82+
day14,day15,day16,day17,day18,day19,day20,day21,day22,day23,day24,day25
83+
);
84+
85+
make_year!(year2020
86+
day1,day2,day3,day4,day5,day6,day7,day8,day9,day10,day11,day12,day13,
87+
day14,day15,day16,day17,day18,day19,day20,day21,day22,day23,day24,day25
88+
);
89+
90+
make_year!(year2021
91+
day1,day2,day3,day4,day5,day6,day7,day8,day9,day10,day11,day12,day13,
92+
day14,day15,day16,day17,day18,day19,day20,day21,day22,day23,day24,day25
93+
);
94+
95+
make_year!(year2022
96+
day1,day2,day3,day4,day5,day6,day7,day8,day9,day10,day11,day12,day13,
97+
day14,day15,day16,day17,day18,day19,day20,day21,day22,day23,day24,day25
98+
);
99+
100+
make_year!(year2023
101+
day1,day2,day3,day4,day5,day6,day7,day8,day9,day10,day11,day12,day13,
102+
day14,day15,day16,day17,day18,day19,day20,day21,day22,day23,day24,day25
103+
);
104+
105+
make_year!(year2024
106+
day1,day2,day3,day4,day5,day6,day7,day8,day9,day10,day11,day12,day13,
107+
day14,day15,day16,day17,day18,day19,day20,day21,day22,day23,day24,day25
108+
);

0 commit comments

Comments
 (0)