H 트리 디렉토리


12

프로그래머는 종종 도형 그리기에 집착 합니다. 새로운 컴퓨터 기반 매체가 필요하다고 생각합니다.

H 트리 수평선과 수직선으로 이루어진 프랙탈의 비교적 간단한 형태이다. 다음은 열 번째 반복입니다 ( : Wikipedia ).

H 나무

이제 이미지의 각 줄이 표준 컴퓨터 파일 시스템의 디렉토리 (폴더)라고 상상해보십시오. 가장 작은 선을 제외한 모든 선은 두 선보다 작습니다. 이 두 개의 작은 라인은 큰 라인의 하위 디렉토리 입니다. 따라서 가운데의 큰 가로선은 두 개의 가장 큰 세로선의 부모 디렉토리이며, 이미지에서 나머지 선의 부모, 조부모 등입니다.

도전

stdin 또는 명령 줄 (또는 가장 가까운 대안)을 통해 양의 정수 N을 취하고 H 트리 프랙탈의 N 번째 반복을 반영하는 디렉토리 트리를 작성하는 프로그램을 작성하십시오.

첫 번째 반복 (N = 1)은 단일 수평선입니다. 각각의 후속 반복에서 새로운 수직 또는 수평 라인 세트가 현재 라인의 끝에 추가됩니다. 따라서 N = 2의 경우 두 개의 수직선이 추가되고 (H 모양 만들기) N = 3의 경우 4 개의 수평선이 추가됩니다.

루트 디렉토리의 이름은 항상이어야합니다 tree. 하위 디렉토리의 이름은 사용, 상위 라인에 대한에있는 방향과 일치해야합니다 right, left, updown.

루트 디렉토리는 항상 수평선이므로 항상 rightleft서브 디렉토리를 갖습니다 . 그러나이 두 가지는 하위 디렉토리 를 가지게 up되며 down, 그 하위 디렉토리도 계속 right해서 계속 left됩니다.

반복 한계 끝에있는 디렉토리는 비워 두어야합니다.

N = 3의 경우 디렉토리 트리는 다음과 같아야합니다.

tree
    right
        up
        down
    left
        up
        down

추가 정보

  • tree소스 코드와 동일한 폴더에 디렉토리가 표시되는 것이 이상적 이지만 작업 디렉토리로 가면 괜찮습니다.
  • 당신은 tree당신이 만들어 질 장소에 기존 디렉토리 가 없다고 가정 할 수 있습니다 .
  • 프로그램이 항상 동일한 최신 운영 체제 (Mac / Windows / Linux)에서 실행된다고 가정 할 수 있습니다. 기본적으로 모든 OS에서 작동하지 않는 파일 구분 기호를 사용하는 것에 대해 걱정하지 마십시오.

채점

이것은 코드 골프이므로 바이트 단위 의 가장 짧은 코드 이깁니다.


의 하위 디렉토리 마십시오 tree항상은해야 left하고 right대신에 updown?
KSFT

1
@KSFT 예 : "루트 디렉토리는 항상 수평선이므로 항상 오른쪽 및 왼쪽 하위 디렉토리가 있습니다."
Calvin 's Hobbies

답변:


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

두 가지 더 : 할 수 ["left","up"][n%2]있고 괄호를 떨어 뜨려 (0,1)줄 수 있습니다.for i in 0,1:
Sp3000

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 인 경우 충돌


처음 두 줄을 결합 할 수 있습니다.import os,itertools as t
DenDenDo

@DenDenDo itertools를 완전히 제거
user80551
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.