BBK残音5:モールス符号🤫


Koltinの世界でJava ishのdevではない、Koltin標準ライブラリについての知識を改善し、より良いコテリンコードを書く.✌🏻 あなたのJava DevがKotlinに移行するならば、これはあなたが多くを学ぶのを援助します!
私はあなたのための秘密のコードを探偵をクラックする必要があります!🕵️‍♀️originally published on https://chetangupta.net/bbk-main/このクイズは、Twitter上でRohanシンによって提案された、遅延は、メイトのために申し訳ありません!Question:あなたは秘密のメッセージを受け取りました!残念ながら、あなたはそれを読むことができない、それはモールス符号でエンコードされます.あなたのタスクは、モールス符号を入力として受け取り、人間が読める文字列を返す関数を実装することです.3つのスペースは、単語と
コードの前または後の余分な空白は意味がなく、無視されるべきです.
Message : -.---..- …. .- …- . .- -… ..-. -… .-. .- .. -. ..-.-- .-. -.----.-.. .. -.
val morseCode = "-.-- --- ..-   .... .- ...- .   .-   -... .. --.   -... .-. .- .. -.   ..-. --- .-.   -.- --- - .-.. .. -."  
// write a function that converts this MorseCode to English fun decodeMorse(morseCode:String):String{   
 // .. do stuff 
}
与えられたモールス符号
val morseDecoder = mapOf<String, String>(
        ".-" to "A",
        "-..." to "B",
        "-.-." to "C",
        "-.." to "D",
        "." to "E",
        "..-." to "F",
        "--." to "G",
        "...." to "H",
        ".." to "I",
        ".---" to "J",
        "-.-" to "K",
        ".-.." to "L",
        "--" to "M",
        "-." to "N",
        "---" to "O",
        ".--." to "P",
        "--.-" to "Q",
        ".-." to "R",
        "..." to "S",
        "-" to "T",
        "..-" to "U",
        "...-" to "V",
        ".--" to "W",
        "-..-" to "X",
        "-.--" to "Y",
        "--.." to "Z",
        ".----" to "1",
        "..---" to "2",
        "...--" to "3",
        "....-" to "4",
        "....." to "5",
        "-...." to "6",
        "--..." to "7",
        "---.." to "8",
        "----." to "9",
        "-----" to "0",
        "" to " ",
        ".-.-.-" to ".",
        "--..--" to ",",
        "---..." to ".",
        "..--.." to "?",
        "-.-.--" to "!",
        "...---..." to "SOS",
        "-....-" to "''",
        "-..-." to "/",
        "-.--.-" to "()",
        ".--.-." to "@",
        "-...-" to "="
)
自分でこっちに置いてみてください.
👨🏻‍💻👉 Try Yourself

解決方法1
同じ古い命令的な方法.😪
fun decodeMorse(code: String): String {
    val morseWords = code.split("   ")
    val humanized = StringBuilder()
    for (morseWord in morseWords) {
        val morseChars = morseWord.split(" ")
        for (morseChar in morseChars) {
            if (morseChar.isNotEmpty()) {
                humanized.append(morseDecoder.get(morseChar))
            }
        }
        humanized.append(" ")
    }
    return humanized.toString()
}
// 👨🏻‍🔧 complexity : O(n^2)
// ⏱ performance : took 509.0 us on my machine
ところで、この方法では何も間違っていない、ループだけそれは非常に表現力のある、突然変異と偶然の更新の問題はありません.🙌🏻
命令形のアキュムレータパターンがなぜ悪いかチェックしてください.💡

チェックアウト👉 Accumulator|Fold-Reduce

解決方法2
関数型Count stdlib関数における命令等価コード
fun decodeMorse(code: String): String {
    return code.trim()
        .split("   ")
        .joinToString(separator = " ") { word ->
            word.split(" ")
                    .map { letter -> morseDecoder[letter] ?: "" }
                    .joinToString(separator = "")
        }
}
// 👨🏻‍🔧 complexity : O(n^2)
// ⏱ performance : took 639.0 us on my machine
パフォーマンスのヒットは、外側ループで複数の回ではなく、内部ループにJointoString操作のために良いです!デュード.☹️
JointoStringを学び、高度なユースケース💡

チェックアウト👉 list-to-string

解決方法3
私たちが一度それを呼ぶならば?うん、もし我々が巣をなくすなら、すなわち、私たちの言葉をcharに平らにしますか?
👨🏻‍💻 フラットマップを使ってリストを平らにしましょう
フラットマップ
fun decodeMorse(code: String) = code
        .split("  ")
        .flatMap { it.split(" ") }
        .map {morseDecoder.get(it)?:"" }
        .joinToString("")

// 👨🏻‍🔧 complexity : O(n)
// ⏱ performance : took 464.0 us us on my machine
Whola!

解決方法4
またはこの問題を解決している方法を変更する💁‍♀️
fun decodeMorse(code: String): String {
    return code.trim()
        .replace("  ", " ")
        .split(" ")
        .map { morseDecoder[it]?:"" }
        .joinToString(" ")
}
// 👨🏻‍🔧 complexity : O(n)
// ⏱ performance : took 441.0 us on my machine
解決策に付属しないでください!

結論
これらの記事の目的は、Java上で嫌悪されていませんが、人々が同じロジックを書くことができます様々な方法を学ぶのを助けるために、より多くのkotlin標準ライブラリに焦点を当てた方法.
あなたがそれが有益であると思っていてください、そして、あなたがどんなフィードバックまたはポスト・リクエストを持っているか、私のメーリングリスト形式を購読したいならば、下記にあります.
次まで.ハッピーハッキング!👩‍💻
より多くの👇🏻

Big-Brain-Kotlin