Hツリーディレクトリ


12

プログラマーは、多くの場合、フラクタルを描くことに夢中です。新しいコンピューターベースのメディアが必要だと思います。

Hツリーは、水平線と垂直線からなるフラクタルのかなり単純なタイプです。これは、10回目の繰り返しです(ウィキペディア提供):

Hツリー

ここで、イメージの各行が標準的なコンピューターファイルシステムのディレクトリ(フォルダー)であると想像してください。最も小さい線を除くすべての線は、それよりも小さい2本の線と交差します。これら2つの小さな行は、大きな行のサブディレクトリです。したがって、中央の大きな水平線は、画像内の残りの行の親、祖父母などである2つの最大の垂直線の親ディレクトリです。

チャレンジ

stdinまたはコマンドライン(または最も近い代替)を介して正の整数Nを取り込み、HツリーフラクタルのN番目の反復をミラーリングするディレクトリツリーを作成するプログラムを作成します。

最初の反復(N = 1)は単一の水平線です。後続の各反復で、垂直線または水平線の新しいセットが現在の行の最後に追加されます。したがって、N = 2の場合、2本の垂直線が追加され(H形状を作成)、N = 3の場合、4本の水平線が追加されます。

ルートディレクトリの名前は常にtree。サブディレクトリの名前は、使用して、彼らは彼らの親線に対してである方向に一致している必要がありrightleftupdown

ルートディレクトリは常に水平線であるので、それは常に持っていますrightし、leftサブディレクトリ。しかし、これら二つは持っているだろうupし、downサブディレクトリ、およびそれらを持つことになりますrightし、leftそうで再び、と。

反復制限の終わりのディレクトリは空でなければなりません。

N = 3の場合、ディレクトリツリーは次のようになります。

tree
    right
        up
        down
    left
        up
        down

追加情報

  • 理想的には、treeディレクトリはソースコードと同じフォルダにポップアップしますが、作業ディレクトリに移動しても問題ありません。
  • あなたがtree作成される場所に既存のディレクトリは存在しないと仮定するかもしれません。
  • プログラムは常に同じ一般的な最新のオペレーティングシステム(Mac / Windows / Linux)で実行されると仮定できます。基本的に、すべてのOSで機能しないファイル区切り文字の使用について心配する必要はありません。

得点

これはコードゴルフなので、バイト単位の最短コードが優先されます


のサブディレクトリはtree常にleftandのright代わりにupand である必要がありdownますか?
KSFT

1
@KSFTはい:「ルートディレクトリは常に水平線であるため、常に右と左のサブディレクトリがあります。」
カルビンの趣味

回答:


5

ルビー、127バイト

f=->n{n<2?['tree']:f[n-1].map{|p|%w{left right up down}[n%2*2,2].map{|d|p+?/+d}}.flatten}
system'mkdir "'+f[gets.to_i]*'" "'+?"

Windowsでテスト済み。STDINを介して入力を受け取ります。

fツリーの必要なリーフのリストを再帰的に生成し、それらを単一のシステムコールのに送りますmkdir


3

ルア、179

t=0+io.read()a={"left","right","up","down"}function h(d,v)if v~=t then os.execute("mkdir "..d)x=1 if v%2==1 then x=3 end for g=x,x+1 do h(d.."\\"..a[g],v+1)end end end h("tree",0)

2

パイソン-194

from os import system as s
a="mkdir "
s(a+"tree")
def f(n):
 if n<j%2:return
 for i in(0,1):m=["up"if n%2 else"left","rdiogwhnt"[n%2::2]][i];s(a+m);s("cd "+m);f(n-1);s("cd..")
j=input()
f(j+j%2)

やや短いfrom os import*;s=system
-DenDenDo

さらに2つのこと:実行することも["left","up"][n%2]、かっこをドロップし(0,1)て与えることもできます。for i in 0,1:
Sp300015年

2

Python 2 + * nix coreutils、212 189

すべての最も内側のパスと呼び出しを生成します

mkdir -p

import os
n=int(raw_input())-1 
for i in range(2**n):os.system("mkdir -p "+os.path.join('tree',*([['right','left'],['up','down']][b%2][int(j)]for b,j in enumerate('{:0{}b}'.format(i,n)))))

入力<1の場合にクラッシュする


最初の2行を組み合わせることができますimport os,itertools as t
。– DenDenDo

@DenDenDo itertoolsを完全に削除
user80551
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.