एच ट्री निर्देशिकाएँ


12

प्रोग्रामर अक्सर ड्राइंग भग्न के साथ रहते हैं। मुझे लगता है कि हमें एक नया कंप्यूटर आधारित माध्यम चाहिए।

एच पेड़ भग्न के एक काफी सरल प्रकार क्षैतिज और ऊर्ध्वाधर लाइनों से बना है। यहाँ यह दसवें पुनरावृत्ति पर है ( शिष्टाचार विकिपीडिया ):

ज पेड़

अब, कल्पना करें कि छवि में प्रत्येक पंक्ति एक मानक कंप्यूटर फ़ाइल सिस्टम में एक निर्देशिका (फ़ोल्डर) है। सभी लेकिन सबसे छोटी रेखाएं दो पंक्तियों को अपने से छोटी रेखाओं को काटती हैं; ये दो छोटी रेखाएँ बड़ी रेखा की उपनिर्देशिकाएँ हैं । इस प्रकार बीच में बड़ी क्षैतिज रेखा दो सबसे बड़ी ऊर्ध्वाधर रेखाओं की मूल निर्देशिका है, जो छवि के बाकी हिस्सों की बारी माता-पिता, दादा-दादी आदि हैं।

चुनौती

एक प्रोग्राम लिखें जो एक सकारात्मक पूर्णांक N में स्टड या कमांड लाइन (या निकटतम विकल्प) के माध्यम से लेता है और एक निर्देशिका ट्री बनाता है जो एच ट्री फ्रैक्टल के Nth पुनरावृत्ति को दर्पण करता है।

पहली पुनरावृत्ति (एन = 1) एक एकल क्षैतिज रेखा है। प्रत्येक बाद के पुनरावृत्ति में ऊर्ध्वाधर या क्षैतिज रेखाओं का एक नया सेट वर्तमान लाइनों के सिरों में जोड़ा जाता है। तो N = 2 के लिए दो वर्टिकल लाइनें जोड़ी जाती हैं (H आकृति बनाते हुए), N = 3 के लिए उस में चार क्षैतिज रेखाएँ जोड़ी जाती हैं, आदि।

रूट डायरेक्टरी का नाम हमेशा होना चाहिए tree। उपनिर्देशिका के नाम दिशा है कि वे अपने माता-पिता रेखा के संबंध में कर रहे हैं, का उपयोग कर से मेल खाना चाहिए right, left, upऔर down

चूंकि रूट डायरेक्टरी हमेशा एक क्षैतिज रेखा होती है, इसलिए इसमें हमेशा rightऔर leftउपनिर्देशिकाएँ होंगी । लेकिन उन दो के पास upऔर downउपनिर्देशिकाएँ होंगी , और उन के पास rightऔर leftफिर से, और इसी तरह होगी।

पुनरावृत्तियों की सीमा के अंत में निर्देशिका खाली होनी चाहिए।

उदाहरण

N = 3 के लिए डायरेक्टरी ट्री इस तरह दिखना चाहिए:

tree
    right
        up
        down
    left
        up
        down

अतिरिक्त जानकारी

  • आदर्श रूप से treeनिर्देशिका उसी फ़ोल्डर में पॉप अप हो जाएगी जिसमें स्रोत कोड होता है, लेकिन यह ठीक है यदि यह कुछ कार्यशील निर्देशिका में जाता है।
  • आप मान सकते हैं कि treeआपके द्वारा बनाई गई जगह में पहले से मौजूद कोई निर्देशिका नहीं है।
  • आप मान सकते हैं कि आपका प्रोग्राम हमेशा एक ही समान आधुनिक ऑपरेटिंग सिस्टम (मैक / विंडोज / लिनक्स) पर चलाया जाएगा। मूल रूप से एक फ़ाइल विभाजक का उपयोग करने के बारे में चिंता न करें जो सभी ओएस में काम नहीं करता है।

स्कोरिंग

यह कोड-गोल्फ है, इसलिए बाइट्स में सबसे छोटा कोड जीत जाता है।


की उपनिर्देशिका है treeहमेशा रहना होगा leftऔर rightके बजाय upऔर down?
केएसएफटी

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]*'" "'+?"

विंडोज पर परीक्षण किया गया। 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

अजगर 2 + * निक्स कोरुटिल्स, 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.