Skip to content

Instantly share code, notes, and snippets.

@saolsen
Last active October 25, 2023 17:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save saolsen/ed73b701adbf621967ea92470ce7969d to your computer and use it in GitHub Desktop.
Save saolsen/ed73b701adbf621967ea92470ce7969d to your computer and use it in GitHub Desktop.
aoc 2022 day13
from itertools import batched
def ordered(a, b) -> bool | None:
match a, b:
case int(i), int(j):
if i == j:
return None
return i < j
case list(i), list(j):
for x, y in zip(i, j):
if (result := ordered(x, y)) is not None:
return result
if len(i) == len(j):
return None
return len(i) < len(j)
case int(i), list(j):
return ordered([i], j)
case list(i), int(j):
return ordered(i, [j])
case _ as unknown:
raise TypeError(f"Unknown type: {type(unknown)}")
with open("day13.txt") as f:
sum_of_indexes = 0
for i, (a, b, *_) in enumerate(batched(f, 3)):
left, right = eval(a), eval(b)
order = ordered(left, right)
if order:
sum_of_indexes += i + 1
print(sum_of_indexes)
from functools import cmp_to_key
from itertools import batched
def ordered(a, b) -> bool | None:
match a, b:
case int(i), int(j):
if i == j:
return None
return i < j
case list(i), list(j):
for x, y in zip(i, j):
if (result := ordered(x, y)) is not None:
return result
if len(i) == len(j):
return None
return len(i) < len(j)
case int(i), list(j):
return ordered([i], j)
case list(i), int(j):
return ordered(i, [j])
case _ as unknown:
raise TypeError(f"Unknown type: {type(unknown)}")
def cmp(a, b) -> int:
if ordered(a, b):
return -1
else:
return 1
divider_packets = [[[2]], [[6]]]
with open("day13.txt") as f:
packets = []
packets.extend(divider_packets)
for i, (a, b, *_) in enumerate(batched(f, 3)):
left, right = eval(a), eval(b)
packets.append(left)
packets.append(right)
decoder_key = 1
for i, packet in enumerate(sorted(packets, key=cmp_to_key(cmp))):
if packet in divider_packets:
decoder_key *= i + 1
print(decoder_key)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment