Встречаемость символов

  • 20
  • Недоступна
Программа запускается с одним параметром - именем файла, который содержит английский текст. Посчитать частоту встречания каждого символа. Отсортировать результат по возрастанию кода ASCII (почитать в инете). Пример: ','=44, 's'=115, 't'=116. Вывести на консоль отсортированный результат: [символ1] ча
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (356)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Николай Т.20 уровень, Рязань
пятница, 01:36
Надо всё-так уточнять что не только английский текст, вообще всё посчитать в диапазоне от 0 до 127.
Михаил Клименко19 уровень, Краснодар
4 сентября, 18:46
Вы решили задачу лучше, чем 0% учеников. Вам удалось ее решить с 46 попытки. Среднее количество попыток для этой задачи 2.96. Всего эту задачу решили 15653 учеников. На этой мажорной ноте я перехожу на следующий уровень :) О чем можно не жалеть в такой ситуации - код, с которым Валя меня пропустила, занял всего 22 строчки :) BufferedReader не подходит. Достаточно использовать один массив char[], я взял длину 256 элементов, но понимаю, что можно было обойтись 128 элементами.
Сергей19 уровень, Киев
2 сентября, 19:10
Сначала решал через TreeMap, но благодаря этой статье решил без коллекций, через обычный массив.
Дмитрий Яковенко19 уровень, Москва
11 сентября, 15:01
В этой статье основной выигрыш был при отказе от побайтовой работы с диском и переходу к буферу. Что логично. А вот отказываться от коллекций в пользу массива, ну такое себе. Читабельность кода - страдает.
wan-derer.ru24 уровень, Москва
31 августа, 13:57
Нет, ну жованый крот! Символы настоящие начинаются с пробела (код 32)! До этого идёт всякая служебка! Зачем её-то считать?! Или хотя бы заменять мнемониками... Опять кривые задания!
Иван20 уровень, Москва
17 августа, 15:44
Этому учили ещё в первом разделе javarush:
char ch = 's';
int number = (int)ch;
5 августа, 11:27
ну что, запихал в карту, если в карте уже есть то увеличивал счетчик, это просто дальше поделил карту на 2 arraylist потом сортировочка for i , for j... сравнивал вот это вот: (byte)stringsList.get(j).charAt(0)
5 августа, 11:38
теперь понимаю, что можно было в разы проще) создать byte[], заполнить его 1...128, int[128] заполнять по мере нахождения совпадения считываемых байтов с массивом байтов. Потом вывести все ненулевые элементы массива int с (char)byte[i]
Sasha Motorin20 уровень, Кострома
16 августа, 18:31
сделал так но почему-то валидатор не принял, хотя всё работало
wan-derer.ru24 уровень, Москва
31 августа, 13:54
есть TreeMap, она уже сортированная, бери да выводи.... но у меня почему-то не проходит валидацию, хотя на компе работает
Mridea23 уровень, Новосибирск
31 июля, 05:28
Ух.... 15 попыток на сортировку)) Причём выводить нужно только отсортированный Map! Нельзя вывести вот так
for(int i=0; i<128; i++){
            if(map.containsKey(i)) System.out.println((char)i +" "+ map2.get(i));
        }
Если map не отсортирован!
Уася31 уровень, Замусральск
18 июля, 21:31
Да уж. Мой код выполнялся в 27 раз медленнее, чем код из коментариев.
Dator23 уровень, Киев
15 июля, 14:34
int [] на 256 ячеек на выполнение - 48мс. файл 1094кб. 25 строк кода. Это для тех кто старался с TreeMap и т.д. В большинстве случаев, чем проще инструменты мы используем, тем быстрее это все работает.
Dator23 уровень, Киев
15 июля, 15:13
Проделал те же маневры для достоверности. Тот же файл (1094кб)
Map<Integer, Integer> map = new TreeMap<>();
Один цикл заполняет при считывании файла, потом другой крутит TreeMap и выводит в консоль. 284мс.
5 августа, 11:31
154мс=(
5 августа, 11:53
перешаманил код по вашему совету, массив byte, int по 128 штук, все равно 100 мс только вышло, как вы 48 мс сделали? я вот заполнил массив байт 0...127, создал пустой инт на 128, потом получая байты из файла пробегался по массиву байт, пока не найду, если нашел, то увеличивал инт в нужном месте и break; потом вывел ненулевые (char) + " " +int
Verhun Kyrylo23 уровень
26 августа, 10:26
У меня с простым массивом файл на 1.5 Мб считало 4977 мс. А с TreeMap считало 5073 мс. Выигрыш не большой.
Антоний Шаламов19 уровень, Хабаровск
20 сентября, 14:31
Возможно, разница в скорости доступа к диску
Ruslan Murat22 уровень
15 июля, 12:12
Сидишь значит себе, сортируешь лист, а оказывается все это время ты ходячая угроза, так и появляются хацкеры?