Ваша цель - написать программу или функцию, которая принимает в качестве входных данных строку, представляющую путь к файлу, и выводит истинное значение, если этот файл не пустой и не содержит ненулевых байтов - т. Е. Все биты равны 0 - - и фальшивое значение в противном случае.
Я понимаю, что это очень простая проблема, и я думаю, что могу что-то взломать, но я подозреваю, что должен быть какой-то короткий и элегантный способ сделать это, и это дало мне идею сделать из этого вызов.
Это код-гольф , поэтому выигрывает самый короткий код в байтах. (Мои собственные предпочтения будут заключаться в самом быстром решении, но это слишком зависит от реализации ...)
Смежные вопросы : дополни файл нулями
Мотивация : Это только для того, чтобы сказать, откуда возникла проблема, если вы заинтересованы. Вам не нужно читать это.
ISO-образы CD и DVD, скопированные с помощью «dd» или другими способами, часто заканчиваются последовательностью бесполезных блоков, содержащих только нулевые байты. Стандартные методы удаления этих блоков известны и просты (см. Https://unix.stackexchange.com/questions/74827/ ), но иногда они могут удалять ненулевые полезные данные, поскольку носитель может лгать о своем собственном размере. Поэтому я хочу проверить, что удаленные блоки содержат только нулевые байты. Удаление этих блоков важно для определения нормализованной версии ISO-образов.
источник
'
.GNU sed -zn , 5 байтов
Входной файл передается в sed в качестве параметра командной строки. Выведите как стандартный код возврата оболочки - то есть 0 - ИСТИНА, 1 - ЛОЖЬ.
Обычно
sed
работает на входных записях с разделителями новой строки (AKA "линии").-z
изменяет это на входные записи, разделенные нулями. Если какие-либо входные записи соответствуют.
регулярному выражению, тогда используйтеq
код выхода 1.Попробуйте онлайн!
источник
DOS, 37 байт
Он открывает файл с именем в командной строке, возвращает 0, если он пуст или содержит ненулевое значение, в противном случае возвращает 1.
источник
Атташе , 24 байта
Попробуйте онлайн!
объяснение
Это композиция из 4 функций, выполняемых одна за другой:
FileRead
- принимает имя файла в качестве входного, возвращает содержимое этого файлаOrds
- возвращает кодовые точки ASCII каждого символа в спискеMax&0
- это равносильно тому, для аргументаx
,Max[x, 0]
; это, в свою очередь, вычисляет максимум всех записей вx
и0
(дает0
пустой список)Zero
- это предикат, который проверяет, действительно ли это число равно 0, и возвращает это логическое значение.источник
@_@
)C (32-битная платформа), 65 байт
Предполагается, что размеры указателей одинаковы, что почти всегда верно. Возвращает с
0
кодом завершения в случае успеха (файл содержит толькоNUL
символы), в противном случае используется другое значение.Поведение не определено, если аргумент командной строки не является путем к читаемому файлу.
источник
int**v
? Я не могу найти компилятор, в котором это не происходит, не делая этого. Кроме того, вы можете немного сэкономить, преднамеренно ошибаясь , но я не знаю, является ли это лучшим подходом.sizeof(void*) == sizeof(int)
(или, в более общем случае, «32-битная платформа»), затем ... наamd64
платформе, попробуйте скомпилировать с-m32
;)-m32
): попробуйте онлайн!Утилиты Bash + GNU, 26 байт
Входное имя файла задается в качестве параметра командной строки. Выведите как стандартный код возврата оболочки - то есть 0 - ИСТИНА, 1 - ЛОЖЬ.
Попробуйте онлайн!
источник
Wolfram Language (Mathematica) , 30 байтов
Попробуйте онлайн!
объяснение
Альтернативный раствор, 22 байта
Если предполагается, что пустые файлы проходят, это можно сократить до:
Попробуйте онлайн!
источник
Java, 149 байт
источник
Perl 5, 20 байт
$\=0;exit<>=~/^\0+$/
Принимает имя файла в аргументах командной строки и возвращает ответ в коде выхода программы
источник
Python 3, 59 байт
Возвращает 0 для успеха (все байты ноль).
Возвращает 1 при ошибке (хотя бы один ненулевой байт или файл нулевой длины).
источник
APL (Dyalog Unicode) , 14 байтов
Полная программа. Запрашивает имя файла от stdin.
Попробуйте онлайн!
⍞
запрос имени файла11 ¯1⎕MAP
сопоставить этот файл с упакованным битовым массивом⌈/
максимум (уменьшение); наименьшее число с плавающей запятой, если оно пустое, в противном случае 0 или 10=
ноль равен этому?источник
Haskell, 49 байтов
Очевидно, что если импорт не включен, то это 26 байтов.
источник
readFile
вместоgetContets
. Я думаю, что вы можете прочитать файл как обычную строку, сравнить=='\0'
(или лучше<'\1'
) и избавиться отimport
. Как вы можете использовать анонимную функцию, вы можете опускатьf x=
и идти pointfree:(all(<'\1')<$>).readFile
.readFile
, что вызовет исключение при обнаружении недопустимой последовательности Unicode. Хороший вопрос, касающийся очков.JavaScript (ES8), 52 байта
Принимает URL в качестве аргумента и возвращает обещание, которое разрешается,
true
если файл не пустой и не содержит нулевых байтов.источник
Зш , 35 байт
Попробуйте онлайн! Выходы через код выхода.
Чтение, разделение на символы и поразрядная или каждая кодовая точка вместе.
Если файл пуст, тело цикла никогда не запускается, поэтому цикл возвращает truey. Если значения истинности и ложности можно поменять местами, то начальное значение может
!
быть удалено для сохранения в 2 байта.источник