This commit is contained in:
Sven Heidemann 2022-12-03 08:49:49 +01:00
parent 909d540d64
commit 862eff8557

60
src/day3.py Normal file
View File

@ -0,0 +1,60 @@
import string
from typing import Optional
from cpl_core.console import Console
from cpl_core.utils import String
from cpl_query.enumerable import Enumerable
from cpl_query.extension import List
from cpl_core.pipes import *
from aoc.aoc import get_input
# global vars
day = 3
aoc_input = get_input(2022, day)
# aoc_input = """vJrwpWtwJgWrhcsFMMfFFhFp
# jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
# PmmdzqPrVvPwwTWBwg
# wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
# ttgJtRGJQctTZtZT
# CrZsJsPPZsGzwwsLwLmpwMDw
# """
priorities = [*string.ascii_lowercase, *string.ascii_uppercase]
def part1() -> int:
duplicates = {}
for rucksack in aoc_input.splitlines():
c1, c2 = rucksack[:len(rucksack) // 2], rucksack[len(rucksack) // 2:]
r_duplicates = List(str, c1).select(lambda x: x if x in c2 else '').where(lambda x: x != '')
if r_duplicates.first() not in duplicates:
duplicates[r_duplicates.first()] = 0
duplicates[r_duplicates.first()] += r_duplicates.select(lambda x: priorities.index(x) + 1).distinct().sum()
return sum(duplicates.values())
def part2() -> int:
groups = List(List)
index = 0
for rucksack in aoc_input.splitlines():
if index == 0:
groups.append(List(str))
index += 1
if index == 3:
index = 0
groups.last().append(rucksack)
return groups.select(lambda g: List(str, ''.join(g)).distinct().where(lambda x: x in g[0] and x in g[1] and x in g[2]).single()).select(lambda x: priorities.index(x) + 1).sum()
if __name__ == '__main__':
Console.write_line(f'Advent of code day {day}')
Console.write_line(part1(), part2())
Console.write_line()