solved part 1 day8 2024
This commit is contained in:
parent
520aa782da
commit
e5f3e9015f
50
2024/day8/input.text
Normal file
50
2024/day8/input.text
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
..........M..........j.............y.....O........
|
||||||
|
...B...............q......m........lGO............
|
||||||
|
....................q......2.l.GQ...O.............
|
||||||
|
.....X.......................................4....
|
||||||
|
.....................q............................
|
||||||
|
....M......P...............xl.K.............2.....
|
||||||
|
....F.........L.......C.K..............m..........
|
||||||
|
..........FM......P....jy......m..........o...r...
|
||||||
|
..X.......P.....RL..............G..x..........4...
|
||||||
|
............L..........NC.....q...................
|
||||||
|
.....C.X...............K....y..........4..........
|
||||||
|
........S...R.............j.x.....V...4...........
|
||||||
|
.....................R..x.....V..i......m.........
|
||||||
|
...........................R.V......N.......X.....
|
||||||
|
.....F.........M......N......E....................
|
||||||
|
................v................T.......F......O.
|
||||||
|
.............................N...V.......Q........
|
||||||
|
...v.....................C.....i..................
|
||||||
|
......c.....W..n.w........................E.......
|
||||||
|
3...................c.....................Q..6....
|
||||||
|
...........h......................j...............
|
||||||
|
.......n.0......h.................E..............2
|
||||||
|
.v.............7.......120.....c..................
|
||||||
|
......n.0............w...........D.t.........E...r
|
||||||
|
....8..3......0.w.hP....z...D..T...............r..
|
||||||
|
.................f........T........G......eQ......
|
||||||
|
......f.n.....7..p................................
|
||||||
|
.....Y..7.......f......I......D......K............
|
||||||
|
............Uf....T..W.....D..r...i...............
|
||||||
|
......I...............................Z...........
|
||||||
|
....5....B.......b..............s..............Z..
|
||||||
|
..........d...W..Uwh.............c..........i.....
|
||||||
|
..I.3..Y......................e...................
|
||||||
|
.....p.b..........k......7........................
|
||||||
|
p...........k....I..b..........s..................
|
||||||
|
.....k.......o...........W........................
|
||||||
|
.A..Y..........U.................a........6.......
|
||||||
|
..A...Y.p...................................6.....
|
||||||
|
B......k..........................Z............u..
|
||||||
|
...3.....................s..............a.........
|
||||||
|
......A.........................g.....a...........
|
||||||
|
.......A....8...b.U......H....sS..................
|
||||||
|
.........................S1.............t.........
|
||||||
|
.....................9z..e.....5..1.g.u...........
|
||||||
|
.......................z....d....g....H.J....o.6..
|
||||||
|
........B................d.....u....9.J.H.........
|
||||||
|
.8........S.................u9.............J.....H
|
||||||
|
.....................Z5.............t1...........a
|
||||||
|
.....................e..v...................o..t..
|
||||||
|
.....8...............L.....z.............J........
|
||||||
48
2024/day8/main.py
Normal file
48
2024/day8/main.py
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
from vector import Vector
|
||||||
|
|
||||||
|
with open('input.text', 'r') as file:
|
||||||
|
data: list[str] = file.readlines()
|
||||||
|
|
||||||
|
|
||||||
|
groups = {}
|
||||||
|
|
||||||
|
# Parse Data
|
||||||
|
y_bound: int = len(data)
|
||||||
|
x_bound: int = len(data[0].strip())
|
||||||
|
|
||||||
|
for y, line in enumerate(data):
|
||||||
|
for x, char in enumerate(line):
|
||||||
|
if char not in ['.', '\n']:
|
||||||
|
if char not in groups:
|
||||||
|
groups[char] = [Vector(x, y)]
|
||||||
|
else:
|
||||||
|
groups[char].append(Vector(x, y))
|
||||||
|
|
||||||
|
# Part 1
|
||||||
|
def in_bounds(v: Vector) -> bool:
|
||||||
|
return v.x >= 0 and v.x < x_bound and v.y >= 0 and v.y < y_bound
|
||||||
|
|
||||||
|
antinodes = []
|
||||||
|
for char, group in groups.items():
|
||||||
|
for i, A in enumerate(group):
|
||||||
|
for B in group[i + 1:]:
|
||||||
|
|
||||||
|
antinode_pos = A + A - B
|
||||||
|
antinode_pos2 = B + B - A
|
||||||
|
|
||||||
|
if antinode_pos not in antinodes and in_bounds(antinode_pos):
|
||||||
|
antinodes.append(antinode_pos)
|
||||||
|
|
||||||
|
if antinode_pos2 not in antinodes and in_bounds(antinode_pos2):
|
||||||
|
antinodes.append(antinode_pos2)
|
||||||
|
|
||||||
|
for antinode in antinodes:
|
||||||
|
data[antinode.y] = data[antinode.y][:antinode.x] + '#' + data[antinode.y][antinode.x + 1:]
|
||||||
|
|
||||||
|
for line in data:
|
||||||
|
print(line, end='')
|
||||||
|
|
||||||
|
print(f'\nPart 1: {len(antinodes)}')
|
||||||
|
|
||||||
|
# Part 2
|
||||||
|
|
||||||
12
2024/day8/test.text
Normal file
12
2024/day8/test.text
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
............
|
||||||
|
........0...
|
||||||
|
.....0......
|
||||||
|
.......0....
|
||||||
|
....0.......
|
||||||
|
......A.....
|
||||||
|
............
|
||||||
|
............
|
||||||
|
........A...
|
||||||
|
.........A..
|
||||||
|
............
|
||||||
|
............
|
||||||
31
2024/day8/vector.py
Normal file
31
2024/day8/vector.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
from typing import Self
|
||||||
|
|
||||||
|
import math
|
||||||
|
|
||||||
|
class Vector:
|
||||||
|
x: int
|
||||||
|
y: int
|
||||||
|
|
||||||
|
def __init__(self, x: int, y: int):
|
||||||
|
self.x = x
|
||||||
|
self.y = y
|
||||||
|
|
||||||
|
def __add__(self, other: Self) -> Self:
|
||||||
|
return Vector(self.x + other.x, self.y + other.y)
|
||||||
|
|
||||||
|
def __sub__(self, other: Self) -> Self:
|
||||||
|
return Vector(self.x - other.x, self.y - other.y)
|
||||||
|
|
||||||
|
def abs(self) -> Self:
|
||||||
|
return Vector(abs(self.x), abs(self.y))
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
return f'{self.x}, {self.y}'
|
||||||
|
|
||||||
|
def __eq__(self, value: Self) -> bool:
|
||||||
|
return self.x == value.x and self.y == value.y
|
||||||
|
|
||||||
|
def distance(self, other: Self) -> int:
|
||||||
|
return math.sqrt((other.x - self.x)**2 + (other.y - self.y)**2)
|
||||||
|
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user