Программисты часто одержимы рисованием фракталов. Я думаю, что нам нужен новый компьютерный носитель.
Н дерево является довольно простым типом фрактала изготовлен из горизонтальных и вертикальных линий. Вот оно на десятой итерации ( любезно предоставлено Википедией ):
Теперь представьте, что каждая из строк на изображении является каталогом (папкой) в стандартной компьютерной файловой системе. Все линии, кроме самых маленьких, пересекаются на две линии меньше их самих; эти две меньшие строки являются подкаталогами большей строки. Таким образом, большая горизонтальная линия в середине является родительским каталогом двух самых больших вертикальных линий, которые, в свою очередь, являются родителями, бабушкой и дедушкой и т. Д. Остальных линий на изображении.
Вызов
Напишите программу, которая принимает положительное целое число N через stdin или командную строку (или ближайшую альтернативу) и создает дерево каталогов, которое отражает N-ю итерацию фрактала H-дерева.
Первая итерация (N = 1) представляет собой одну горизонтальную линию. В каждой последующей итерации новый набор вертикальных или горизонтальных линий добавляется к концам текущих строк. Таким образом, для N = 2 добавляются две вертикальные линии (образующие Н-образную форму), для N = 3 к этому добавляются четыре горизонтальные линии и т. Д.
Имя корневого каталога всегда должно быть tree
. Имена подкаталогов должны совпадать с направлением , они находятся в отношении их материнской линии, используя right
, left
, up
и down
.
Поскольку корневой каталог всегда горизонтальная линия , она всегда будет иметь right
и left
подкаталоги. Но у тех двоих будут up
и down
подкаталоги, и у тех будут right
и left
снова, и так далее.
Каталоги в конце лимита итераций должны быть пустыми.
пример
Для N = 3 дерево каталогов должно выглядеть так:
tree
right
up
down
left
up
down
Дополнительная информация
- В идеале
tree
каталог будет отображаться в той же папке, в которой находится исходный код, но ничего страшного, если он перейдет в какой-то рабочий каталог. - Вы можете предположить, что
tree
в том месте, где будет создан ваш каталог, нет уже существующего каталога. - Вы можете предположить, что ваша программа всегда будет работать в одной и той же современной операционной системе (Mac / Windows / Linux). По сути, не беспокойтесь об использовании разделителя файлов, который работает не во всех ОС.
счет
Это код-гольф, поэтому выигрывает самый короткий код в байтах .
источник
tree
всегда должны бытьleft
иright
вместоup
иdown
?Ответы:
Рубин, 127 байт
Проверено на Windows. Принимает ввод через STDIN.
f
рекурсивно генерирует список требуемых листьев дерева, а затем я просто передаю их в один системный вызовmkdir
.источник
Луа, 179
источник
Питон - 194
источник
from os import*;s=system
["left","up"][n%2]
и вы можете(0,1)
for i in 0,1:
Python 2 + * nix coreutils,
212189Создает все внутренние пути и вызовы
mkdir -p
Сбои, если вход <1
источник
import os,itertools as t