Решение
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.lang.StringBuilder
import java.util.HashMap
fun applyShift(word: String, shift: Int): String {
val sb = StringBuilder(word.length)
for (char in word) {
val shiftedCode = (char.code - 'a'.code + shift) % 26
sb.append('a' + shiftedCode)
}
return sb.toString()
}
fun getCanonicalForm(word: String): String {
if (word.isEmpty()) {
return ""
}
val shift = (26 - (word[0].code - 'a'.code)) % 26
return applyShift(word, shift)
}
fun main() {
val reader = BufferedReader(InputStreamReader(System.`in`))
val writer = BufferedWriter(OutputStreamWriter(System.out))
val bookWords = reader.readLine().split(' ').filter { it.isNotEmpty() }.toSet()
val canonicalMap = HashMap<String, String>()
for (word in bookWords) {
val canonical = getCanonicalForm(word)
canonicalMap[canonical] = word
}
val n = reader.readLine().toInt()
for (i in 0 until n) {
val encryptedWord = reader.readLine()
if (encryptedWord.isNotEmpty()) {
val canonicalEncrypted = getCanonicalForm(encryptedWord)
val originalWord = canonicalMap[canonicalEncrypted] ?: ""
writer.write(originalWord)
writer.newLine()
} else {
writer.newLine()
}
}
writer.flush()
reader.close()
writer.close()
}