Skip to content

Commit a0df99d

Browse files
committed
2025/08
1 parent d9326ed commit a0df99d

File tree

6 files changed

+157
-47
lines changed

6 files changed

+157
-47
lines changed

2025/Day08/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
## --- Day 8: Playground ---
2+
Equipped with a new understanding of teleporter maintenance, you confidently step onto the repaired teleporter pad.
3+
4+
You rematerialize on an unfamiliar teleporter pad and find yourself in a vast underground space which contains a giant playground!
5+
6+
_Visit the website for the full story and [full puzzle](https://adventofcode.com/2025/day/8) description._

2025/Day08/Solution.cs

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
namespace AdventOfCode.Y2025.Day08;
2+
3+
using System.Collections.Generic;
4+
using System.Data;
5+
using System.Linq;
6+
7+
record Point(decimal x, decimal y, decimal z);
8+
9+
[ProblemName("Playground")]
10+
class Solution : Solver {
11+
12+
public object PartOne(string input) {
13+
// Apply 1000 steps of Kruskal's algorithm to the points using the specified
14+
// metric, then return the product of the sizes of the three largest components.
15+
var points = Parse(input);
16+
var setOf = points.ToDictionary(p => p, p => new HashSet<Point>([p]));
17+
foreach (var (a, b) in GetOrderedPairs(points).Take(1000)) {
18+
if (setOf[a] != setOf[b]) {
19+
Connect(a, b, setOf);
20+
}
21+
}
22+
return setOf.Values.Distinct()
23+
.OrderByDescending(set => set.Count)
24+
.Take(3)
25+
.Aggregate(1, (a, b) => a * b.Count);
26+
}
27+
28+
public object PartTwo(string input) {
29+
// Run Kruskal's algorithm on all points and return the product of the
30+
// x-coordinates of the last edge added to the spanning tree.
31+
var points = Parse(input);
32+
var componentCount = points.Length;
33+
var setOf = points.ToDictionary(p => p, p => new HashSet<Point>([p]));
34+
var res = 0m;
35+
foreach (var (a, b) in GetOrderedPairs(points).TakeWhile(_ => componentCount > 1)) {
36+
if (setOf[a] != setOf[b]) {
37+
Connect(a, b, setOf);
38+
res = a.x * b.x;
39+
componentCount--;
40+
}
41+
}
42+
return res;
43+
}
44+
45+
void Connect(Point a, Point b, Dictionary<Point, HashSet<Point>> setOf) {
46+
setOf[a].UnionWith(setOf[b]);
47+
foreach (var p in setOf[b]) {
48+
setOf[p] = setOf[a];
49+
}
50+
}
51+
52+
IEnumerable<(Point a, Point b)> GetOrderedPairs(Point[] points) =>
53+
from a in points
54+
from b in points
55+
where (a.x, a.y, a.z).CompareTo((b.x, b.y, b.z)) < 0
56+
orderby Metric(a,b)
57+
select (a, b);
58+
59+
decimal Metric(Point a, Point b) =>
60+
(a.x - b.x) * (a.x - b.x) +
61+
(a.y - b.y) * (a.y - b.y) +
62+
(a.z - b.z) * (a.z - b.z);
63+
64+
Point[] Parse(string input) => (
65+
from line in input.Split("\n")
66+
let parts = line.Split(",").Select(int.Parse).ToArray()
67+
select new Point(parts[0], parts[1], parts[2])
68+
).ToArray();
69+
}

2025/Day08/input.in

17.2 KB
Binary file not shown.

2025/Day08/input.refout

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
131150
2+
2497445

2025/SplashScreen.cs

Lines changed: 63 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ public void Show() {
88

99
var color = Console.ForegroundColor;
1010
Write(0xcc00, false, " ▄█▄ ▄▄█ ▄ ▄ ▄▄▄ ▄▄ ▄█▄ ▄▄▄ ▄█ ▄▄ ▄▄▄ ▄▄█ ▄▄▄\n █▄█ █ █ █ █ █▄█ █ █ █ █ █ █▄ ");
11-
Write(0xcc00, false, " █ █ █ █ █ █▄█\n █ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ // 2025\n \n ");
12-
Write(0xcc00, false, " ");
13-
Write(0xffffff, false, ".... ____ . ' ");
14-
Write(0xffff66, true, "* ");
15-
Write(0xffffff, false, "' ' . ' ");
11+
Write(0xcc00, false, " █ █ █ █ █ █▄█\n █ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ λy.2025\n \n ");
12+
Write(0xcc00, false, " ");
13+
Write(0xffffff, false, "' ____ ' . '' ");
14+
Write(0xffff66, true, "* ");
15+
Write(0xffffff, false, ".''. .' . ... ");
1616
Write(0xff9900, false, "<");
17-
Write(0xffffff, false, "o \n ________/");
17+
Write(0xffffff, false, "o ' . \n ________/");
1818
Write(0x999999, false, "O___");
1919
Write(0xffffff, false, "\\__________");
2020
Write(0xff0000, false, "|");
@@ -23,8 +23,8 @@ public void Show() {
2323
Write(0xffff66, false, "**\n ");
2424
Write(0x999999, false, "_______");
2525
Write(0xaabbcc, false, "||");
26-
Write(0x999999, false, "_________ ");
27-
Write(0x32211a, false, ".'. ' . ' '' . .. .' \n ");
26+
Write(0x999999, false, "_________ ");
27+
Write(0x32211a, false, "'.' ' . \n ' ");
2828
Write(0x999999, false, "| ");
2929
Write(0x9b715b, false, "_");
3030
Write(0xbb66ff, false, "@");
@@ -36,8 +36,7 @@ public void Show() {
3636
Write(0xff0000, false, "'.");
3737
Write(0x999999, false, "|_ _________________________ ");
3838
Write(0xcccccc, false, " 2 ");
39-
Write(0xffff66, false, "**\n ");
40-
Write(0x32211a, false, ". ");
39+
Write(0xffff66, false, "**\n ");
4140
Write(0x999999, false, "|_");
4241
Write(0xff0000, false, "&");
4342
Write(0x999999, false, "_");
@@ -61,8 +60,8 @@ public void Show() {
6160
Write(0x666666, false, ". ");
6261
Write(0xff0000, false, ".");
6362
Write(0x666666, false, ". ");
64-
Write(0x999999, false, "| \n ");
65-
Write(0x32211a, false, "' ' '. . ");
63+
Write(0x999999, false, "| \n ");
64+
Write(0x32211a, false, "' . ' . ");
6665
Write(0x999999, false, "\\_");
6766
Write(0xaabbcc, false, "]");
6867
Write(0x999999, false, "__");
@@ -78,8 +77,8 @@ public void Show() {
7877
Write(0xaabbcc, false, "//");
7978
Write(0x999999, false, "_| ");
8079
Write(0xcccccc, false, " 3 ");
81-
Write(0xffff66, false, "**\n ");
82-
Write(0x32211a, false, "' ' ' ? . ' .. ");
80+
Write(0xffff66, false, "**\n ");
81+
Write(0x32211a, false, ".' . . ' ' '''.. ");
8382
Write(0x999999, false, "____________");
8483
Write(0xaabbcc, false, "//");
8584
Write(0x999999, false, "___ \n __________________________ ");
@@ -136,20 +135,25 @@ public void Show() {
136135
Write(0x999999, false, "_");
137136
Write(0x9b715b, false, "T");
138137
Write(0x999999, false, "_");
139-
Write(0xaa7744, false, "...' ");
138+
Write(0xaa7744, false, "...' ");
139+
Write(0x32211a, false, ". .'.' ' . ");
140140
Write(0xcccccc, false, " 5 ");
141141
Write(0xffff66, false, "**\n ");
142142
Write(0x9900, false, "|| ");
143-
Write(0x999999, false, "____________ ");
144-
Write(0x32211a, false, "'");
145-
Write(0x666666, false, " _______________________ \n ");
146-
Write(0x999999, false, "_");
143+
Write(0x999999, false, "____________ ");
144+
Write(0x32211a, false, "' ");
145+
Write(0x999999, false, "_______________________ \n _");
147146
Write(0x9900, false, "||");
148147
Write(0x999999, false, "__/");
149148
Write(0xff0000, false, "'...' ");
150149
Write(0xff00, false, "'...' ");
151-
Write(0x999999, false, "\\_");
152-
Write(0x666666, false, " | |~ | ");
150+
Write(0x999999, false, "\\_ |");
151+
Write(0xff0000, false, ". ");
152+
Write(0x9b715b, false, "|");
153+
Write(0xff0000, false, "~ ");
154+
Write(0xff00, false, ".'");
155+
Write(0xff0000, false, "'. .");
156+
Write(0x999999, false, "| ");
153157
Write(0xcccccc, false, " 6 ");
154158
Write(0xffff66, false, "**\n ");
155159
Write(0x999999, false, "|");
@@ -158,8 +162,13 @@ public void Show() {
158162
Write(0x999999, false, "| ");
159163
Write(0xaabbcc, false, "1 2 3 ");
160164
Write(0x9900, false, "() ");
165+
Write(0x999999, false, "| | ");
166+
Write(0xff0000, false, "'..'");
167+
Write(0x9b715b, false, "/ \\");
168+
Write(0xff00, false, "'..' ");
169+
Write(0xff0000, false, "'..' ");
161170
Write(0x999999, false, "|");
162-
Write(0x666666, false, " | / \\ | \n ");
171+
Write(0x666666, false, "____ \n ");
163172
Write(0x999999, false, "|");
164173
Write(0xff0000, false, "&");
165174
Write(0xffff66, false, "%");
@@ -173,17 +182,41 @@ public void Show() {
173182
Write(0xaabbcc, false, "[]");
174183
Write(0x999999, false, "__");
175184
Write(0xffff66, false, "<>");
185+
Write(0x999999, false, "| | ");
186+
Write(0x9b715b, false, "|H_");
187+
Write(0x66ff, false, "/");
188+
Write(0x9b715b, false, "|");
189+
Write(0x66ff, false, "\\ ");
190+
Write(0xaabbcc, false, "\\\\\\\\\\\\ ");
176191
Write(0x999999, false, "|");
177-
Write(0x666666, false, " | |H_/|\\ \\\\\\\\\\\\ | ");
192+
Write(0x666666, false, " | | ");
178193
Write(0xcccccc, false, " 7 ");
179194
Write(0xffff66, false, "**\n '...");
180-
Write(0x333333, false, "|<>__|H__|_\\__|_____|_[ \n ");
181-
Write(0x666666, false, " 8\n \n ");
182-
Write(0x666666, false, " 9\n ");
183-
Write(0x666666, false, " \n 10\n ");
184-
Write(0x666666, false, " \n 1");
185-
Write(0x666666, false, "1\n \n ");
186-
Write(0x666666, false, " 12\n \n");
195+
Write(0x999999, false, "|");
196+
Write(0xffff66, false, "<>");
197+
Write(0x9900, false, "__");
198+
Write(0x9b715b, false, "|H");
199+
Write(0x9900, false, "__");
200+
Write(0x9b715b, false, "|");
201+
Write(0x9900, false, "_");
202+
Write(0x66ff, false, "\\");
203+
Write(0x9900, false, "__");
204+
Write(0xaabbcc, false, "|");
205+
Write(0x9900, false, "_____");
206+
Write(0xaabbcc, false, "|");
207+
Write(0x9900, false, "_");
208+
Write(0x9b715b, false, "[");
209+
Write(0x666666, false, "_O_| \n | ");
210+
Write(0xcccccc, false, " 8 ");
211+
Write(0xffff66, false, "**\n ");
212+
Write(0x333333, false, " _________________O__ \n | ");
213+
Write(0x333333, false, "[ ] | | ");
214+
Write(0x666666, false, " 9\n ");
215+
Write(0x333333, false, " ]_____-/_-/_-/___|_| \n ");
216+
Write(0x333333, false, " ");
217+
Write(0x666666, false, "10\n \n ");
218+
Write(0x666666, false, " 11\n ");
219+
Write(0x666666, false, " \n 12\n \n");
187220

188221
Console.ForegroundColor = color;
189222
Console.WriteLine();

0 commit comments

Comments
 (0)