Dado um diretório (como C:/
), fornecido pelo stdin ou lido de um arquivo, produza uma árvore de diretórios, com cada arquivo / pasta recuado com base em sua profundidade.
Exemplo
Se eu tiver um C:/
carro que só contém duas pastas foo
e bar
, e bar
é ao mesmo tempo vazia foo
contém baz.txt
, em seguida, executando com a entrada C:/
produz:
C:/
bar/
foo/
baz.txt
durante a execução com entrada C:/foo/
deve produzir
foo/
baz.txt
Como este é um codegolf, a menor contagem de bytes vence. As extensões de arquivo (como baz.txt
) são opcionais. Notas extras: os arquivos ocultos podem ser ignorados, os diretórios devem realmente existir, pode-se supor que os arquivos não contenham caracteres não imprimíveis ou novas linhas, mas todos os outros caracteres ASCII imprimíveis são adequados (nomes de arquivos com espaços devem ser suportados). A saída pode ser gravada em arquivo ou stdout. As indentações podem ser compostas por um caractere de tabulação ou quatro espaços.
fonte
.
)?Respostas:
bash,
615854 bytesRecebe a entrada como argumento da linha de comando e sai em STDOUT.
Observe que os espaços próximos ao final antes da
|g
são realmente um caractere de tabulação (o SE os converte em espaços ao exibir postagens).Obrigado a @Dennis por 4 bytes!
fonte
Dyalog APL , 48 bytes
⍞
prompt para entrada de caracteres'dir/s/b ',
anexar texto⎕SH
executar em shellr←
armazenar em r↑
faça a lista de strings na matriz de caracteres⍋
índices para classificação crescenter[
...]
reordenar r [classificado](
...)
no comando padrão fora do shell, faça:'[^\\]+\\'⎕R' '
regex substitui execuções terminadas por barra invertida por quatro espaços1↓
largar a primeira linha⊂∘⊃,
preceda a primeira [linha] fechadaO resultado da inserção de "\ tmp" no prompt começa da seguinte maneira no meu computador:
⋮
fonte
SML , 176 bytes
Declara (entre outras) uma função
%
que aceita uma string como argumento. Ligue com% "C:/Some/Path";
ou% (getDir());
para o diretório atual.Estou usando a linguagem StandardML, normalmente bastante funcional, cuja
FileSys
biblioteca-descobri depois de ler este desafio.Os caracteres especiais
!
,&
,$
e%
não têm nenhum significado especial em sua própria língua e são simplesmente usadas como identificadores; no entanto, eles não podem ser misturados com os identificadores alfanuméricos padrão, o que permite eliminar alguns espaços necessários.Pode ser compilado assim com SML / NJ ou com Moscow ML * prefixando com
load"OS";
.* Veja
mosml.org
, não é possível postar mais de 2 links.fonte
C # (.NET Core) , 222 bytes
Experimente online!
O ungolf:
Primeira vez em que recursionei uma
Main
função!Acredito que uma pessoa que tenha um conhecimento mais recente de C # possa jogar mais, porque eu não programava em C # há algum tempo!
fonte
PHP, 180 bytes
NULL
e será interpretado como0
porstr_repeat
; emitirá um aviso se não for fornecidoadicione parênteses
is_dir(...)?d(...):"..."
para remover entradas ocultas da saída (+2)substitua
"#^\.#"
por#^\.+$#
para exibir / recursar entradas ocultas, mas pule entradas de ponto (+2)closedir($s);
antes da final}
para corrigir (+13)false!==
a condição while para corrigir (+8)com glob, 182 bytes (provavelmente 163 no php futuro)
2
apoiaGLOB_MARK
, acrescentará uma barra a todos os nomes de diretório, assim comols -F
preg_replace
caracteres especiais escapes glob queeu poderia ter abusado
preg_quote
por isso (-19); mas isso falharia nos sistemas Windows, pois a barra invertida é o separador de diretórios lá.preg_quote
e o trabalho em todos os sistemas.com iteradores, 183 bytes
(bem, não puramente iteradores: usei implícito
SplFileInfo::__toString()
no golfe$f->getBaseName()
e$f->isDir()
nas funções antigas do PHP 4.)ls -a
),4096
ou,FilesystemIterator::SKIP_DOTS
antes),1
para pular entradas de ponto (+5) (ls -A
)1
significaRecursiveIteratorIterator::SELF_FIRST
fonte
PowerShell, 147 bytes
Cara, eu sinto que o PS deve ser capaz de fazer algo como a resposta do bash, mas não estou apresentando nada mais curto do que o que tenho aqui.
Explicação:
fonte
Python 2, 138 bytes
Modificado a partir desta resposta SO . Essas são guias para recuo, não espaços. Entrada será tomada como
"C:/"
.Experimente online - é bem interessante que eu tenha permissão para navegar no diretório no Ideone ...
Mesmo comprimento:
fonte
Lote, 237 bytes
Onde \ t representa o caractere de tabulação literal. Esta versão inclui os
\
s finais nos diretórios, mas 41 bytes podem ser salvos se não forem necessários.fonte
Perl, 89 bytes
É útil quando há um módulo de localização na distribuição principal. O módulo File :: Find do Perl não atravessa a árvore em ordem alfabética, mas a especificação não pediu isso.
O script propriamente dito é 76 bytes, contei 13 bytes para as opções de linha de comando.
fonte
Tcl , 116 bytes
Experimente online!
fonte
Java 8, 205 bytes
Este é um envio completo do programa que recebe a entrada do seu primeiro argumento de linha de comando (não é explicitamente permitido, mas é feito por muitos outros) e imprime a saída na saída padrão.
Experimente Online (observe o nome da interface diferente)
Ungolfed
fonte