Biorąc pod uwagę katalog (taki jak C:/
), podany ze standardowego wejścia lub odczytany z pliku, stwórz drzewo katalogów, z każdym wcięciem pliku / folderu na podstawie jego głębokości.
Przykład
Jeśli mam C:/
dysk, który zawiera tylko dwa foldery foo
i bar
, i bar
jest pusty, gdy foo
zawiera baz.txt
, wówczas uruchomiony z wejściem C:/
produkuje:
C:/
bar/
foo/
baz.txt
podczas pracy z nakładem C:/foo/
powinien produkować
foo/
baz.txt
Ponieważ jest to kodegolf, wygrywa najmniejsza liczba bajtów. Rozszerzenia plików (takie jak baz.txt
) są opcjonalne. Dodatkowe uwagi: ukryte pliki można zignorować, katalogi muszą faktycznie istnieć, można założyć, że pliki nie zawierają znaków niedrukowalnych ani nowych wierszy, ale wszystkie inne znaki ASCII do wydruku są w porządku (nazwy plików ze spacjami muszą być obsługiwane). Dane wyjściowe można zapisać do pliku lub standardowego wyjścia. Wcięcia mogą składać się ze znaku tabulacji lub 4 spacji.
źródło
.
)?Odpowiedzi:
bash,
615854 bajtówPobiera dane wejściowe jako argument wiersza poleceń, dane wyjściowe w STDOUT.
Zauważ, że spacje na końcu przed
|g
znakiem są w rzeczywistości znakiem tabulacji (SE konwertuje je na spacje podczas wyświetlania postów).Dzięki @Dennis za 4 bajty!
źródło
Dyalog APL , 48 bajtów
⍞
monit o wprowadzenie znaku'dir/s/b ',
poprzedzać tekst⎕SH
wykonać w powłocer←
przechowywać w r↑
zrobić listę ciągów znaków w macierz znaków⍋
wskaźniki do sortowania rosnącegor[
...]
zmienić kolejność r [posortowane](
...)
na standardowym poleceniu poza powłoką wykonaj:'[^\\]+\\'⎕R' '
regex zastępuje zakończone odwrotnym ukośnikiem przebiegi nie odwrotnych ukośników czterema spacjami1↓
upuść pierwszą linię⊂∘⊃,
dodaj załączony pierwszy [wiersz]Wynik wprowadzenia „\ tmp” do monitu zaczyna się na moim komputerze w następujący sposób:
⋮
źródło
SML , 176 bajtów
Deklaruje (między innymi) funkcję,
%
która przyjmuje ciąg znaków jako argument. Zadzwoń z% "C:/Some/Path";
lub% (getDir());
do bieżącego katalogu.Używam normalnie raczej funkcjonalnie używanego języka StandardML, którego
FileSys
-Bibliotekę odkryłem po przeczytaniu tego wyzwania.Znaki specjalne
!
,&
,$
i%
nie mają szczególnego znaczenia w samym języku, a są po prostu wykorzystywane jako identyfikatory; nie można ich jednak łączyć ze standardowymi identyfikatorami alfanumerycznymi, co pozwala pozbyć się całkiem potrzebnych spacji.Może być skompilowany w ten sposób z SML / NJ lub z Moscow ML * przez prefiks z
load"OS";
.* Zobacz
mosml.org
, nie można opublikować więcej niż 2 linków.źródło
C # (.NET Core) , 222 bajty
Wypróbuj online!
Ungolf:
Po raz pierwszy w historii zawróciłem
Main
funkcję!Wierzę, że osoba, która ma świeższą wiedzę na temat C #, może bardziej grać w golfa, ponieważ przez pewien czas nie programowałem na C #!
źródło
PHP, 180 bajtów
NULL
i będzie interpretowany jako0
ostr_repeat
; wyśle ostrzeżenie, jeśli nie zostanie podanedodać nawiasy wokół
is_dir(...)?d(...):"..."
aby usunąć ukryte dane z wyjścia (+2)zastąpić
"#^\.#"
ze#^\.+$#
na wyświetlaczu / recurse ukryte wpisy ale pominąć kropka wpisy (+2)closedir($s);
przed finałem}
do naprawy (+13)false!==
przejść do warunku while, aby to naprawić (+8)z glob, 182 bajty (prawdopodobnie 163 w przyszłości php)
2
oznaczaGLOB_MARK
, doda ukośnik do wszystkich nazw katalogów, podobnie jakls -F
preg_replace
ucieka GLOB znaki specjalneMógłbym nadużywane
preg_quote
do tego (-19); ale to się nie powiedzie w systemach Windows, ponieważ ukośnik odwrotny jest tam separatorem katalogu.preg_quote
i działanie na wszystkich systemach.z iteratorami, 183 bajtami
(cóż, nie tylko iteratorami: używałem domyślnie
SplFileInfo::__toString()
do gry w golfa$f->getBaseName()
i$f->isDir()
starych funkcji PHP 4).ls -a
),4096
lub,FilesystemIterator::SKIP_DOTS
przed,),1
aby pominąć kropki (+5) (ls -A
)1
oznaczaRecursiveIteratorIterator::SELF_FIRST
źródło
PowerShell, 147 bajtów
Człowieku, wydaje mi się, że PS powinien być w stanie zrobić coś w stylu odpowiedzi na bash, ale nie wymyślam niczego krótszego niż to, co tu mam.
Wyjaśnienie:
źródło
Python 2, 138 bajtów
Zmodyfikowano z tej odpowiedzi SO . To tabulatory wcięcia, a nie spacje. Dane wejściowe zostaną pobrane jak
"C:/"
.Wypróbuj online - To całkiem interesujące, że mogę przeglądać katalog w Ideone ...
Ta sama długość:
źródło
Partia, 237 bajtów
Gdzie \ t oznacza dosłowny znak tabulacji. Ta wersja zawiera końcowe
\
s na katalogach, ale 41 bajtów można zapisać, jeśli nie są potrzebne.źródło
Perl, 89 bajtów
Jest to przydatne, gdy w podstawowej dystrybucji znajduje się moduł znajdujący. Moduł Perla :: File :: Find nie przegląda drzewa w kolejności alfabetycznej, ale specyfikacja o to nie prosiła.
Właściwy skrypt ma 76 bajtów, policzyłem 13 bajtów dla opcji wiersza poleceń.
źródło
Tcl , 116 bajtów
Wypróbuj online!
źródło
Java 8, 205 bajtów
Jest to pełne przesłanie programu, które pobiera dane wejściowe z pierwszego argumentu wiersza poleceń (nie jest to wyraźnie dozwolone, ale jest wykonywane przez wiele innych) i wypisuje dane wyjściowe na standardowe wyjście.
Wypróbuj online (zwróć uwagę na inną nazwę interfejsu)
Nie golfił
źródło