Решение
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun isIdentifier(word: String, digitStart: Boolean, keywords: Set<String>, caseSensitive: Boolean): Boolean {
if (word.all { it.isDigit() }) return false
if (!digitStart && word.first().isDigit()) return false
val checkWord = if (caseSensitive) word else word.lowercase()
return checkWord !in keywords
}
fun main() {
val reader = BufferedReader(InputStreamReader(System.`in`))
val writer = BufferedWriter(OutputStreamWriter(System.out))
val (n, caseSensitive, digitStart) = reader.readLine().split(" ").let {
Triple(it[0].toInt(), it[1] == "yes", it[2] == "yes")
}
val keywords = mutableSetOf<String>()
repeat(n) {
val keyword = reader.readLine()
keywords.add(if (caseSensitive) keyword else keyword.lowercase())
}
val program = StringBuilder()
while (true) {
val line = reader.readLine() ?: break
program.append(line).append("\\n")
}
val text = program.toString()
val freqMap = mutableMapOf<String, Int>()
val orderList = mutableListOf<String>()
val regex = Regex("[a-zA-Z0-9_]+")
regex.findAll(text).forEach { match ->
val word = match.value
if (isIdentifier(word, digitStart, keywords, caseSensitive)) {
val key = if (caseSensitive) word else word.lowercase()
if (key !in freqMap) orderList.add(key)
freqMap[key] = (freqMap[key] ?: 0) + 1
}
}
var maxFreq = 0
var result = ""
orderList.forEach { id ->
val freq = freqMap[id] ?: 0
if (freq > maxFreq) {
maxFreq = freq
result = id
}
}
writer.write(result)
writer.newLine()
reader.close()
writer.close()
}