Самые редкие байты

  • 10
  • Недоступна
Ввести с консоли имя файла. Найти байт или байты с минимальным количеством повторов. Вывести их на экран через пробел. Закрыть поток ввода-вывода.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (104)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Евгений20 уровень, Днепр
7 марта, 19:02
Вот странно, в файлах .jar байт 0 встречается чаще всего, а в файлах .tar.gz — реже всего. Нет ли в этом всемирного заговора? :) Сдуру потратил 2 попытки. Бывает и хуже. Не тестируйте задачу на бинарных файлах с высокой энтропией.
Александр20 уровень, Казань
4 марта, 11:41
Еле поток закрыл - надо сразу после while ставить.
Дмитрий Войтенко26 уровень, Харьков
28 февраля, 11:10
С помощью TreeSet получаем красивый код.
Sipa Barskij26 уровень
13 февраля, 13:43
Господа ученики . Есть идея - кто плюс минус одинакового уровня, объединится в группу , в той же телеге. По моему опыту , это существенно может улучшить обучающий процесс. Задачки с джава раша, концепты решений, обмен книгами и видео, вообщем эффект должен быть. Кому интересно - https://t.me/JavaGramGroup
Maksim19 уровень, Алматы
12 февраля, 06:00
Порнография, а не постановка задачи. Нигде не сказано, что минимальное кол-во повторов, это когда повторов вообще нет, т.е. байт встречается только один раз. Будьте внимательны. У меня была проверка: найти минимальное количество байт, но не 1. Как только убрал это условие - валидатор принял. Еще один пример задания, где не алгоритм разрабатываешь, а борешься с валидатором, что бы задачу зачесть.
Николай22 уровень
21 февраля, 16:02
Вы не поверите, но условие более чем валидное. Это из разряда, что первый элемент массива имеет индекс 0. Просто это надо понять и принять.
Georgy18 уровень, Москва
5 февраля, 16:13
На заметку- валидатор не пашет с while(true) и выходом из цикла при байте = -1 пашет только с while (myFileStream.available()>0)
Николай22 уровень
21 февраля, 16:03
Вот код для получения массива байтов из файла
FileInputStream file = new FileInputStream(name);
byte[] b = new byte[file.available()];
file.read(b, 0, b.length);
Евгений Ашкинадзе19 уровень, Минск
31 января, 23:07
Я в мапе мнимум повторов искал так: начиная с единицы и до размера мапы искал значения повторов. Как только что-то находится, то через foreach забирал те ключи(байты), у которых в значении есть найденый минимум.
S3R3N1TY33 уровень, Санкт-Петербург
31 января, 21:07
Решил через
int[] array = new int[256]; //индексы элементов массива и есть наши байты от 0 до 255 = всего 256
          while (inputStream.available()>0)
              array[inputStream.read()]++; //для каждого прочитан.байта увеличиваем значение в массиве
То есть в начале заполнили массив а потом с ним работаем. Далее: 1. Находим в массиве минимальный элемент-значение (кол-во повторений одного и того же байта в файле), то что мы считали инкрементом ++ во время чтения файла. 2. Выводим на экран все байты (в нашем случае индексы нашего массива) у которых значение равно нашему найденному минимальному.
Арсен26 уровень, Алматы
18 февраля, 05:32
Можете подробно обьяснить как работает эта конструкция , я ее никак не могу понять. Особенно где ++ как он считает повторения вообще не вкуриваю. По этой же причине не смог понять эту замечательную наверное статью) https://javarush.ru/groups/posts/1468-pobaytovaja-rabota-s-faylami
array[inputStream.read()]++
Арсен26 уровень, Алматы
18 февраля, 05:33
не хотелось бы делать гавнокод который я сделал с использованием аррайлистов и мапов в предыдущей задаче. Там то еще порево)
S3R3N1TY33 уровень, Санкт-Петербург
18 февраля, 08:37
while (inputStream.available()>0)
               array[inputStream.read()]++;
Пока наш поток доступен- еще есть байты для чтения, мы читаем inputStream.read() байт и обращаемся к нашему массиву array, по индексу(то, что мы прочли) находим наш элемент(элемент нашего массива, это количество именного этого байта, который мы прочли) и увеличиваем. Таким образом заполняется наш массив array, после цикла мы имеем внутри массива, количество каждого из 256 разных байтов. Понять как работает поможет более детальное рассмотрение массива до цикла и после.
Арсен26 уровень, Алматы
18 февраля, 09:38
Спасибо большое!! Понимание пришло с использованием твоего разъяснения и детального рассмотрения массива до цикла и после.
REM23 уровень, Москва
20 февраля, 16:30
я делал через мапу, тоже проблем не составило, но этот метод мне понавился!
Александр20 уровень, Казань
4 марта, 11:39
Интересное решение )
Evgenii26 уровень, Санкт-Петербург
25 января, 12:09
Это кошмар, почему не написано в задании, что можно использовать только обычный массив?!!! Валидатор не принимает решение через Arraylist
сергей сергеевич35 уровень, Krasnoznamensk
26 января, 16:03
у меня принято решение через HashMap
Иван Подаван28 уровень
20 января, 08:03
В принципе логика как и задачи перед ней. Заполнить массив данными и потом выдать на экран элементы массива которые встречаются меньше всего, и которые не равны 0. То есть если в ячейке массива стоит ноль, то такого байта в принципе нет в файле. Код получается лаконичный и довольно легко читаем