Skip to content

Commit f8949d8

Browse files
committed
AoC 2024: Days 7-9
1 parent f9d5b56 commit f8949d8

File tree

4 files changed

+172
-1
lines changed

4 files changed

+172
-1
lines changed

2024/day07/day07.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#!/usr/bin/python3
2+
3+
def calibrate(answer, total, tail, concatenate=False):
4+
#print('answer: %d, total: %d, tail: %s' % (answer, total, tail))
5+
if answer < total:
6+
return False
7+
if not tail:
8+
return answer == total
9+
return calibrate(answer, total + tail[0], tail[1:], concatenate) or calibrate(answer, total * tail[0], tail[1:], concatenate) or (concatenate and calibrate(answer, int('%d%d' % (total, tail[0])), tail[1:], concatenate))
10+
11+
def main():
12+
with open('input') as f:
13+
calibrations = [line.split(': ') for line in f.readlines()]
14+
calibrations = {int(line[0]): [int(num) for num in line[1].split()] for line in calibrations}
15+
16+
print(sum([calibration for calibration in calibrations.keys() if calibrate(calibration, 0, calibrations[calibration], False)]))
17+
print(sum([calibration for calibration in calibrations.keys() if calibrate(calibration, 0, calibrations[calibration], True)]))
18+
19+
if __name__ == "__main__":
20+
main()

2024/day08/day08.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/usr/bin/python3
2+
from collections import defaultdict
3+
from itertools import permutations, combinations
4+
5+
def main():
6+
with open('input') as f:
7+
lines = [line.strip() for line in f.readlines()]
8+
height = len(lines)
9+
width = len(lines[0])
10+
11+
antennas = defaultdict(set)
12+
for y in range(height):
13+
for x in range(width):
14+
frequency = lines[y][x]
15+
if frequency != '.':
16+
antennas[frequency].add((x, y))
17+
18+
antinodes = set()
19+
antinodes_resonance = set()
20+
21+
for frequency, location in antennas.items():
22+
for a, b in permutations(location, 2):
23+
vector = (a[0] - b[0], a[1] - b[1])
24+
25+
vector = (a[0] + vector[0], a[1] + vector[1])
26+
if vector[0] < width and vector[0] >= 0 and vector[1] < height and vector[1] >= 0:
27+
antinodes.add(vector)
28+
29+
vector = (a[0] - vector[0], a[1] - vector[1])
30+
while a[0] < width and a[0] >= 0 and a[1] < height and a[1] >= 0:
31+
antinodes_resonance.add(a)
32+
a = (a[0] - vector[0], a[1] - vector[1])
33+
34+
35+
print(len(antinodes))
36+
print(len(antinodes_resonance))
37+
38+
#for y in range(height):
39+
# for x in range(width):
40+
# found = False
41+
# for k,v in antennas.items():
42+
# if (x,y) in v:
43+
# found = True
44+
# print(k, end='')
45+
# if not found:
46+
# if (x,y) in antinodes:
47+
# print('#', end='')
48+
# else:
49+
# print('.', end='')
50+
# print()
51+
52+
53+
if __name__ == "__main__":
54+
main()

2024/day09/day09.py

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
#!/usr/bin/python3
2+
from collections import defaultdict
3+
from itertools import permutations, combinations
4+
5+
def main():
6+
with open('input') as f:
7+
string = f.readline().strip()
8+
9+
disk_map = []
10+
file = False
11+
i = 0
12+
for length in string:
13+
length = int(length)
14+
file = not file
15+
for _ in range(length):
16+
if file:
17+
disk_map.append(str(i))
18+
else:
19+
disk_map.append('.')
20+
if file:
21+
i += 1
22+
23+
i = 0
24+
j = len(disk_map) - 1
25+
while True:
26+
if i == j:
27+
break
28+
if (disk_map[i] == '.' and disk_map[j] == '.'):
29+
j -= 1
30+
if disk_map[i] != '.':
31+
i += 1
32+
continue
33+
if disk_map[j] != '.':
34+
disk_map[i] = disk_map[j]
35+
disk_map[j] = '.'
36+
i += 1
37+
j -= 1
38+
39+
checksum = 0
40+
for i in range(len(disk_map)):
41+
if disk_map[i] != '.':
42+
checksum += i * int(disk_map[i])
43+
print(checksum)
44+
45+
disk_map = []
46+
file = False
47+
i = 0
48+
for length in string:
49+
length = int(length)
50+
file = not file
51+
if file:
52+
disk_map.append([str(i), length])
53+
i += 1
54+
else:
55+
disk_map.append(['.', length])
56+
57+
i = 0
58+
j = len(disk_map) - 1
59+
while True:
60+
if j == 0:
61+
break
62+
if i >= len(disk_map) or i == j or (disk_map[i][0] == '.' and disk_map[j][0] == '.'):
63+
j -= 1
64+
i = 0
65+
continue
66+
if disk_map[i][0] != '.' or disk_map[i][1] == 0:
67+
i += 1
68+
continue
69+
if disk_map[j][0] != '.':
70+
if disk_map[i][1] == disk_map[j][1]:
71+
disk_map[i][0] = disk_map[j][0]
72+
disk_map[j][0] = '.'
73+
j -= 1
74+
i = 0
75+
elif disk_map[i][1] > disk_map[j][1]:
76+
length1 = disk_map[i][1]
77+
length2 = disk_map[j][1]
78+
disk_map[i] = disk_map[j][:]
79+
disk_map[j][0] = '.'
80+
disk_map.insert(i + 1, ['.', length1 - length2])
81+
i = 0
82+
else:
83+
i += 1
84+
85+
checksum = 0
86+
i = 0
87+
for obj in disk_map:
88+
for _ in range(int(obj[1])):
89+
if obj[0] != '.' and obj[1] > 0:
90+
checksum += i * int(obj[0])
91+
if obj[1] > 0:
92+
i += 1
93+
print(checksum)
94+
95+
96+
if __name__ == "__main__":
97+
main()

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Advent of Code
22

3-
![](https://img.shields.io/badge/2024%20⭐-6-yellow) ![](https://img.shields.io/badge/2022%20⭐-6-yellow) ![](https://img.shields.io/badge/2021%20⭐-23-yellow) ![](https://img.shields.io/badge/2020%20⭐-16-yellow) ![](https://img.shields.io/badge/2019%20⭐-1-yellow) ![](https://img.shields.io/badge/2018%20⭐-41-yellow) ![](https://img.shields.io/badge/2017%20⭐-50-yellow) ![](https://img.shields.io/badge/2016%20⭐-42-yellow) ![](https://img.shields.io/badge/2015%20⭐-12-yellow)
3+
![](https://img.shields.io/badge/2024%20⭐-9-yellow) ![](https://img.shields.io/badge/2022%20⭐-6-yellow) ![](https://img.shields.io/badge/2021%20⭐-23-yellow) ![](https://img.shields.io/badge/2020%20⭐-16-yellow) ![](https://img.shields.io/badge/2019%20⭐-1-yellow) ![](https://img.shields.io/badge/2018%20⭐-41-yellow) ![](https://img.shields.io/badge/2017%20⭐-50-yellow) ![](https://img.shields.io/badge/2016%20⭐-42-yellow) ![](https://img.shields.io/badge/2015%20⭐-12-yellow)
44

55
[My](https://github.com/tobiasvl) solutions for the puzzles of [Advent of Code](http://adventofcode.com).
66

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy