@@ -2,29 +2,25 @@ package me.grison.aoc.y2022
22
33import me.grison.aoc.Day
44import me.grison.aoc.inTwo
5+ import me.grison.aoc.intersectAll
6+ import me.grison.aoc.mapSet
57
68class Day03 : Day (3 , 2022 ) {
79 override fun title () = " Rucksack Reorganization"
810
9- override fun partOne () =
10- inputList.sumOf { rucksack ->
11- val common = commonItem(rucksack.inTwo().map { it.toSet() })
12- itemPriority(common)
13- }
11+ override fun partOne () = solve { rucksack -> rucksack.map { it.inTwo().mapSet() } }
1412
15- override fun partTwo () =
16- inputList
17- .map { it.toSet() }
18- .windowed(size = 3 , step = 3 )
19- .sumOf { itemPriority(commonItem(it)) }
13+ override fun partTwo () = solve { it.mapSet().chunked(3 ) }
2014
21- private fun commonItem ( compartments : List <Set <Char >>) =
22- compartments.reduce { a, b -> a.intersect(b ) }.first()
15+ private fun solve ( inputMixer : ( List <String >) -> List < List < Set <Char > >>) =
16+ inputMixer(inputList).sumOf { itemPriority(it ) }
2317
24- private fun itemPriority (item : Char ): Int =
25- if (item.isLowerCase()) {
26- 1 + (item.code - ' a' .code)
27- } else {
28- 27 + (item.code - ' A' .code)
18+ private fun itemPriority (compartments : List <Set <Char >>): Int =
19+ compartments.intersectAll().first().let { item ->
20+ if (item.isLowerCase()) {
21+ 1 + (item.code - ' a' .code)
22+ } else {
23+ 27 + (item.code - ' A' .code)
24+ }
2925 }
3026}
0 commit comments