37 lines
932 B
Kotlin
37 lines
932 B
Kotlin
package net.mezimmah.wkt9.keypad
|
|
|
|
import net.mezimmah.wkt9.exception.MissingLetterCode
|
|
import java.lang.StringBuilder
|
|
|
|
class Keypad {
|
|
private val letterCodeMap: MutableMap<Char, Int> = mutableMapOf()
|
|
|
|
init {
|
|
KeyLayout.numeric.forEach { (key, code) ->
|
|
indexKeyLetters(key, code)
|
|
}
|
|
}
|
|
|
|
private fun indexKeyLetters(key: Key, code: Int) {
|
|
KeyLayout.chars[key]?.map { letter ->
|
|
letterCodeMap[letter] = code
|
|
}
|
|
}
|
|
|
|
fun getCodeForWord(word: String): String {
|
|
val builder = StringBuilder()
|
|
val normalized = word.lowercase()
|
|
|
|
for (letter in normalized) {
|
|
val code = codeForLetter(letter) ?: throw MissingLetterCode("No code found for '$letter'")
|
|
|
|
builder.append(code)
|
|
}
|
|
|
|
return builder.toString()
|
|
}
|
|
|
|
private fun codeForLetter(letter: Char): Int? {
|
|
return letterCodeMap[letter]
|
|
}
|
|
} |