Los programadores a menudo están obsesionados con dibujar fractales. Creo que necesitamos un nuevo medio informático.
El árbol H es un tipo bastante simple de fractal hecho de líneas horizontales y verticales. Aquí está en su décima iteración ( cortesía de Wikipedia ):
Ahora, imagine que cada una de las líneas de la imagen es un directorio (carpeta) en un sistema de archivos de computadora estándar. Todas menos las líneas más pequeñas se cruzan con dos líneas más pequeñas que ellas; Estas dos líneas más pequeñas son subdirectorios de la línea más grande. Por lo tanto, la línea horizontal grande en el medio es el directorio padre de las dos líneas verticales más grandes, que son a su vez padres, abuelos, etc. del resto de las líneas de la imagen.
Desafío
Escriba un programa que tome un entero positivo N a través de stdin o la línea de comando (o la alternativa más cercana) y cree un árbol de directorios que refleje la enésima iteración del fractal del árbol H.
La primera iteración (N = 1) es una sola línea horizontal. En cada iteración posterior, se agrega un nuevo conjunto de líneas verticales u horizontales a los extremos de las líneas actuales. Entonces para N = 2 se agregan dos líneas verticales (formando una H), para N = 3 se agregan cuatro líneas horizontales, etc.
El nombre del directorio raíz siempre debe ser tree
. Los nombres de los subdirectorios deben coincidir con la dirección que están en relación con su línea parental, utilizando right
, left
, up
y down
.
Desde el directorio raíz es siempre una línea horizontal que siempre tendrá right
y left
subdirectorios. Sin embargo, los dos tendrán up
y down
subdirectorios, y los tendrá right
y left
otra vez, y así sucesivamente.
Los directorios al final del límite de iteraciones deben estar vacíos.
Ejemplo
Para N = 3, el árbol de directorios debería verse así:
tree
right
up
down
left
up
down
Información adicional
- Idealmente, el
tree
directorio aparecerá en la misma carpeta en la que se encuentra el código fuente, pero está bien si va a algún directorio de trabajo. - Puede suponer que no hay un
tree
directorio preexistente en el lugar donde se creará el suyo. - Puede suponer que su programa siempre se ejecutará en el mismo sistema operativo moderno común (Mac / Windows / Linux). Básicamente, no se preocupe por usar un separador de archivos que no funcione en todos los sistemas operativos.
Puntuación
Este es el código de golf, por lo que gana el código más corto en bytes .
fuente
tree
siempre tienen que serleft
y enright
lugar deup
ydown
?Respuestas:
Rubí, 127 bytes
Probado en Windows. Toma entrada a través de STDIN.
f
genera de forma recursiva una lista de las hojas requeridas del árbol, y luego las alimento a una sola llamada al sistemamkdir
.fuente
Lua, 179
fuente
Python - 194
fuente
from os import*;s=system
["left","up"][n%2]
y puede dejar los corchetes(0,1)
para darfor i in 0,1:
Python 2 + * nix coreutils,
212189Genera todas las rutas y llamadas más internas.
mkdir -p
Se bloquea si la entrada <1
fuente
import os,itertools as t