Programmierer sind oft besessen davon , Fraktale zu zeichnen . Ich denke, wir brauchen ein neues computerbasiertes Medium.
Der H-Baum ist eine ziemlich einfache Art von Fraktalen, die aus horizontalen und vertikalen Linien bestehen. Hier ist es bei der zehnten Iteration (mit freundlicher Genehmigung von Wikipedia ):
Stellen Sie sich nun vor, jede der Zeilen im Bild ist ein Verzeichnis (Ordner) in einem Standard-Computer-Dateisystem. Alle außer den kleinsten Linien kreuzen zwei Linien, die kleiner sind als sie selbst; Diese beiden kleineren Zeilen sind Unterverzeichnisse der größeren Zeile. Somit ist die große horizontale Linie in der Mitte das Elternverzeichnis der beiden größten vertikalen Linien, die wiederum Eltern, Großeltern usw. der übrigen Linien im Bild sind.
Herausforderung
Schreiben Sie ein Programm, das eine positive Ganzzahl N über stdin oder die Befehlszeile (oder die nächstgelegene Alternative) aufnimmt und einen Verzeichnisbaum erstellt, der die N-te Iteration des H-Baum-Fraktals widerspiegelt.
Die erste Iteration (N = 1) ist eine einzelne horizontale Linie. In jeder nachfolgenden Iteration wird ein neuer Satz vertikaler oder horizontaler Linien an die Enden der aktuellen Linien angefügt. Für N = 2 werden also zwei vertikale Linien hinzugefügt (wodurch eine H-Form entsteht), für N = 3 werden vier horizontale Linien hinzugefügt usw.
Der Name des Stammverzeichnisses muss immer sein tree
. Die Namen der Unterverzeichnisse müssen die Richtung passen sie in Bezug auf ihre Elternlinie sind, mit right
, left
, up
und down
.
Da das Stammverzeichnis immer eine horizontale Linie ist, hat es immer right
und left
Unterverzeichnisse. Aber diese beiden haben up
und down
Unterverzeichnisse, und diese haben right
und left
wieder und so weiter.
Die Verzeichnisse am Ende des Iterationslimits sollten leer sein.
Beispiel
Für N = 3 sollte der Verzeichnisbaum so aussehen:
tree
right
up
down
left
up
down
Zusätzliche Information
- Idealerweise wird das
tree
Verzeichnis in demselben Ordner angezeigt, in dem sich der Quellcode befindet, aber es ist in Ordnung, wenn es in ein Arbeitsverzeichnis verschoben wird. - Sie können davon ausgehen, dass es
tree
an dem Ort, an dem Ihr Verzeichnis erstellt wird, kein bereits vorhandenes Verzeichnis gibt . - Sie können davon ausgehen, dass Ihr Programm immer auf demselben modernen Betriebssystem (Mac / Windows / Linux) ausgeführt wird. Grundsätzlich sollten Sie sich keine Gedanken über die Verwendung eines Dateitrennzeichens machen, das nicht in allen Betriebssystemen funktioniert.
Wertung
Das ist Code-Golf, also gewinnt der kürzeste Code in Bytes .
quelle
tree
immerleft
undright
stattup
und seindown
?Antworten:
Ruby, 127 Bytes
Getestet unter Windows. Übernimmt die Eingabe über STDIN.
f
generiert rekursiv eine Liste der benötigten Blätter des Baumes und füttere sie dann einfach mit einem einzigen Systemaufruf vonmkdir
.quelle
Lua, 179
quelle
Python - 194
quelle
from os import*;s=system
["left","up"][n%2]
und die Klammern fallen lassen, um(0,1)
zu gebenfor i in 0,1:
Python 2 + * nix coreutils,
212189Erzeugt alle innersten Pfade und Aufrufe
mkdir -p
Abstürze bei Eingabe <1
quelle
import os,itertools as t