Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class BinaryDiagnostic(data: List<String>) {
- /* Part 1 */
- private val gamma = commonBit(data, '1', '0').toInt(2)
- private val epsilon = commonBit(data, '0', '1').toInt(2)
- val powerConsumption = gamma * epsilon
- private fun commonBit(data: List<String>, most: Char, least: Char) =
- countBits(data).fold("")
- { result, count -> result + (if (count > data.size / 2) most else least) }
- private fun countBits(data: List<String>) =
- data.fold(Array(data[0].length) { 0 }) { counts, binaryString ->
- (0 until binaryString.length).forEach {
- counts[it] += binaryString[it].toString().toInt()
- }
- counts
- }
- /* Part 2 */
- private val co2ScrubberRating = filterCommonBit(data, 0, '1', '0').toInt(2)
- private val oxygenGeneratorRating = filterCommonBit(data, 0, '0', '1').toInt(2)
- val lifeSupportRating = co2ScrubberRating * oxygenGeneratorRating
- private fun filterCommonBit(data: List<String>, i: Int, least: Char, most: Char): String {
- if (data.size == 1) return data[0]
- val numberOfOnes = data.count { binaryString -> binaryString[i] == '1' }
- val toKeep = if (numberOfOnes > (data.size - 1) / 2) most else least
- val filteredData = data.filter { binaryString -> binaryString[i] == toKeep }
- return filterCommonBit(filteredData, i + 1, least, most)
- }
- }
Add Comment
Please, Sign In to add comment