https://coderun.yandex.ru/problem/histogram/description Легкая

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter

fun main() {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))

    // Считываем весь ввод в строку
    val text = buildString {
        var line: String?
        while (reader.readLine().also { line = it } != null) {
            append(line).append("\\n")
        }
    }

    val frequency = mutableMapOf<Char, Int>() // Словарь для подсчета частоты символов

    // Подсчет количества вхождений каждого символа, игнорируя пробелы и переводы строк
    for (char in text) {
        if (char != ' ' && char != '\\n') {
            frequency[char] = frequency.getOrDefault(char, 0) + 1
        }
    }

    val sortedChars = frequency.keys.sorted() // Сортируем символы в алфавитном порядке
    val maxHeight = frequency.values.maxOrNull() ?: 0 // Максимальная частота символов

    // Создаем массив для отображения гистограммы
    val histogram = Array(maxHeight) { CharArray(sortedChars.size) { ' ' } }

    // Заполняем гистограмму символами '#'
    for ((index, char) in sortedChars.withIndex()) {
        val count = frequency[char]!!
        for (i in 0 until count) {
            histogram[maxHeight - 1 - i][index] = '#' // Заполняем столбцы снизу вверх
        }
    }

    // Выводим гистограмму
    for (row in histogram) {
        writer.write(String(row) + "\\n")
    }
    
    // Выводим строку с символами в алфавитном порядке
    writer.write(sortedChars.joinToString("") + "\\n")

    reader.close()
    writer.flush()
    writer.close()
}