todd.ginsberg
12/04/2019, 2:37 PMtodd.ginsberg
12/04/2019, 2:38 PMKroppeb
12/04/2019, 2:59 PMv.zip(v.drop(1))
todd.ginsberg
12/04/2019, 3:00 PMBurkhard
12/04/2019, 3:19 PMBurkhard
12/04/2019, 3:21 PMcontainsMatchingPair(it) && containsIsolatedPair(it)
is a bit overkill since containsIsolatedPair(it)
already implies containsMatchingPair(it)
Kroppeb
12/04/2019, 3:22 PMisSorted && containsIsolatedPair -> containsMatchingPair
thoughBurkhard
12/04/2019, 3:23 PMtodd.ginsberg
12/04/2019, 3:25 PMBurkhard
12/04/2019, 3:26 PMisSorted(it) && containsMatchingPair(it) && containsIsolatedPair(it)
looks like those a 3 separate conditions, while in fact they are only 2.todd.ginsberg
12/04/2019, 3:27 PMJoris PZ
12/04/2019, 4:16 PMgroupBy
but I now realize you can, as a side-effect of also checking that the numbers are ever-increasing! Clever stuffJoris PZ
12/04/2019, 4:18 PMfun Int.groupedDigits(): List<List<Char>> {
val result = mutableListOf(mutableListOf<Char>())
this.toString().forEach {
if (result.last().contains(it)) {
result.last().add(it)
} else {
result.add(mutableListOf(it))
}
}
return result.drop(1)
}
fun Int.isValidPassword2(): Boolean {
val groups = this.groupedDigits()
val hasIsolatedPair = groups.any { it.size == 2 }
val everIncreasing = groups.windowed(2).all {
it[0].first() < it[1].first()
}
return hasIsolatedPair && everIncreasing
}
Edgars
12/04/2019, 4:47 PMgroupBy { it }.any { it.value.size == 2 }
.karelpeeters
12/04/2019, 5:40 PMgroupBy
not working as @Joris PZ, pretty clever.karelpeeters
12/04/2019, 5:40 PM