diff --git a/days/src/main/kotlin/Day04.kt b/days/src/main/kotlin/Day04.kt index 948adb2..2bcbcb9 100644 --- a/days/src/main/kotlin/Day04.kt +++ b/days/src/main/kotlin/Day04.kt @@ -24,15 +24,16 @@ class Day04(@Text val input: Input) { fun part1(): Int = entries.count { it.hasRequiredKeys() } - private fun Entry.hasValidValues(): Boolean { - val (k, v) = this - return when (k) { + private fun Entry.hasValidValues() = let { (k, v) -> + when (k) { "byr" -> v.toInt() in 1920..2002 "iyr" -> v.toInt() in 2010..2020 "eyr" -> v.toInt() in 2020..2030 - "hgt" -> - if (v.endsWith("cm")) v.removeSuffix("cm").toInt() in 150..193 - else v.removeSuffix("in").toInt() in 59..76 + "hgt" -> when { + v.endsWith("cm") -> v.removeSuffix("cm").toInt() in 150..193 + v.endsWith("in") -> v.removeSuffix("in").toInt() in 59..76 + else -> false + } "hcl" -> v.matches("^#[0-9a-f]{6}$".toRegex()) "ecl" -> v in arrayOf("amb", "blu", "brn", "gry", "grn", "hzl", "oth") "pid" -> v.matches("^[0-9]{9}$".toRegex()) @@ -44,7 +45,7 @@ class Day04(@Text val input: Input) { .asSequence() .filter { it.hasRequiredKeys() } .filter { it.all { it.hasValidValues() } } - .count() - 1 // ??? + .count() } fun main() = with(createDay()) { diff --git a/days/src/test/kotlin/Day04Test.kt b/days/src/test/kotlin/Day04Test.kt index 751c9af..ac228f6 100644 --- a/days/src/test/kotlin/Day04Test.kt +++ b/days/src/test/kotlin/Day04Test.kt @@ -47,6 +47,47 @@ class Day04Test { assertThat(day04.part1()).isEqualTo(2) } + @Test + fun `part2 invalid`(){ + val input = """ + eyr:1972 cid:100 + hcl:#18171d ecl:amb hgt:170 pid:186cm iyr:2018 byr:1926 + + iyr:2019 + hcl:#602927 eyr:1967 hgt:170cm + ecl:grn pid:012533040 byr:1946 + + hcl:dab227 iyr:2012 + ecl:brn hgt:182cm pid:021572410 eyr:2020 byr:1992 cid:277 + + hgt:59cm ecl:zzz + eyr:2038 hcl:74454a iyr:2023 + pid:3556412378 byr:2007 + """.trimIndent().let { Input(it) } + + assertThat(Day04(input).part2()).isEqualTo(0) + } + + @Test + fun `part2 valid`(){ + val input = """ + pid:087499704 hgt:74in ecl:grn iyr:2012 eyr:2030 byr:1980 + hcl:#623a2f + + eyr:2029 ecl:blu cid:129 byr:1989 + iyr:2014 pid:896056539 hcl:#a97842 hgt:165cm + + hcl:#888785 + hgt:164cm byr:2001 iyr:2015 cid:88 + pid:545766238 ecl:hzl + eyr:2022 + + iyr:2010 hgt:158cm hcl:#b6652a ecl:blu byr:1944 eyr:2021 pid:093154719 + """.trimIndent().let { Input(it) } + + assertThat(Day04(input).part2()).isEqualTo(4) + } + } @Nested