Programiści często mają obsesję na punkcie rysowania fraktali. Myślę, że potrzebujemy nowego medium komputerowego.
Drzewa H jest dość prosty typ Wstęga z linii poziomych i pionowych. Oto jego dziesiąta iteracja ( dzięki uprzejmości Wikipedii ):
Teraz wyobraź sobie, że każda z linii na obrazie jest katalogiem (folderem) w standardowym systemie plików komputera. Wszystkie linie oprócz najmniejszych przecinają dwie linie mniejsze od siebie; te dwie mniejsze linie są podkatalogami większej linii. Tak więc duża pozioma linia pośrodku jest katalogiem nadrzędnym dwóch największych pionowych linii, które z kolei są rodzicami, dziadkami itp. Pozostałych linii na obrazie.
Wyzwanie
Napisz program, który przyjmuje dodatnią liczbę całkowitą N przez stdin lub wiersz poleceń (lub najbliższą alternatywę) i tworzy drzewo katalogów, które odzwierciedla N-tą iterację fraktala drzewa H.
Pierwsza iteracja (N = 1) to pojedyncza linia pozioma. W każdej kolejnej iteracji nowy zestaw linii pionowych lub poziomych jest dodawany na końcach bieżących linii. Tak więc dla N = 2 dodaje się dwie linie pionowe (tworząc kształt H), dla N = 3 dodaje się do tego cztery linie poziome itp.
Nazwa katalogu głównego musi zawsze być tree
. Nazwy podkatalogów musi być zgodny z kierunkiem są w odniesieniu do ich linii dominującej, przy wykorzystaniu right
, left
, up
i down
.
Ponieważ katalog główny jest zawsze linią poziomą, zawsze będzie miał right
i left
podkatalogi. Ale te dwa będą miały up
i down
podkatalogi, a te będą miały right
ileft
jeszcze raz, i tak dalej.
Katalogi na końcu limitu iteracji powinny być puste.
Przykład
Dla N = 3 drzewo katalogów powinno wyglądać następująco:
tree
right
up
down
left
up
down
Dodatkowe informacje
- Idealnie
tree
katalog wyskakuje w tym samym folderze, w którym znajduje się kod źródłowy, ale jest w porządku, jeśli przejdzie do jakiegoś katalogu roboczego. - Możesz założyć, że nie ma wcześniej istniejącego
tree
katalogu w miejscu, w którym zostanie utworzony twój. - Możesz założyć, że Twój program będzie zawsze działał w tym samym wspólnym nowoczesnym systemie operacyjnym (Mac / Windows / Linux). Zasadniczo nie martw się o użycie separatora plików, który nie działa we wszystkich systemach operacyjnych.
Punktacja
To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach .
źródło
tree
zawsze muszą byćleft
iright
zamiastup
idown
?Odpowiedzi:
Rubin, 127 bajtów
Testowane w systemie Windows. Pobiera dane wejściowe przez STDIN.
f
rekurencyjnie generuje listę wymaganych liści drzewa, a następnie po prostu karmię je jednym wywołaniem systemowymmkdir
.źródło
Lua, 179
źródło
Python - 194
źródło
from os import*;s=system
["left","up"][n%2]
i możesz upuścić nawiasy,(0,1)
aby daćfor i in 0,1:
Python 2 + * nix coreutils,
212189Generuje wszystkie najbardziej wewnętrzne ścieżki i połączenia
mkdir -p
Awarie, jeśli dane wejściowe <1
źródło
import os,itertools as t