package net.mezimmah.wkt9.keypad import net.mezimmah.wkt9.exception.MissingLetterCode import java.lang.StringBuilder class Keypad { private val letterCodeMap: MutableMap = 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] } }