Diberikan direktori (seperti C:/
), diberikan dari stdin atau baca dari file, menghasilkan pohon direktori, dengan setiap file / folder diindentasi berdasarkan kedalamannya.
Contoh
Jika saya memiliki C:/
drive yang hanya berisi dua folder foo
dan bar
, dan bar
kosong saat foo
berisi baz.txt
, kemudian berjalan dengan input C:/
menghasilkan:
C:/
bar/
foo/
baz.txt
saat berjalan dengan input C:/foo/
harus menghasilkan
foo/
baz.txt
Karena ini adalah codegolf, jumlah byte terendah menang. Ekstensi file (seperti baz.txt
) adalah opsional. Catatan tambahan: file tersembunyi dapat diabaikan, direktori harus benar-benar ada, dapat diasumsikan bahwa file tidak mengandung karakter yang tidak patut atau baris baru tetapi semua karakter ASCII yang dapat dicetak baik-baik saja (nama file dengan spasi harus didukung). Output dapat ditulis ke file atau stdout. Lekukan dapat terdiri dari karakter tab atau 4 spasi.
sumber
.
)?Jawaban:
bash,
615854 byteMengambil input sebagai argumen baris perintah, menghasilkan pada STDOUT.
Perhatikan bahwa spasi di dekat akhir sebelum
|g
sebenarnya adalah karakter tab (SE mengonversinya menjadi spasi saat menampilkan tulisan).Berkat @ Dennis untuk 4 byte!
sumber
Dyalog APL , 48 byte
⍞
meminta input karakter'dir/s/b ',
teks depan⎕SH
jalankan di shellr←
simpan di r↑
membuat daftar string ke dalam matriks karakter⍋
indeks untuk penyortiran naikr[
...]
menyusun ulang r [diurutkan](
...)
pada standar dari perintah shell, lakukan:'[^\\]+\\'⎕R' '
regex menggantikan backslash yang diakhiri dengan non-backslash sebanyak empat spasi1↓
turunkan baris pertama⊂∘⊃,
tambahkan dulu [baris] pertama terlampirHasil memasukkan "\ tmp" ke prompt dimulai sebagai berikut di komputer saya:
⋮
sumber
SML , 176 byte
Menyatakan (antara lain) fungsi
%
yang menggunakan string sebagai argumen. Panggil dengan% "C:/Some/Path";
atau% (getDir());
untuk direktori saat ini.Saya menggunakan bahasa StandardML yang biasanya digunakan secara fungsional yang
FileSys
-Library yang saya temukan setelah membaca tantangan ini.Karakter khusus
!
,&
,$
dan%
tidak memiliki arti khusus dalam bahasa itu sendiri dan hanya digunakan sebagai pengidentifikasi; Namun mereka tidak dapat dicampur dengan pengidentifikasi alfanumerik standar yang memungkinkan untuk menghilangkan beberapa ruang yang diperlukan.Dapat dikompilasi seperti ini dengan SML / NJ atau dengan Moscow ML * dengan awalan dengan
load"OS";
.* Lihat
mosml.org
, tidak dapat memposting lebih dari 2 tautan.sumber
C # (.NET Core) , 222 byte
Cobalah online!
Ungolf:
Pertama kali saya pernah mengulang suatu
Main
fungsi!Saya percaya seseorang yang memiliki pengetahuan C # yang lebih segar dapat golf lebih banyak, karena saya tidak memprogram C # untuk beberapa waktu!
sumber
PHP, 180 byte
NULL
dan akan ditafsirkan sebagai0
olehstr_repeat
; akan memberikan peringatan jika tidak disediakanmenambahkan tanda kurung di sekitar
is_dir(...)?d(...):"..."
untuk menghapus entri tersembunyi dari output (+2)ganti
"#^\.#"
dengan#^\.+$#
untuk menampilkan / rekur entri tersembunyi tetapi lewati entri titik (+2)closedir($s);
sebelum final}
untuk memperbaikinya (+13)false!==
tergantung pada kondisi sementara untuk diperbaiki (+8)dengan glob, 182 byte (mungkin 163 di php masa depan)
2
singkatanGLOB_MARK
, akan menambahkan garis miring ke semua nama direktori, seperti halnyals -F
preg_replace
lolos gumpal karakter khusussaya bisa disalahgunakan
preg_quote
untuk ini (-19); tapi itu akan gagal pada sistem Windows, karena backslash adalah pemisah direktori di sana.preg_quote
dan bekerja pada semua sistem.dengan iterators, 183 byte
(well, bukan iterators murni: saya menggunakan implisit
SplFileInfo::__toString()
untuk golf$f->getBaseName()
dan$f->isDir()
ke fungsi PHP 4 lama).ls -a
),4096
atau,FilesystemIterator::SKIP_DOTS
sebelum),1
untuk melewati entri titik (+5) (ls -A
)1
adalah singkatanRecursiveIteratorIterator::SELF_FIRST
sumber
PowerShell, 147 byte
Sobat, saya merasa seperti PS harus bisa melakukan sesuatu seperti jawaban bash, tapi saya tidak datang dengan sesuatu yang lebih pendek dari apa yang saya dapatkan di sini.
Penjelasan:
sumber
Python 2, 138 byte
Dimodifikasi dari jawaban SO ini . Itu adalah tab untuk indentasi, bukan spasi. Input akan diambil seperti
"C:/"
.Cobalah online - Cukup menarik bahwa saya diizinkan menjelajahi direktori di Ideone ...
Sama panjang:
sumber
Batch, 237 byte
Di mana \ t mewakili karakter tab literal. Versi ini menyertakan trailing
\
s pada direktori tetapi 41 byte dapat disimpan jika tidak diperlukan.sumber
Perl, 89 byte
Ini berguna ketika ada modul find di distribusi inti. File Perl :: Find module tidak melintasi susunan pohon dalam urutan abjad, tetapi spec tidak menanyakannya.
Skrip yang tepat adalah 76 byte, saya menghitung 13 byte untuk opsi baris perintah.
sumber
Tcl , 116 byte
Cobalah online!
sumber
Java 8, 205 byte
Ini adalah pengajuan program penuh yang mengambil input dari argumen baris perintah pertama (tidak diizinkan secara eksplisit, tetapi dilakukan oleh banyak orang lain) dan mencetak output ke standar keluar.
Cobalah Online (catat nama antarmuka yang berbeda)
Tidak disatukan
sumber