day 3
This commit is contained in:
parent
909d540d64
commit
862eff8557
60
src/day3.py
Normal file
60
src/day3.py
Normal 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()
|
Loading…
Reference in New Issue
Block a user