diff --git a/day2/input.txt b/day2/input.txt new file mode 100644 index 0000000..a5c306c --- /dev/null +++ b/day2/input.txt @@ -0,0 +1 @@ +5529687-5587329,50-82,374-560,83-113,226375-287485,293169-368713,2034-2634,9945560-9993116,4872472-4904227,3218-5121,1074-1357,15451-26093,483468003-483498602,51513-85385,1466-1992,7600-13034,710570-789399,407363-480868,3996614725-3996662113,3-17,5414907798-5414992881,86274-120443,828669-909588,607353-700604,4242340614-4242556443,28750-44009,935177-1004747,20-41,74678832-74818251,8484825082-8484860878,2784096938-2784156610,5477-7589,621-952,2424167145-2424278200,147085-217900,93043740-93241586 diff --git a/day2/part1.py b/day2/part1.py new file mode 100644 index 0000000..0ab2b42 --- /dev/null +++ b/day2/part1.py @@ -0,0 +1,26 @@ +FILE = "input.txt" + +def main(): + line = open(FILE).readlines()[0].strip() + + ranges = [ + [int(n) for n in l.split("-")] + for l in line.split(",") + ] + + invalid_ids = [ + id + for (start, end) in ranges + for id in range(start, end + 1) + if invalid(str(id)) + ] + + return sum(invalid_ids) + +def invalid(id): + if len(id) % 2 == 1: return False + a, b = id[:(len(id)//2)], id[(len(id)//2):] + return a == b + +if __name__ == "__main__": + print(main()) diff --git a/day2/part2.py b/day2/part2.py new file mode 100644 index 0000000..e507742 --- /dev/null +++ b/day2/part2.py @@ -0,0 +1,27 @@ +FILE = "input.txt" + +def main(): + line = open(FILE).readlines()[0].strip() + + ranges = [ + [int(n) for n in l.split("-")] + for l in line.split(",") + ] + + invalid_ids = [ + id + for (start, end) in ranges + for id in range(start, end + 1) + if invalid(str(id)) + ] + + return sum(invalid_ids) + +def invalid(id: str) -> bool: + for n in range(1, len(id)//2 + 1): + sub = { id[i:i+n] for i in range(0, len(id), n) } + if len(sub) == 1: return True + return False + +if __name__ == "__main__": + print(main()) diff --git a/day2/test.txt b/day2/test.txt new file mode 100644 index 0000000..a3f22ef --- /dev/null +++ b/day2/test.txt @@ -0,0 +1 @@ +11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124