started 2025 day5 parts 1 & 2
This commit is contained in:
1 parent
4fe4802afc
commit
d5d846ab0c
12 files changed
+2927
No files matched your search
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,35 @@
|
||||
class iVec2d:
|
||||
x: int
|
||||
y: int
|
||||
|
||||
def __init__(self, x: int, y: int):
|
||||
self.x = x
|
||||
self.y = y
|
||||
|
||||
INPUT_FILE = "input.txt"
|
||||
|
||||
fresh_ranges: list[iVec2d] = []
|
||||
available_ids: list[int] = []
|
||||
|
||||
# Parse data
|
||||
with open(INPUT_FILE, 'r') as file:
|
||||
data: str = file.read()
|
||||
|
||||
ranges, ids = data.split("\n\n")
|
||||
|
||||
for r in ranges.split("\n"):
|
||||
n1, n2 = r.strip().split('-')
|
||||
|
||||
fresh_ranges.append(iVec2d(int(n1), int(n2)))
|
||||
|
||||
for ingredient_id in ids.split("\n"):
|
||||
available_ids.append(int(ingredient_id.strip()))
|
||||
|
||||
fresh_ingredients = 0
|
||||
for ingredient_id in available_ids:
|
||||
for fresh_range in fresh_ranges:
|
||||
if ingredient_id >= fresh_range.x and ingredient_id <= fresh_range.y:
|
||||
fresh_ingredients += 1
|
||||
break
|
||||
|
||||
print(f'Fresh Ingredients: {fresh_ingredients}')
|
||||
@@ -0,0 +1,11 @@
|
||||
3-5
|
||||
10-14
|
||||
16-20
|
||||
12-18
|
||||
|
||||
1
|
||||
5
|
||||
8
|
||||
11
|
||||
17
|
||||
32
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,43 @@
|
||||
INPUT_FILE = "test.txt"
|
||||
|
||||
fresh_ranges: list = []
|
||||
fresh_ids: set[int] = set()
|
||||
|
||||
# Parse data
|
||||
with open(INPUT_FILE, 'r') as file:
|
||||
data: str = file.read()
|
||||
|
||||
ranges, ids = data.split("\n\n")
|
||||
|
||||
for r in ranges.split("\n"):
|
||||
n1, n2 = r.strip().split('-')
|
||||
|
||||
fresh_ranges.append(range(int(n1), int(n2)))
|
||||
|
||||
|
||||
total_fresh_ids = 0
|
||||
fresh_ranges_buffer = fresh_ranges.copy()
|
||||
|
||||
# Filter out overlaps
|
||||
for fresh_range1 in fresh_ranges:
|
||||
for fresh_range2 in fresh_ranges:
|
||||
if fresh_range1 == fresh_range2:
|
||||
continue
|
||||
|
||||
if fresh_range2.start in fresh_range1 or fresh_range2.stop in fresh_range1:
|
||||
print(f'{fresh_range2} in {fresh_range1}')
|
||||
|
||||
if fresh_range2.start in fresh_range1 and fresh_range2.stop > fresh_range1.stop:
|
||||
fresh_ranges_buffer.remove(fresh_range2)
|
||||
total_fresh_ids += fresh_range2.stop - fresh_range1.start
|
||||
new_range = range(fresh_range1.stop, fresh_range2.stop)
|
||||
|
||||
fresh_ranges_buffer.append(new_range)
|
||||
|
||||
total = 0
|
||||
# sum ranges
|
||||
for r in fresh_ranges_buffer:
|
||||
print(r)
|
||||
total += len(fresh_ranges_buffer) + 1
|
||||
|
||||
print(f'Fresh Ingredients: {total}')
|
||||
@@ -0,0 +1,13 @@
|
||||
3-5
|
||||
10-14
|
||||
16-20
|
||||
12-18
|
||||
30-35
|
||||
29-31
|
||||
|
||||
1
|
||||
5
|
||||
8
|
||||
11
|
||||
17
|
||||
32
|
||||
Reference in new issue
Block a user