data class WordStats(
val word: String,
val count: Int,
val length: Int
)
fun main() {
val text = "Kotlin — прекрасный язык программирования. Разработка мобильных приложений на Kotlin приносит удовольствие. Программирования становится меньше, а Kotlin помогает писать чистый и прекрасный код."
val stats = analyzeText(text)
println("=== СТАТИСТИКА ТЕКСТА ===")
println("Общее количество слов: ${stats["totalWords"]}")
println("Уникальных слов: ${stats["uniqueWords"]}")
println("Средняя длина слова: ${String.format("%.2f", stats["averageWordLength"])}")
println("Самое длинное слово: ${stats["longestWord"]}")
println("\nТоп-5 самых частых слов:")
@Suppress("UNCHECKED_CAST")
(stats["top5Words"] as List<WordStats>).forEach {
println(" '${it.word}' — встретилось ${it.count} раз(а) (длина: ${it.length})")
}
}
fun analyzeText(text: String): Map<String, Any> {
val words = text.replace(Regex("[^a-zA-Zа-яА-ЯёЁ\\s]"), " ")
.lowercase()
.split(Regex("\\s+"))
.filter { it.length >= 3 }
val totalWords = words.size
val uniqueWords = words.distinct().size
val averageWordLength = if (words.isNotEmpty()) words.map { it.length }.average() else 0.0
val longestWord = words.maxByOrNull { it.length } ?: ""
val wordFrequency = words.groupBy { it }
.mapValues { it.value.size }
val top5Words = wordFrequency.entries
.sortedByDescending { it.value }
.take(5)
.map { (word, count) -> WordStats(word, count, word.length) }
return mapOf(
"totalWords" to totalWords,
"uniqueWords" to uniqueWords,
"averageWordLength" to averageWordLength,
"longestWord" to longestWord,
"wordFrequency" to wordFrequency,
"top5Words" to top5Words
)
}