C:/
Erstellen Sie bei einem gegebenen Verzeichnis (z. B. ), das von stdin angegeben oder aus einer Datei gelesen wurde, einen Verzeichnisbaum, wobei jede Datei / jeder Ordner basierend auf ihrer Tiefe eingerückt wird.
Beispiel
Wenn ich ein C:/
Laufwerk , das nur enthält zwei Ordner foo
und bar
, und bar
ist leer , während foo
enthält baz.txt
, dann läuft mit Eingang C:/
erzeugt:
C:/
bar/
foo/
baz.txt
beim laufen mit eingabe C:/foo/
sollte produzieren
foo/
baz.txt
Da dies Codegolf ist, gewinnt die niedrigste Byteanzahl. Die Dateierweiterungen (z. B. baz.txt
) sind optional. Zusätzliche Hinweise: Versteckte Dateien können ignoriert werden, Verzeichnisse müssen tatsächlich vorhanden sein, es kann davon ausgegangen werden, dass Dateien keine nicht druckbaren Zeichen oder neuen Zeilen enthalten, aber alle anderen druckbaren ASCII-Zeichen sind in Ordnung (Dateinamen mit Leerzeichen müssen unterstützt werden). Die Ausgabe kann in eine Datei oder in eine Standardausgabe geschrieben werden. Die Einrückungen können entweder aus einem Tabulatorzeichen oder 4 Leerzeichen bestehen.
quelle
.
)?Antworten:
Bash,
615854 BytesNimmt die Eingabe als Befehlszeilenargument und gibt sie in STDOUT aus.
Beachten Sie, dass die Leerzeichen am Ende vor dem
|g
tatsächlich ein Tabulatorzeichen sind (SE konvertiert sie in Leerzeichen, wenn Beiträge angezeigt werden).Danke an @Dennis für 4 Bytes!
quelle
Dyalog APL , 48 Bytes
⍞
Eingabeaufforderung zur Zeicheneingabe'dir/s/b ',
Text voranstellen⎕SH
in Shell ausführenr←
speichern in r↑
Erstellen Sie eine Liste der Zeichenfolgen in der Zeichenmatrix⍋
Indizes für aufsteigende Sortierungr[
...]
neu ordnen r [sortiert](
...)
auf dem Standard aus dem Shell-Befehl:'[^\\]+\\'⎕R' '
Regex ersetzt Backslash-terminierte Läufe von Nicht-Backslashes durch vier Leerzeichen1↓
Lassen Sie die erste Zeile fallen⊂∘⊃,
Stellen Sie die beiliegende erste [Zeile] voran.Das Ergebnis der Eingabe von "\ tmp" in die Eingabeaufforderung beginnt auf meinem Computer wie folgt:
⋮
quelle
SML , 176 Bytes
Deklariert (unter anderem) eine Funktion,
%
die eine Zeichenfolge als Argument verwendet. Rufen Sie mit% "C:/Some/Path";
oder% (getDir());
für das aktuelle Verzeichnis.Ich verwende die normalerweise eher funktional verwendete Sprache StandardML, deren
FileSys
Bibliothek ich nach dem Lesen dieser Herausforderung entdeckt habe.Die Sonderzeichen
!
,&
,$
und%
haben keine besondere Bedeutung in der Sprache selbst und werden einfach als Bezeichner verwendet; Sie können jedoch nicht mit den alphanumerischen Standardkennungen gemischt werden, wodurch einige ansonsten benötigte Leerzeichen entfernt werden können.Kann so mit SML / NJ oder mit Moscow ML * durch Präfixieren mit kompiliert werden
load"OS";
.* Siehe
mosml.org
, kann nicht mehr als 2 Links posten.quelle
C # (.NET Core) , 222 Byte
Probieren Sie es online aus!
Der Unwolf:
Zum ersten Mal habe ich eine
Main
Funktion rekursiv gemacht !Ich glaube, eine Person, die frischere Kenntnisse über C # hat, kann mehr Golf spielen, da ich einige Zeit nicht auf C # programmiert habe!
quelle
PHP, 180 Bytes
NULL
und wird als interpretiert werden ,0
durchstr_repeat
; wird eine Warnung auslösen, wenn nicht angegebenSie Klammern hinzu
is_dir(...)?d(...):"..."
, um versteckte Einträge aus der Ausgabe zu entfernen (+2).Ersetzen Sie diese
"#^\.#"
durch#^\.+$#
, um versteckte Einträge anzuzeigen / wiederzuverwenden, aber überspringen Sie Punkteinträge (+2).closedir($s);
vor dem Finale}
zu fixieren (+13)false!==
der while-Bedingung vor, die behoben werden soll (+8).mit glob 182 bytes (wahrscheinlich 163 in zukünftigen php)
2
steht fürGLOB_MARK
, wird wie bei allen Verzeichnisnamen einen Schrägstrich anhängenls -F
preg_replace
Escape-Glob-Sonderzeichen, dieich dafür hätte missbrauchen
preg_quote
können (-19); Dies würde jedoch auf Windows-Systemen fehlschlagen, da der Backslash dort das Verzeichnis-Trennzeichen ist.preg_quote
und auf allen Systemen ermöglicht.mit Iteratoren 183 Bytes
(na ja, nicht nur Iteratoren: Ich habe implizit
SplFileInfo::__toString()
Golf$f->getBaseName()
und$f->isDir()
die alten PHP 4-Funktionen verwendet.)ls -a
),4096
oder,FilesystemIterator::SKIP_DOTS
vorher),1
, um Punkteinträge zu überspringen (+5) (ls -A
)1
steht fürRecursiveIteratorIterator::SELF_FIRST
quelle
PowerShell, 147 Byte
Mann, ich denke, PS sollte in der Lage sein, so etwas wie die Bash-Antwort zu machen, aber ich habe nichts kürzeres als das, was ich hier habe.
Erläuterung:
quelle
Python 2, 138 Bytes
Geändert von dieser SO-Antwort . Dies sind Tabulatoren für Einrückungen, keine Leerzeichen. Eingabe wird wie genommen
"C:/"
.Probieren Sie es online aus - Es ist ziemlich interessant, dass ich das Verzeichnis auf Ideone durchsuchen darf ...
Die gleiche Länge:
quelle
Stapel, 237 Bytes
Wobei \ t das Literal-Tabulatorzeichen darstellt. Diese Version enthält nachgestellte
\
s in Verzeichnissen, aber 41 Bytes können gespeichert werden, wenn sie nicht benötigt werden.quelle
Perl, 89 Bytes
Dies ist nützlich, wenn die Kerndistribution ein Suchmodul enthält. Perls File :: Find-Modul durchläuft den Baum nicht in alphabetischer Reihenfolge, aber die Spezifikation hat nicht danach gefragt.
Das eigentliche Skript ist 76 Bytes, ich habe 13 Bytes für die Befehlszeilenoptionen gezählt.
quelle
Tcl , 116 Bytes
Probieren Sie es online aus!
quelle
Java 8, 205 Bytes
Dies ist eine vollständige Programmübermittlung, die Eingaben von ihrem ersten Befehlszeilenargument (nicht explizit zulässig, aber von vielen anderen ausgeführt) übernimmt und die Ausgabe als Standard aus druckt.
Probieren Sie es online aus (beachten Sie den anderen Namen der Benutzeroberfläche)
Ungolfed
quelle