Решение
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
data class Template(
val pattern: String,
val country: String,
val operator: String,
val countryCode: String,
val operatorCode: String
)
fun cleanNumber(number: String): String {
// Удаляем все символы кроме цифр
return number.filter { it.isDigit() }
}
fun matchesTemplate(number: String, template: Template): Boolean {
val cleanNum = cleanNumber(number)
val patternNum = template.pattern.split(" - ")[0].filter { it.isDigit() || it == 'X' }
if (cleanNum.length != patternNum.length) return false
for (i in cleanNum.indices) {
if (patternNum[i] != 'X' && patternNum[i] != cleanNum[i]) {
return false
}
}
// Проверяем, что countryCode и operatorCode совпадают
val countryCodeLen = template.countryCode.length
val operatorCodeLen = template.operatorCode.length
return cleanNum.startsWith(template.countryCode) &&
cleanNum.substring(countryCodeLen, countryCodeLen + operatorCodeLen) == template.operatorCode
}
fun formatNumber(number: String, template: Template): String {
val cleanNum = cleanNumber(number)
val countryCodeLen = template.countryCode.length
val operatorCodeLen = template.operatorCode.length
val personalNum = cleanNum.substring(countryCodeLen + operatorCodeLen)
return "+${template.countryCode} (${template.operatorCode}) $personalNum - ${template.country} ${template.operator}"
}
fun main(args: Array<String>) {
val reader = BufferedReader(InputStreamReader(System.`in`))
val writer = BufferedWriter(OutputStreamWriter(System.out))
// Читаем количество номеров
val n = reader.readLine().toInt()
val numbers = Array(n) { reader.readLine() }
// Читаем количество шаблонов
val m = reader.readLine().toInt()
val templates = Array(m) {
val line = reader.readLine()
val (pattern, rest) = line.split(" - ")
val parts = pattern.split(" ")
val countryCode = parts[0].drop(1) // Убираем +
val operatorCode = parts[1].removeSurrounding("(", ")")
val (country, operator) = rest.split(" ")
Template(pattern, country, operator, countryCode, operatorCode)
}
// Обрабатываем каждый номер
for (number in numbers) {
val matchingTemplate = templates.find { matchesTemplate(number, it) }
if (matchingTemplate != null) {
writer.write(formatNumber(number, matchingTemplate))
writer.newLine()
}
}
reader.close()
writer.close()
}