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

Условие

Вовочка ломает систему безопасности Пентагона. Для этого ему понадобилось узнать, какие символы в секретных зашифрованных посланиях употребляются чаще других. Для удобства изучения Вовочка хочет получить графическое представление встречаемости символов. Поэтому он хочет построить гистограмму количества символов в сообщении. Гистограмма — это график, в котором каждому символу, встречающемуся в сообщении хотя бы один раз, соответствует столбик, высота которого пропорциональна количеству этих символов в сообщении.

Примеры

Ввод: Hello, world! Вывод: # ## ######### !,Hdelorw

Ввод: Twas brillig, and the slithy toves Did gyre and gimble in the wabe; All mimsy were the borogoves, And the mome raths outgrabe. Вывод: # # # # # # # # # #

# ###

######

############## ############## ##

######################## ,.;ADTabdeghilmnorstuvwy

Решение

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()
}