<@U0AK89KT6>: My kata for today: ``` import kotlin...
# announcements
m
@jkbbwr: My kata for today:
Copy code
import kotlin.system.measureTimeMillis

import java.security.MessageDigest
import javax.xml.bind.DatatypeConverter

val messageDigest = MessageDigest.getInstance("SHA-256")

fun ByteArray.toHex(): String {
    return DatatypeConverter.printHexBinary(this).toLowerCase()
}

fun digest(data: String): String {
    return messageDigest.digest(data.toByteArray()).toHex()
}

class PairerIterator(val source: Iterator<String>) : Iterator<Pair<String, String>> {
    override fun hasNext() = source.hasNext()
    override fun next(): Pair<String, String> {
        val a = source.next()
        val b = if (source.hasNext()) source.next() else a
        return a to b
    }
}

fun pair(collection: Sequence<String>): Sequence<Pair<String, String>> {
    return Sequence {
        PairerIterator(collection.iterator())
    }
}

fun digestPairs(collection: Sequence<Pair<String, String>>): Sequence<Pair<String, String>> {
    return pair(collection.map {
        digest(it.first + it.second)
    })
}

fun main(args: Array<String>) {
    val pairItems = (1 .. 10000000).asSequence().map {
        val a = it.toString()
        a to a
    }

    println("done building list")
    println(measureTimeMillis {
        var items = digestPairs(pairItems).toList()
        while (items.size != 1) {
            println(items.size)
            items = digestPairs(items.asSequence()).toList()
        }
        println(digest(items.first().first + items.first().second))
    })
}