aboutsummaryrefslogtreecommitdiff
path: root/2025
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2025-12-04 06:34:16 +0100
committerSebastiano Tronto <sebastiano@tronto.net>2025-12-04 06:34:16 +0100
commitbc79fa83d3cb63d8445312b47dbed9295809b28a (patch)
tree31302da9489e25df417d3ffd88c6f69a8ccf2745 /2025
parent31c9f59a5f8946e8d90f2aad96e065ab4b496b67 (diff)
downloadaoc-bc79fa83d3cb63d8445312b47dbed9295809b28a.tar.gz
aoc-bc79fa83d3cb63d8445312b47dbed9295809b28a.zip
Day 4 2025
Diffstat (limited to '2025')
-rw-r--r--2025/04/a.py17
-rw-r--r--2025/04/b.py26
-rw-r--r--2025/README.md12
3 files changed, 54 insertions, 1 deletions
diff --git a/2025/04/a.py b/2025/04/a.py
index 5fdb11b..a693841 100644
--- a/2025/04/a.py
+++ b/2025/04/a.py
@@ -1,6 +1,21 @@
1import fileinput 1import fileinput
2 2
3def neigh(a, i, j):
4 return [
5 a[i-1][j-1], a[i-1][j], a[i-1][j+1],
6 a[i][j-1], a[i][j+1],
7 a[i+1][j-1], a[i+1][j], a[i+1][j+1],
8 ].count('@')
9
10s = 0
3with fileinput.input() as lines: 11with fileinput.input() as lines:
12 a = [['.'] * 200]
4 for line in lines: 13 for line in lines:
5 ... 14 a.append(['.'] + list(line.replace('\n', '.')))
15 a.append(['.'] * 200)
6 16
17for i in range(1,len(a)-1):
18 for j in range(1,len(a[1])-1):
19 if a[i][j] == '@' and neigh(a, i, j) < 4:
20 s += 1
21print(s)
diff --git a/2025/04/b.py b/2025/04/b.py
new file mode 100644
index 0000000..93b1fff
--- /dev/null
+++ b/2025/04/b.py
@@ -0,0 +1,26 @@
1import fileinput
2
3def neigh(a, i, j):
4 return [
5 a[i-1][j-1], a[i-1][j], a[i-1][j+1],
6 a[i][j-1], a[i][j+1],
7 a[i+1][j-1], a[i+1][j], a[i+1][j+1],
8 ].count('@')
9
10s = 0
11with fileinput.input() as lines:
12 a = [['.'] * 200]
13 for line in lines:
14 a.append(['.'] + list(line.replace('\n', '.')))
15 a.append(['.'] * 200)
16
17rem = True
18while rem:
19 rem = False
20 for i in range(1,len(a)-1):
21 for j in range(1,len(a[1])-1):
22 if a[i][j] == '@' and neigh(a, i, j) < 4:
23 s += 1
24 rem = True
25 a[i][j] = '.'
26print(s)
diff --git a/2025/README.md b/2025/README.md
index c72c8a5..8fccef4 100644
--- a/2025/README.md
+++ b/2025/README.md
@@ -11,6 +11,7 @@ Example
11 11
12``` 12```
13Day -Part 1- -Part 2- 13Day -Part 1- -Part 2-
14 4 00:25:36 00:27:49
14 3 00:05:02 00:16:09 15 3 00:05:02 00:16:09
15 2 00:10:36 00:11:55 16 2 00:10:36 00:11:55
16 1 00:06:20 00:50:41 17 1 00:06:20 00:50:41
@@ -49,3 +50,14 @@ For part 2 I used recursion with memorization (using Python's
49`functools.cache`), which is fast enough. But later Chiara pointed 50`functools.cache`), which is fast enough. But later Chiara pointed
50out to me that actually the solution is quite trivially greedy; I 51out to me that actually the solution is quite trivially greedy; I
51implemented the greedy version in `b-alt.py`. 52implemented the greedy version in `b-alt.py`.
53
54### Day 4: Printing Department
55
56The first "map" problem of the year! This one was easy, but I
57made a lot of mistakes in part 1. I decided to use the trick that
58[Jared](https://guissmo.com) suggested a couple of years ago: extend the
59map by 1 cell in all directions so you don't have to deal with indices
60out of bounds.
61
62For part 2 I decided to quickly code the dumb "repeat part 1 until no
63rolls are removed" strategy and it worked.

Generated with cgit - Back to sebastiano.tronto.net