Fix a bug where 'hgt' was not followed by cm|in
This commit is contained in:
parent
9fa97a1d25
commit
0454187323
@ -24,15 +24,16 @@ class Day04(@Text val input: Input<String>) {
|
|||||||
|
|
||||||
fun part1(): Int = entries.count { it.hasRequiredKeys() }
|
fun part1(): Int = entries.count { it.hasRequiredKeys() }
|
||||||
|
|
||||||
private fun Entry.hasValidValues(): Boolean {
|
private fun Entry.hasValidValues() = let { (k, v) ->
|
||||||
val (k, v) = this
|
when (k) {
|
||||||
return when (k) {
|
|
||||||
"byr" -> v.toInt() in 1920..2002
|
"byr" -> v.toInt() in 1920..2002
|
||||||
"iyr" -> v.toInt() in 2010..2020
|
"iyr" -> v.toInt() in 2010..2020
|
||||||
"eyr" -> v.toInt() in 2020..2030
|
"eyr" -> v.toInt() in 2020..2030
|
||||||
"hgt" ->
|
"hgt" -> when {
|
||||||
if (v.endsWith("cm")) v.removeSuffix("cm").toInt() in 150..193
|
v.endsWith("cm") -> v.removeSuffix("cm").toInt() in 150..193
|
||||||
else v.removeSuffix("in").toInt() in 59..76
|
v.endsWith("in") -> v.removeSuffix("in").toInt() in 59..76
|
||||||
|
else -> false
|
||||||
|
}
|
||||||
"hcl" -> v.matches("^#[0-9a-f]{6}$".toRegex())
|
"hcl" -> v.matches("^#[0-9a-f]{6}$".toRegex())
|
||||||
"ecl" -> v in arrayOf("amb", "blu", "brn", "gry", "grn", "hzl", "oth")
|
"ecl" -> v in arrayOf("amb", "blu", "brn", "gry", "grn", "hzl", "oth")
|
||||||
"pid" -> v.matches("^[0-9]{9}$".toRegex())
|
"pid" -> v.matches("^[0-9]{9}$".toRegex())
|
||||||
@ -44,7 +45,7 @@ class Day04(@Text val input: Input<String>) {
|
|||||||
.asSequence()
|
.asSequence()
|
||||||
.filter { it.hasRequiredKeys() }
|
.filter { it.hasRequiredKeys() }
|
||||||
.filter { it.all { it.hasValidValues() } }
|
.filter { it.all { it.hasValidValues() } }
|
||||||
.count() - 1 // ???
|
.count()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun main() = with(createDay<Day04>()) {
|
fun main() = with(createDay<Day04>()) {
|
||||||
|
|||||||
@ -47,6 +47,47 @@ class Day04Test {
|
|||||||
assertThat(day04.part1()).isEqualTo(2)
|
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
|
@Nested
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user