Os programadores geralmente são obcecados em desenhar fractais. Acho que precisamos de um novo meio baseado em computador.
A árvore H é um tipo bastante simples de fractal feito de linhas horizontais e verticais. Aqui está a décima iteração ( cortesia da Wikipedia ):
Agora, imagine que cada uma das linhas da imagem seja um diretório (pasta) em um sistema de arquivos padrão do computador. Todas, exceto as linhas menores, cruzam duas linhas menores que elas mesmas; essas duas linhas menores são subdiretórios da linha maior. Assim, a grande linha horizontal no meio é o diretório pai das duas maiores linhas verticais, que, por sua vez, são pais, avós, etc. do restante das linhas da imagem.
Desafio
Escreva um programa que receba um número inteiro positivo N via stdin ou pela linha de comando (ou alternativa mais próxima) e crie uma árvore de diretórios que espelhe a enésima iteração do fractal da árvore H.
A primeira iteração (N = 1) é uma única linha horizontal. Em cada iteração subsequente, um novo conjunto de linhas verticais ou horizontais é adicionado às extremidades das linhas atuais. Portanto, para N = 2 são adicionadas duas linhas verticais (formando H), para N = 3 são adicionadas quatro linhas horizontais, etc.
O nome do diretório raiz deve sempre ser tree
. Os nomes dos subdiretórios devem corresponder a direção que eles estão em com relação a sua linha pai, usando right
, left
, up
e down
.
Desde o diretório raiz é sempre uma linha horizontal que terá sempre right
e left
subdiretórios. Mas esses dois terão up
e down
subdiretórios, e aqueles terão right
e left
novamente, e assim por diante.
Os diretórios no final do limite de iterações devem estar vazios.
Exemplo
Para N = 3, a árvore de diretórios deve ficar assim:
tree
right
up
down
left
up
down
Informação adicional
- Idealmente, o
tree
diretório aparecerá na mesma pasta em que o código-fonte está, mas tudo bem se for para algum diretório de trabalho. - Você pode presumir que não há
tree
diretório pré-existente no local em que o seu será criado. - Você pode presumir que seu programa sempre será executado no mesmo sistema operacional moderno e comum (Mac / Windows / Linux). Basicamente, não se preocupe em usar um separador de arquivos que não funcione em todos os sistemas operacionais.
Pontuação
Isso é código-golfe, então o código mais curto em bytes vence.
fonte
tree
sempre devem serleft
e emright
vez deup
edown
?Respostas:
Ruby, 127 bytes
Testado no Windows. Recebe entrada via STDIN.
f
gera recursivamente uma lista das folhas necessárias da árvore e, em seguida, apenas as alimento para uma única chamada de sistema demkdir
.fonte
Lua, 179
fonte
Python - 194
fonte
from os import*;s=system
["left","up"][n%2]
e soltar os colchetes(0,1)
para darfor i in 0,1:
Python 2 + * nix coreutils,
212189Gera todos os caminhos e chamadas mais internos
mkdir -p
Falha se a entrada <1
fonte
import os,itertools as t