Для данного каталога (например, C:/
), полученного из stdin или считанного из файла, создайте дерево каталогов, в котором каждый файл / папка имеет отступ с учетом его глубины.
пример
Если у меня есть C:/
диск, который содержит только две папки foo
и bar
, и bar
пустой, в то время как foo
содержит baz.txt
, то запуск с вводом C:/
производит:
C:/
bar/
foo/
baz.txt
при работе с вводом C:/foo/
следует выдавать
foo/
baz.txt
Поскольку это Codegolf, выигрывает меньшее количество байтов. Расширения файлов (такие как baz.txt
) не являются обязательными. Дополнительные примечания: скрытые файлы можно игнорировать, каталоги должны фактически существовать, можно предположить, что файлы не содержат непечатаемых символов или новых строк, но все остальные печатаемые символы ASCII хороши (имена файлов с пробелами должны поддерживаться). Вывод может быть записан в файл или стандартный вывод. Отступы могут состоять из символа табуляции или 4 пробелов.
источник
.
)?Ответы:
Баш,
615854 байтаПринимает ввод в качестве аргумента командной строки, выводит на STDOUT.
Обратите внимание, что пробелы в конце перед
|g
символом табуляции фактически являются символом табуляции (SE преобразует их в пробелы при отображении сообщений).Спасибо @Dennis за 4 байта!
источник
Dyalog APL , 48 байтов
⍞
запрос на ввод символов'dir/s/b ',
предварять текст⎕SH
выполнить в оболочкеr←
магазин в р↑
составить список строк в символьную матрицу⍋
индексы для сортировки по возрастаниюr[
...]
перезаказ г [отсортировано](
...)
по стандартной команде оболочки выполните:'[^\\]+\\'⎕R' '
регулярное выражение заменяет завершенные с обратной косой чертой последовательности без обратной косой черты четырьмя пробелами1↓
бросить первую строку⊂∘⊃,
добавьте в начало первую [строку]Результат ввода "\ tmp" в подсказку начинается на моем компьютере следующим образом:
⋮
источник
SML , 176 байт
Объявляет (среди прочего) функцию,
%
которая принимает строку в качестве аргумента. Позвонить с% "C:/Some/Path";
или% (getDir());
для текущего каталога.Я использую обычно довольно функционально используемый язык StandardML,
FileSys
библиотеку которого я обнаружил после прочтения этого задания.Специальные символы
!
,&
,$
и%
не имеют особого значения в самом языке и просто используются в качестве идентификаторов; однако их нельзя смешивать со стандартными буквенно-цифровыми идентификаторами, что позволяет избавиться от некоторых других необходимых мест.Может быть скомпилирован так с SML / NJ или с московским ML * с префиксом
load"OS";
.* Смотрите
mosml.org
, не можете опубликовать более 2 ссылок.источник
C # (.NET Core) , 222 байта
Попробуйте онлайн!
Негольф:
Впервые я когда-либо повторял
Main
функцию!Я верю, что человек, который имеет более глубокие знания C #, может больше играть в гольф, так как я некоторое время не программировал на C #!
источник
PHP, 180 байт
NULL
и будет интерпретироваться как0
путемstr_repeat
; выдаст предупреждение, если не указанодобавить в круглых скобки ,
is_dir(...)?d(...):"..."
чтобы удалить скрытые записи с выхода (+2)заменить
"#^\.#"
с#^\.+$#
на дисплей / рекурсии скрытых записей , но пропустить точку записи (+2)closedir($s);
перед финалом,}
чтобы исправить (+13)false!==
условие while для исправления (+8)с glob, 182 байта (вероятно, 163 в будущем php)
2
означаетGLOB_MARK
, добавит косую черту ко всем именам каталогов, как иls -F
preg_replace
ускользает Глоб специальные символыЯ мог бы злоупотребляли
preg_quote
для этого (-19); но это не сработает в системах Windows, так как обратная косая черта является разделителем каталогов.preg_quote
и работать на всех системах.с итераторами, 183 байта
(ну, не чисто итераторы: я использовал неявное
SplFileInfo::__toString()
для гольфа$f->getBaseName()
и$f->isDir()
для старых функций PHP 4).ls -a
),4096
или,FilesystemIterator::SKIP_DOTS
перед),1
пропуском записей точек (+5) (ls -A
)1
обозначаетRecursiveIteratorIterator::SELF_FIRST
источник
PowerShell, 147 байт
Чувак, я чувствую, что PS должен быть в состоянии сделать что-то вроде ответа bash, но я не придумаю ничего более короткого, чем то, что я получил здесь.
Объяснение:
источник
Python 2, 138 байт
Изменено из этого SO ответа . Это вкладки для отступа, а не пробелы. Вход будет принят как
"C:/"
.Попробуйте онлайн - довольно интересно, что мне разрешено просматривать каталог на Ideone ...
Одинаковая длина:
источник
Пакет, 237 байт
Где \ t представляет буквенный символ табуляции. Эта версия включает в себя конечные
\
s для каталогов, но 41 байт может быть сохранен, если они не нужны.источник
Perl, 89 байт
Это полезно, когда в основном дистрибутиве есть модуль поиска. Модуль Perl File :: Find не пересекает дерево в алфавитном порядке, но спецификация не просила об этом.
Сценарий сам по себе составляет 76 байтов, для параметров командной строки я насчитал 13 байтов.
источник
Tcl , 116 байт
Попробуйте онлайн!
источник
Java 8, 205 байт
Это полное представление программы, которое берет ввод из своего первого аргумента командной строки (явно не разрешено, но сделано многими другими) и выводит вывод в стандартный вывод.
Попробуйте онлайн (обратите внимание на другое имя интерфейса)
Ungolfed
источник