Skip to content

Commit f4342d4

Browse files
committed
2024/05
1 parent 592ba61 commit f4342d4

File tree

6 files changed

+98
-24
lines changed

6 files changed

+98
-24
lines changed

2024/Day05/README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
## --- Day 5: Print Queue ---
2+
Satisfied with their search on Ceres, the squadron of scholars suggests subsequently scanning the stationery stacks of sub-basement 17.
3+
4+
The North Pole printing department is busier than ever this close to Christmas, and while The Historians continue their search of this historically significant facility, an Elf operating a [very familiar printer](/2017/day/1) beckons you over.
5+
6+
The Elf must recognize you, because they waste no time explaining that the new <em>sleigh launch safety manual</em> updates won't print correctly. Failure to update the safety manuals would be dire indeed, so you offer your services.
7+
8+
Read the [full puzzle](https://adventofcode.com/2024/day/5).

2024/Day05/Solution.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
namespace AdventOfCode.Y2024.Day05;
2+
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
7+
[ProblemName("Print Queue")]
8+
class Solution : Solver {
9+
10+
public object PartOne(string input) {
11+
var (expected, updates) = Parse(input);
12+
return updates
13+
.Where(pages => Sorted(expected, pages))
14+
.Sum(GetMiddlePage);
15+
}
16+
17+
public object PartTwo(string input) {
18+
var (expected, updates) = Parse(input);
19+
return updates
20+
.Where(pages => !Sorted(expected, pages))
21+
.Select(pages => Sort(expected, pages))
22+
.Sum(GetMiddlePage);
23+
}
24+
25+
(HashSet<string> expected, string[][] updates) Parse(string input) {
26+
var parts = input.Split("\n\n");
27+
var expected = new HashSet<string>(parts[0].Split("\n"));
28+
var updates = parts[1].Split("\n").Select(line => line.Split(",")).ToArray();
29+
return (expected, updates);
30+
}
31+
int GetMiddlePage(string[] nums) => int.Parse(nums[nums.Length / 2]);
32+
33+
// checks that all possible pairs in pages are in the right order
34+
bool Sorted(HashSet<string> expected, string[] pages) {
35+
var actuals = (
36+
from i in Enumerable.Range(0, pages.Length - 1)
37+
from j in Enumerable.Range(i + 1, pages.Length - i - 1)
38+
select pages[i] + "|" + pages[j]
39+
);
40+
return actuals.All(expected.Contains);
41+
}
42+
43+
string[] Sort(HashSet<string> expected, string[] pages) {
44+
// Ideally we would do some topological sorting, but it's an overkill for today.
45+
// A single call to Array.Sort solves my input, so that' how life is... I might
46+
// get back to this later but probably not :D
47+
Array.Sort(pages, (page1, page2) => expected.Contains(page1 + "|" + page2) ? -1 : 1);
48+
return pages;
49+
}
50+
}

2024/Day05/input.in

15.3 KB
Binary file not shown.

2024/Day05/input.refout

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

2024/SplashScreen.cs

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

99
var color = Console.ForegroundColor;
1010
Write(0xcc00, false, " ▄█▄ ▄▄█ ▄ ▄ ▄▄▄ ▄▄ ▄█▄ ▄▄▄ ▄█ ▄▄ ▄▄▄ ▄▄█ ▄▄▄\n █▄█ █ █ █ █ █▄█ █ █ █ █ █ █▄ ");
11-
Write(0xcc00, false, " █ █ █ █ █ █▄█\n █ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ $year = 2024\n ");
12-
Write(0xcc00, false, "\n ");
11+
Write(0xcc00, false, " █ █ █ █ █ █▄█\n █ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ /* 2024 */\n \n ");
12+
Write(0xcc00, false, " ");
1313
Write(0xcccccc, false, ".--'");
1414
Write(0xe3b585, false, "~ ~ ~");
1515
Write(0xcccccc, false, "| .-' ");
@@ -48,9 +48,9 @@ public void Show() {
4848
Write(0xcccccc, false, "| 3 ");
4949
Write(0xffff66, false, "**\n ");
5050
Write(0xcccccc, false, "|");
51-
Write(0x1461f, false, "@");
51+
Write(0x427322, false, "@");
5252
Write(0x5eabb4, false, "..");
53-
Write(0x7fbd39, false, "@");
53+
Write(0x488813, false, "@");
5454
Write(0xe3b585, false, "'. ~ ");
5555
Write(0xcc00, false, "\" ' ");
5656
Write(0xe3b585, false, "~ ");
@@ -66,21 +66,35 @@ public void Show() {
6666
Write(0xcc00, false, ".'");
6767
Write(0xcccccc, false, "| 4 ");
6868
Write(0xffff66, false, "**\n ");
69-
Write(0x333333, false, "| | | .. | ");
70-
Write(0x666666, false, " 5\n 6\n ");
71-
Write(0x666666, false, " 7\n 8\n ");
72-
Write(0x666666, false, " 9\n ");
73-
Write(0x666666, false, " 10\n 11\n ");
74-
Write(0x666666, false, " 12\n ");
75-
Write(0x666666, false, " 13\n 14\n ");
76-
Write(0x666666, false, " 15\n ");
77-
Write(0x666666, false, " 16\n 17\n ");
78-
Write(0x666666, false, " 18\n ");
79-
Write(0x666666, false, " 19\n 20\n ");
80-
Write(0x666666, false, " 21\n ");
81-
Write(0x666666, false, " 22\n 23\n ");
82-
Write(0x666666, false, " 24\n ");
83-
Write(0x666666, false, "25\n \n");
69+
Write(0xcccccc, false, "|");
70+
Write(0x4d8b03, false, "_");
71+
Write(0x5eabb4, false, ".~.");
72+
Write(0x1461f, false, "_");
73+
Write(0x7fbd39, false, "#");
74+
Write(0xe3b585, false, "'.. ~ ~ ");
75+
Write(0xffff66, true, "*");
76+
Write(0xcccccc, false, "| | ");
77+
Write(0xaaaaaa, false, "_| |_ ");
78+
Write(0xcccccc, false, "..\\_");
79+
Write(0x886655, false, "\\_ ");
80+
Write(0xcc00, false, "..'");
81+
Write(0xffff66, true, "* ");
82+
Write(0xcccccc, false, "| 5 ");
83+
Write(0xffff66, false, "**\n ");
84+
Write(0x333333, false, "| | | .' '. | ");
85+
Write(0x666666, false, " 6\n 7\n ");
86+
Write(0x666666, false, " 8\n 9\n ");
87+
Write(0x666666, false, " 10\n ");
88+
Write(0x666666, false, " 11\n 12\n ");
89+
Write(0x666666, false, " 13\n ");
90+
Write(0x666666, false, " 14\n 15\n ");
91+
Write(0x666666, false, " 16\n ");
92+
Write(0x666666, false, " 17\n 18\n ");
93+
Write(0x666666, false, " 19\n ");
94+
Write(0x666666, false, " 20\n 21\n ");
95+
Write(0x666666, false, " 22\n ");
96+
Write(0x666666, false, " 23\n 24\n ");
97+
Write(0x666666, false, " 25\n \n");
8498

8599
Console.ForegroundColor = color;
86100
Console.WriteLine();

0 commit comments

Comments
 (0)