Цель:
Создайте программу, чтобы найти самый маленький файл в текущей папке.
- Размер файла может быть измерен в байтах или символах.
- Если несколько файлов имеют одинаковый размер, вы можете выбрать один или отобразить все из них.
- Можно предположить, что в папке будет хотя бы один файл, а размер файлов не будет равен 0.
Предположим, что все файлы в папке могут быть загружены языком, который вы используете.
Предположим, что в текущем каталоге нет папок.
Входные данные:
Программа не должна принимать никаких действий от пользователя, кроме случаев, когда:
- Если у вашего языка нет «текущей папки», он может запросить у пользователя имя / путь к папке.
- Если ваш язык не может напрямую обращаться к файлам на вашем компьютере, он может позволить пользователю загружать файлы. (JavaScript, например)
Выход:
Имя самого маленького файла должно отображаться.
- Допускаются начальные / конечные символы, если ясно, какой файл был выбран.
- (Печать списка всех файлов противоречит правилам).
Примечания:
- Стандартные лазейки не допускаются.
- Вы не можете изменить / создать / удалить файлы в папке, чтобы изменить результат.
- Это код-гольф ; кратчайший ответ (в байтах) выигрывает.
code-golf
file-system
12Me21
источник
источник
Ответы:
Vim 12 байт
Попробуйте онлайн!
Объяснение:
!!
это команда фильтра . Он передает содержимое текущей строки в произвольную системную команду и отправляет вывод обратно в буфер. Это полезно для использования внешних инструментов для вещей, в которых bash лучше, чем vim, например,!!rev
для обращения к текущей строке или!Gxxd
для шестнадцатеричного буфера. В нашем случае буфер пуст, поэтому он эквивалентен:r!ls
, который просто передает вывод команды в текущую строку.Теперь курсор находится в строке 1, и мы хотим удалить каждую строку, кроме последней. Наивный подход
Но мы можем сделать лучше. Как я объяснил в этом наконечнике , то
{
можно , как правило (но не всегда) быть эквивалентныgg
. Здесь даже лучше. Поскольку движение персонажа на основе , не построчного какgg
есть, мы не должны идти вверх линию первым, оставив намисточник
Bash + coreutils, 13 байт
Объяснение:
источник
ls -1Sa|tail -1
на 3 байта короче и имеет более чистый вывод.ls
обнаруживает вывод на терминал, он отформатирует вывод в несколько столбцов. Но если output - это труба, он просто сделает 1 на строку. Сравнитеls
противls|cat
ls -Sar|sed q
Python
23,94767454 байта-18 байт благодаря @orlp
-2 байт благодаря @Jonathan Allan
-20 байт благодаря изменению спецификации вызовов
источник
print min(filter(path.isfile,listdir(".")),key=path.getsize)
чище и существенно короче"."
это значение по умолчанию.print(min(filter(path.isfile,listdir()),key=path.getsize))
wc
который дал мне 1 байт большеfilter
бит не нужен. Это также не работает в Python 3, такprint
как это функция. Ниже будет работать, и быть существенно короче:print(min(listdir(),key=path.getsize))
PowerShell ,
302421 байтПопробуйте онлайн!
ls
это псевдоним дляGet-ChildItem
. Это связаноsort-object
сlength
атрибутом, поэтому файлы сортируются по размеру. Мы индексируем это с помощью,(...)[0]
чтобы получить первое (т.е. самое маленькое), а затем берем.Name
его. Вывод через неявныйWrite-Output
происходит при завершении программы.Сохранено 6 байт, поскольку мы гарантируем, что в каталоге существуют только файлы. Сохранено дополнительно 3 благодаря ConnorLSW.
источник
-file
так как только файлы находятся в текущем каталоге?sort le*
чтобы побрить несколько байтов, так как powershell примет это.Рубин,
61403837 байтСпасибо GB и Value Ink
источник
Dir.foreach(?.).min_by{|x|File.size x}
получает тот же результат в 38 байтов.Dir[?*]
намного короче, но не включают в себя скрытые файлы Unix, такие как.bash_profile
...Dir[?*,".*"]
. Строка глобуса.?*
не будет соответствовать файлу,.a
если он существует.Mathematica, 35 байт
FileNames[]
создает список имен всех файлов (и каталогов) в текущем каталоге;~MinimalBy~FileByteCount
выбирает имя файла, чей счетчик байтов наименьший.FileByteCount
выдает кучу ошибок, когда применяется к каталогам, но ошибки не мешают работе программы.источник
Java 7,
149142 байтаПопробуйте онлайн!
-7 байт благодаря CAD97
источник
()->java.utils.stream(new java.io.File(".").listFiles()).max((a,b)->a.length()-b.length).get().getName()
для 104 байтовSH (Linux / Unix)
15141314 байт-S
сортирует по размеру (по убыванию),и-r
переворачиваетtail -1
выводит последний файл в списке.@ Dennis Спасибо за сохранение 1 байта @Dani_l Спасибо за сохранение 1 байта.
источник
tail
вместо реверсирования, и-1
это сокращение для-n1
.MATLAB / Octave,
5248 байтовобъяснение
Это получает список каталогов всех файлов и папок в текущем каталоге, используя
dir
. Выходной сигналdir
являетсяstruct
содержащий имя файла, будь то каталог или нет, размер (в байтах) и т.д.Затем мы можем взять массив размеров каждого в байтах
[d.bytes]
и выполнить поэлементное деление с логическим значением, указывающим, является ли это каталогом или нет,~[d.isdir]
который даст,Inf
где это каталог (деление на ноль) и размер в байтах в противном случае (деление на 1).Мы находим индекс минимума этого массива, используя второй вывод,
min
и используем его для индексации в исходной структуре и отображения имени сd(n).name
источник
disp(...)
вокруг вывода, чтобы правильно распечатать его. В противном случае, если, например, в папке был файл с именем,ans
который не является самым маленьким в папке, вывод не будет ясным относительно того, какой файл является самым маленьким для тех, кто не знаком с MATLAB.ans =
порядке.
(текущая папка) и..
(папка выше), поэтому, кажется, не могу удалить проверку каталога. Прости за это.Скала, 52 байта
Старая версия, 79 байт
Скорректировано в соответствии с рекомендациями jaxad0127. Сейчас это всего 52 байта.
источник
Пакет,
433935 байтВыходные данные содержат пробел по некоторым причинам, но, к счастью, это разрешено. Редактировать: теперь при условии, что нет каталогов для сохранения 4 байта.
источник
/a-d
.Perl 6 ,
33 32 3116 байтПопытайся
Попытайся
Попытайся
Попытайся
Expanded:
источник
dir
умолчанию имеет значение$*CWD
, а в описании задачи сказано, что вы можете предположить, что папок не будет, поэтому я думаю, что вы можете сократить это доdir.min(*.s).put
.J ,
2120 байтСохраненный байт благодаря @ Конору .
объяснение
источник
Пакетный файл,
777263 байтаТам нет прямого эквивалента
head
илиtail
в пакетном режиме, по крайней мере, насколько мне известно, так что это грязный обходной путь. (с большой помощью @Neil - спасибо!)Команда
dir
, с помощью которой/o-s
можно отсортировать файлы по убыванию и/b
вывести только имена файлов. Мы перебираем ихFOR /F
,F
каждый раз устанавливая переменную в имя файла. Наконец, мы выводим только последний сECHO %F%
.Сохранено еще 9 байтов благодаря Нейлу и благодаря гарантиям отсутствия каталогов.
источник
FOR
переменная требует двух%
секунд для работы в скрипте. В противном случае, несколько уловок игры в гольф: 1. Не используйте@ECHO OFF
короткие сценарии, добавляйте@
к каждой строке и послеDO
. 2. Удалите пробел раньшеDO
. 3. Пробелы и:
s не нужны вdir
команде.PHP,
8462 байтаТак как вопрос был обновлен с предположением, что в текущем каталоге не будет папок, я смог удалить файл проверки файлов и проверить это.
Вот мой старый ответ:
Это лучшее, что я мог сделать. Может быть, есть лучший способ, по которому я скучаю.
источник
Node.js (используется
walk
), 114 байтИгнорировать перевод строки:
Это вызывает обходчика, который проходит через текущий каталог (
__dirname
) и для каждого файла вызывает функцию со своим stats
и функцию next,n()
которая должна быть вызвана для продолжения обхода. Затем вend
, он печатает имя файла сsize
найденным минимумом в байтах.s.size>m.size
возвращаетfalse
когдаm.size
естьundefined
, поэтому после первого обратного вызоваm
он равен первому найденному файлу и продолжает оттуда нормально.источник
R, 36 байт
Разъяснения
file.info()
Возвращаетdata.frame
«информацию о файле», когда ему дается символ или вектор символов имен файлов / папок, который при использовании в списке файлов / папок в текущем каталоге (dir()
) выглядит примерно так:Впоследствии у нас просто найти имя файла, для которого
size
столбец (сокращенно используя$s
) является наименьшим. Следовательно, если существует более одного файла с наименьшим размером, все будут возвращены.Бонус: если мы также хотим игнорировать папки в текущем каталоге, мы можем просто искать размер когда
isdir == FALSE
:x=file.info(y<-dir());y[x$s==min(x$s[!x$i])]
получается 44 байта.источник
file.size
короче, потому что вы не должны делать$s
потом.Tcl , 88 байт
Попробуйте онлайн!
источник
SmileBASIC, 110 байт
Только смотрит на
TXT:
файлы, так какDAT:
файлы не могут быть загружены, если вы уже не знаете их размер, что делает невозможным загрузку случайного.источник
DAT:
файл? Можете ли вы переборщили каждое имя / размер файла в папке?DAT:
файл в 2-мерный массив (например) вызовет ошибку, поэтому вы не сможете его перебором. Вам просто нужно знать количество измерений заранее, как обычно.DAT:
файл в 3-й массив? Тогда вы можете создать массив максимального размера. А вы никак не можете отловить ошибки?Groovy , 49 байтов
Попробуйте онлайн!
Закрытие, использование:
m(new File("location"))
источник
C #, 277 байт
Не самый короткий, но что вы ожидаете от C #?
Golfed
Ungolfed
источник
Röda ,
3231 байтЭто анонимная функция, которая сортирует файлы в текущем каталоге по длине файла и затем выбирает первый файл
pull
.Используйте это так:
main{ {ls""|sort key=fileLength|pull} }
источник
ls""
работает так же хорошо, какls"."
. Я думаю, что вы можете сохранить байт от этогоSmileBASIC 3, 105 байт (конкурирует?)
Beats ответа 12Me21 в но по- прежнему страдает от невозможности загрузки DAT файлов (которые чувствуют себя очень жестоко быть дисквалифицирующими с учетом обстоятельств.)
Более короткая версия выше раздражает и запрашивает каждый файл для загрузки, но это работает. Еще на два байта вы можете подавить подсказку; измените строку 2 на это:
источник
Пакетный файл, 33 байта
Пакетные файлы на этот раз умеренно конкурентоспособны, как ни странно.
Выход
Найдите способ остановить создание
q
доdir/os/b
запуска, и вы сэкономите максимум 6 байтов, не помещая выходной файл в отдельный каталог.Будет всегда выводить
q
как наименьший файл (если он не связан с другим 0-байтовым файлом), так как он создается как пустой файл до того, какdir/b/os
соберет список файлов.источник
C ++ 17 (gcc) , 180 байт
Попробуйте онлайн!
Требуется новая стандартная библиотека, которая реализует
std::filesystem
.источник
Зш ,
1814 байтовПопробуйте онлайн!Попробуйте онлайн!(D)
глобусы точечные файлы(oL)
сортирует по размеру[1]
выбирает первый матчисточник