aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2025-12-09 08:26:58 +0100
committerSebastiano Tronto <sebastiano@tronto.net>2025-12-09 08:26:58 +0100
commitfa9375ef9a4ecb36b28cdffe70f2d48cf9bdb58f (patch)
tree0a603ce20f9a72dcf9387bcc69102cc6886d543e
parent739416b040965ef61492f07c1d0196fcd850ab54 (diff)
downloadaoc-fa9375ef9a4ecb36b28cdffe70f2d48cf9bdb58f.tar.gz
aoc-fa9375ef9a4ecb36b28cdffe70f2d48cf9bdb58f.zip
Day 9 2025
Diffstat (limited to '')
-rw-r--r--2025/09/a.py9
-rw-r--r--2025/09/b.py37
2 files changed, 44 insertions, 2 deletions
diff --git a/2025/09/a.py b/2025/09/a.py
index 5fdb11b..8733737 100644
--- a/2025/09/a.py
+++ b/2025/09/a.py
@@ -1,6 +1,11 @@
1import fileinput 1import fileinput
2 2
3with fileinput.input() as lines: 3with fileinput.input() as lines:
4 for line in lines: 4 a = [tuple(int(x) for x in l[:-1].split(',')) for l in lines]
5 ...
6 5
6s = 0
7for i in range(len(a)):
8 for j in range(i+1, len(a)):
9 s = max(s, (abs(a[i][0]-a[j][0])+1) * (abs(a[i][1]-a[j][1])+1))
10
11print(s)
diff --git a/2025/09/b.py b/2025/09/b.py
new file mode 100644
index 0000000..ad0095b
--- /dev/null
+++ b/2025/09/b.py
@@ -0,0 +1,37 @@
1import fileinput
2
3with fileinput.input() as lines:
4 a = [tuple(int(x) for x in l[:-1].split(',')) for l in lines]
5
6# Check if the border is turning clockwise or counter-clockwise
7def dir(p, q):
8 return p[0]*q[1]-p[1]*q[0]
9t = 0
10for i in range(len(a)):
11 p, q, r = a[i%len(a)], a[(i+1)%len(a)], a[(i+2)%len(a)]
12 t += 1 if dir((q[0]-p[0],q[1]-p[1]), (r[0]-q[0],r[1]-q[1])) > 0 else -1
13
14def lbreaks(p, q, tl, br):
15 # Adjust for horizontal or vertical
16 (tt, z) = (t, 0) if p[0] == q[0] else (-t, 1)
17
18 if min(p[1-z], q[1-z]) >= br[1-z] or max(p[1-z], q[1-z]) <= tl[1-z]:
19 return False
20 if p[z] == tl[z]:
21 return tt * (q[1-z]-p[1-z]) > 0
22 if p[z] == br[z]:
23 return tt * (q[1-z]-p[1-z]) < 0
24
25 return p[z] > tl[z] and p[z] < br[z]
26
27def admissible(a, i, j):
28 tl = (min(a[i][0], a[j][0]), min(a[i][1], a[j][1]))
29 br = (max(a[i][0], a[j][0]), max(a[i][1], a[j][1]))
30 return not any(lbreaks(a[k], a[(k+1)%len(a)], tl, br) for k in range(len(a)))
31
32s = 0
33for i in range(len(a)):
34 for j in range(i+1, len(a)):
35 if admissible(a, i, j):
36 s = max(s, (abs(a[i][0]-a[j][0])+1)*(abs(a[i][1]-a[j][1])+1))
37print(s)

Generated with cgit - Back to sebastiano.tronto.net