Dado un directorio (como C:/
), dado desde stdin o leído desde un archivo, produce un árbol de directorios, con cada archivo / carpeta sangrado en función de su profundidad.
Ejemplo
Si tengo un C:/
coche que sólo contiene dos carpetas foo
y bar
, y bar
es, en vacío foo
contiene baz.txt
, a continuación, ejecutar con la entrada C:/
produce:
C:/
bar/
foo/
baz.txt
mientras se ejecuta con entrada C:/foo/
debe producir
foo/
baz.txt
Como se trata de codegolf, gana el conteo de bytes más bajo. Las extensiones de archivo (como baz.txt
) son opcionales. Notas adicionales: los archivos ocultos pueden ignorarse, los directorios deben existir, se puede suponer que los archivos no contienen caracteres no imprimibles o nuevas líneas, pero todos los demás caracteres ASCII imprimibles están bien (los nombres de archivos con espacios deben ser compatibles). La salida se puede escribir en un archivo o stdout. Las hendiduras pueden estar formadas por un carácter de tabulación o 4 espacios.
fuente
.
)?Respuestas:
bash,
615854 bytesToma la entrada como un argumento de línea de comando, sale en STDOUT.
Tenga en cuenta que los espacios cerca del final antes del
|g
son en realidad un carácter de tabulación (SE los convierte en espacios cuando se muestran publicaciones).¡Gracias a @Dennis por 4 bytes!
fuente
Dyalog APL , 48 bytes
⍞
solicitud de entrada de caracteres'dir/s/b ',
anteponer texto⎕SH
ejecutar en shellr←
almacenar en r↑
hacer una lista de cadenas en una matriz de caracteres⍋
índices para clasificación ascendenter[
...]
reordenar r [ordenado](
...)
en el estándar fuera del comando de shell, haga:'[^\\]+\\'⎕R' '
regex reemplaza ejecuciones terminadas con barra invertida de barras no invertidas por cuatro espacios1↓
soltar la primera línea⊂∘⊃,
anteponer la primera [línea] adjuntaEl resultado de ingresar "\ tmp" en el indicador comienza de la siguiente manera en mi computadora:
⋮
fuente
SML , 176 bytes
Declara (entre otros) una función
%
que toma una cadena como argumento. Llame con% "C:/Some/Path";
o% (getDir());
para el directorio actual.Estoy usando el lenguaje StandardML, normalmente bastante funcional, cuya
FileSys
biblioteca descubrí después de leer este desafío.Los caracteres especiales
!
,&
,$
y%
no tienen ningún significado especial en el lenguaje mismo y se utilizan simplemente como identificadores; sin embargo, no se pueden mezclar con los identificadores alfanuméricos estándar que permiten deshacerse de algunos espacios necesarios.Puede compilarse así con SML / NJ o con Moscow ML * prefijando con
load"OS";
.* Ver
mosml.org
, no puede publicar más de 2 enlaces.fuente
C # (.NET Core) , 222 bytes
Pruébalo en línea!
El ungolf:
¡La primera vez que recursé una
Main
función!¡Creo que una persona que tiene un conocimiento más reciente de C # puede jugar más golf, ya que no programé en C # por algún tiempo!
fuente
PHP, 180 bytes
NULL
y será interpretado como0
porstr_repeat
; lanzará una advertencia si no se proporcionaagregue paréntesis
is_dir(...)?d(...):"..."
para eliminar las entradas ocultas de la salida (+2)reemplace
"#^\.#"
con#^\.+$#
para mostrar / repetir entradas ocultas pero omita las entradas de puntos (+2)closedir($s);
antes de la final}
para arreglar (+13)false!==
la condición while para arreglar (+8)con glob, 182 bytes (probablemente 163 en php futuro)
2
significaGLOB_MARK
, agregará una barra diagonal a todos los nombres de directorio, al igual quels -F
preg_replace
caracteres especiales de escape sepodrían haber abusado
preg_quote
de esto (-19); pero eso fallaría en los sistemas Windows, ya que la barra diagonal inversa es el separador de directorio allí.preg_quote
y funcionará en todos los sistemas.con iteradores, 183 bytes
(bueno, no solo iteradores: solía estar implícito
SplFileInfo::__toString()
en el golf$f->getBaseName()
y$f->isDir()
en las antiguas funciones de PHP 4).ls -a
),4096
o,FilesystemIterator::SKIP_DOTS
antes),1
para omitir entradas de puntos (+5) (ls -A
)1
significaRecursiveIteratorIterator::SELF_FIRST
fuente
PowerShell, 147 bytes
Hombre, siento que PS debería poder hacer algo como la respuesta bash, pero no se me ocurre nada más corto que lo que tengo aquí.
Explicación:
fuente
Python 2, 138 bytes
Modificado de esta respuesta SO . Esas son pestañas para la sangría, no espacios. La entrada se tomará como
"C:/"
.Pruébelo en línea : es bastante interesante que se me permita navegar por el directorio de Ideone ...
Mismo largo:
fuente
Lote, 237 bytes
Donde \ t representa el carácter de tabulación literal. Esta versión incluye
\
s finales en directorios, pero se pueden guardar 41 bytes si no son necesarios.fuente
Perl, 89 bytes
Es útil cuando hay un módulo de búsqueda en la distribución principal. El módulo Archivo :: Buscar de Perl no atraviesa el árbol en orden alfabético, pero la especificación no lo solicitó.
La secuencia de comandos propiamente dicha es de 76 bytes, conté 13 bytes para las opciones de línea de comandos.
fuente
Tcl , 116 bytes
Pruébalo en línea!
fuente
Java 8, 205 bytes
Este es un envío completo del programa que toma la entrada de su primer argumento de línea de comandos (no permitido explícitamente, pero hecho por muchos otros) e imprime la salida a la salida estándar.
Pruébelo en línea (observe el nombre de la interfaz diferente)
Sin golf
fuente