aboutsummaryrefslogtreecommitdiff
path: root/src/day24.py
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2023-12-29 12:16:59 +0100
committerThomas Schmucker <ts@its1.de>2023-12-29 12:16:59 +0100
commit0d06788586cda1b1ba01524f4ba3cad147052203 (patch)
tree26e0bfbfaa07d2edf407a9ad24209f21486e35b5 /src/day24.py
parentd6ae60aed827c742de956194223b4640b5403b72 (diff)
downloadadvent-of-code-0d06788586cda1b1ba01524f4ba3cad147052203.tar.gz
advent-of-code-0d06788586cda1b1ba01524f4ba3cad147052203.tar.bz2
advent-of-code-0d06788586cda1b1ba01524f4ba3cad147052203.zip
Lösungen für Tag 24, Teil 1
Diffstat (limited to 'src/day24.py')
-rw-r--r--src/day24.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/day24.py b/src/day24.py
new file mode 100644
index 0000000..809f2d0
--- /dev/null
+++ b/src/day24.py
@@ -0,0 +1,33 @@
1class Hailstone:
2 def __init__(self, sx, sy, sz, vx, vy, vz):
3 self.sx = sx
4 self.sy = sy
5 self.sz = sz
6 self.vx = vx
7 self.vy = vy
8 self.vz = vz
9
10 self.a = vy
11 self.b = -vx
12 self.c = vy * sx - vx * sy
13
14 def __repr__(self):
15 return "Hailstone{" + f"a={self.a}, b={self.b}, c={self.c}" + "}"
16
17hailstones = [Hailstone(*map(int, line.replace("@", ",").split(","))) for line in open("data/day24.txt")]
18
19total = 0
20
21for i, hs1 in enumerate(hailstones):
22 for hs2 in hailstones[:i]:
23 a1, b1, c1 = hs1.a, hs1.b, hs1.c
24 a2, b2, c2 = hs2.a, hs2.b, hs2.c
25 if a1 * b2 == b1 * a2:
26 continue
27 x = (c1 * b2 - c2 * b1) / (a1 * b2 - a2 * b1)
28 y = (c2 * a1 - c1 * a2) / (a1 * b2 - a2 * b1)
29 if 200000000000000 <= x <= 400000000000000 and 200000000000000 <= y <= 400000000000000:
30 if all((x - hs.sx) * hs.vx >= 0 and (y - hs.sy) * hs.vy >= 0 for hs in (hs1, hs2)):
31 total += 1
32
33print(total)