पिरामिड योजनाएँ


13

मायन पिरामिड प्राचीन वास्तुकला का एक महत्वपूर्ण हिस्सा थे (और हैं), जो आमतौर पर धार्मिक उद्देश्यों के लिए उपयोग किए जाते थे।

वे आम तौर पर कदम पिरामिड थे, लेकिन प्रत्येक पर कदम चढ़ने के लिए बहुत अधिक कठोर थे। समारोह आयोजित करने के लिए वैकल्पिक सीढ़ियों के माध्यम से पुजारी उनके शीर्ष पर चढ़ेंगे। पिरामिड का उपयोग उनकी ऊँचाई के कारण स्थलों के रूप में भी किया जाता था, और कभी-कभी उच्च रैंकिंग अधिकारियों के लिए दफन स्थलों के रूप में भी उपयोग किया जाता था।


चुनौती

एक प्रोग्राम लिखें जो उपयोगकर्ता विनिर्देशों (नीचे देखें) के आधार पर एक पिरामिड योजनाबद्ध प्रिंट कर सकता है।


आवश्यकताएँ

  • दो अंतरिक्ष-पृथक चर का इनपुट लें।

  • इनपुट STDIN (या निकटतम विकल्प) के माध्यम से स्वीकार किया जाना चाहिए।

  • आउटपुट STDOUT (या निकटतम विकल्प) के माध्यम से होना चाहिए।


इनपुट

  • किसी भी सकारात्मक पूर्णांक के रूप में ऊँचाई। इसका उपयोग आधार स्तर की चौड़ाई (ब्लॉकों में) के रूप में किया जाता है। पिरामिड के प्रत्येक सफल स्तर की चौड़ाई है n - 1जहां nपिछली मंजिल की चौड़ाई (ब्लॉकों में) है।

  • ब्लॉक का आकार जो 1 या किसी भी विषम, धनात्मक पूर्णांक less (से कम) 10 होगा।


ब्लाकों

दिए गए ब्लॉक का आकार प्रत्येक व्यक्तिगत टुकड़े की चौड़ाई (और ऊंचाई) निर्धारित करता है। अनिवार्य रूप से, i^2दृश्य बॉक्स के अंदर रिक्त स्थान होते हैं जहां iब्लॉक आकार होता है।

1x1 ब्लॉक इस तरह दिखेगा:

+++
| |
+++

जबकि 5x5 ब्लॉक इस तरह दिखेगा:

+++++++
|     |
|     |
|     |
|     |
|     |
+++++++

क्षैतिज रूप से आसन्न ब्लॉक

क्षैतिज रूप से अगल-बगल के ब्लॉकों की मध्य दीवारें एक में विलीन हो जानी चाहिए

आपके पास यह होना चाहिए :

+++++
| | |
+++++

कुछ इस तरह के बजाय:

++++++
| || |
++++++

ऊर्ध्वाधर आसन्न ब्लॉक (-5% बोनस)

ऊर्ध्वाधर साइड-बाय-साइड ब्लॉकों का एक विशेष अपवाद है: मध्य दीवार को एक में विलय किया जा सकता है।

इस प्रकार, 1x1 ब्लॉक देखने के बजाय:

 +++
 | |
 +++
+++++
| | |
+++++

वे इस तरह दिख सकते हैं:

 +++
 | |
+++++
| | |
+++++

उदाहरण

Input: 3 1

Output:

  +++
  | |
  +++
 +++++
 | | |
 +++++
+++++++
| | | |
+++++++

OR

  +++
  | |
 +++++
 | | |
+++++++
| | | |
+++++++

Input: 2 3

Output:

  +++++
  |   |
  |   |
  |   |
  +++++
+++++++++
|   |   |
|   |   |
|   |   |
+++++++++

OR

  +++++
  |   |
  |   |
  |   |
+++++++++
|   |   |
|   |   |
|   |   |
+++++++++

स्कोरबोर्ड

स्कोरबोर्ड पर रैंक करने के लिए, इस प्रारूप में अपना उत्तर दें:

# Language, Score

या अगर आपको बोनस -5% मिलता है:

# Language, Score (Bytes - 5%)

आपका स्कोर सिर्फ एक पूरी संख्या है। यदि आपका स्कोर एक दशमलव है, तो पूरी संख्या तक गोल करें।


न्यूनतम इनपुट क्या है? 1 1?
mınxomaτ

हां, जो सिंगल ब्लॉक होगा। @minxomat इसे "इनपुट" अनुभाग के तहत समझाया गया है।
Zach गेट्स

इनपुट क्या 3 2उत्पन्न करेगा?
हैंड-ई-फूड

"इनपुट" अनुभाग के तहत दूसरी गोली के अनुसार, दूसरा इनपुट पूर्णांक विषम होना चाहिए। @ हाथ-ए-खाना आप से पूछना चाहता क्या की तरह एक इनपुट के लिए क्या होगा की है तो 2 3, यह बाहर निकलने जब होगा n - 1 = 0जहां nब्लॉक में पिछले मंजिल की चौड़ाई है।
जैच गेट्स

@ZachGates, धन्यवाद! मुझे कोई आपत्ति नहीं है। स्पष्ट रूप से कॉफी ने मुझे विफल कर दिया है।
हाथ-ई-फूड

जवाबों:


1

पायथ, 45 (47 बाइट्स - 5%)

AmvdczdVGjm.[Jh*GhHj*H?d\ \+*+2N?d\|\+\ hH;*J\+

इसे यहाँ आज़माएँ ।

                                                   Implicit: z=input(), d=' '
    czd                                            Split input on spaces
 mvd                                               Evaluate each part of the above (convert to int)
A                                                  Store the pair in G,H
             Jh*GhH                                J = 1+(G*(H+1))
       VG                                          For N in [0 to G-1]:
          m                             hH;          Map d in [0 to H] to:
                                ?d\|\+                 Get '|' or '+' (vertical edges or corners)
                            *+2N                       Repeat the above (N+2) times
                      ?d\ \+                           Get ' ' or '+' (block centre or horizontal edge)
                    *H                                 Repeat the above H times
                   j                                   Join (|/+) by (   /+++)
           .[J                        \                Centrally pad the above to width J using spaces
         j                                           Join on newlines, implicit print
                                           *J\+    Get J '+'s, implicit print

1
+1। देर आए दुरुस्त आए। : P
Zach गेट्स

11

जावास्क्रिप्ट (ईएस 6), 161 (169-5%) 166 (174-5%)

टेम्प्लेट स्ट्रिंग्स का उपयोग करते हुए, 2 नई रेखाएँ महत्वपूर्ण और गिनी जाती हैं।

एक एक्मास्क्रिप्ट 6 ब्राउज़र में नीचे स्निपेट का परीक्षण करें। फ़ायरफ़ॉक्स ठीक है, क्रोम नहीं क्योंकि इसमें विनाशकारी असाइनमेंट के लिए समर्थन का अभाव है ।

स्निपेट के बाद कोड समझाया गया।

/*Test: redefine console.log*/ console.log=x=>O.innerHTML+=x+'\n';

for([h,b]=prompt().split` `,g='+'[R='repeat'](-~b),f=' '[R](b),n=o='';h--;o+=e+(d=g[R](++n)+`+
`)+f.replace(/./g,e+('|'+f)[R](n)+`|
`))e=' '[R](h*-~b/2);console.log(o+d)
<pre id=O></pre>

कम गोल्फ वाला

[h, b] = prompt().split` `; // get the space separated input values
c = -~b; // Add 1 to b. As b is of string type b+1 would be a string concatenation
g = '+'.repeat(c); // top border
f = ' '.repeat(b); // inner blank row
o = ''; // initialize output string
for(n = 0; h > 0; --h) // loop on height
{
   ++n;
   e = ' '.repeat(h*c/2); // blanks for offset from left margins
   d = g.repeat(n) + `+\n`; // top border repeated, then right end and newline
   // the block body is squared, there are as many rows as columns inside
   // so I can build the right number of rows replacing the chars in a single row
   o += e + d + f.replace(/./g, e + ('|'+f).repeat(n)+`|\n`)
}
o += d // add last top border as bottom
console.log(o)    

9

रूबी, 124 (130 - 5%)

n=(g=gets).to_i
b=g[-2].to_i+1
a=(0..n*b-1).map{|i|[?+*(i/b*b+b+1),(?|+' '*(b-1))*(i/b+1)+?|][i%b<=>0].center(n*b+1)}
puts a,a[-b]

टिप्पणियों के साथ

n=(g=gets).to_i                                  #get input and interpret as a number for pyramid height (everything after the space is ignored)
b=g[-2].to_i+1                                   #the single-character block size is the second last character (just before the newline.) Add 1 to give the pitch between squares.
a=(0..n*b-1).map{|i|                             #run through all lines except the last one
[?+*(i/b*b+b+1),                                 #calculate number of + symbols
(?|+' '*(b-1))*(i/b+1)+?|]                       #or alternatively, pattern '|    |'
     [i%b<=>0]                                   #check if i%b is zero or positive to decide which to print
     .center(n*b+1)}                             #centre the text. It will be mapped to the array a.
puts a,a[-b]                                     #a contains the pyramid, minus its last line. Print it, and add the last line

अपने बोनस -5% (अपना स्कोर 124 पर लाना) के बारे में मत भूलना। अच्छा कार्य!
ज़च गेट्स

2

पायथन 2, 117 (123 बाइट्स)

h,n=map(int,raw_input().split())
p,v='+|'
while h:p+='+'*-~n;v+=' '*n+'|';h-=1;l=~n/-2*h*' ';print l+p+('\n'+l+v)*n
print p

विचार यह है कि ईंटों के शीर्ष pको ऊपर +++++++++और किनारे की vतरह बनाया जाए | | |। शीर्ष के रूप में शुरू होता है +और n+1 +प्रत्येक परत द्वारा संवर्धित है । पक्ष के रूप में शुरू होता है |और nरिक्त स्थान और एक द्वारा संवर्धित है |। प्रत्येक परत, हम सबसे ऊपर और पक्षों को बढ़ाते हैं, फिर एक शीर्ष और nपक्षों को प्रिंट करते हैं ।

उन्हें केंद्रित करने के लिए, हम पहले एक इंडेंट प्रिंट करते हैं l। इसमें कई रिक्त स्थान होते हैं जो वर्तमान ऊंचाई के साथ बड़े पैमाने पर होते हैं h। इसे अपडेट करने के लिए, हम hहिट होने तक ऊंचाई चर को घटाते हैं 0, जिसके बाद स्क्रीन के बाएं किनारे के खिलाफ वर्तमान परत फ्लश होती है। हम नीचे की परत बनाने के लिए एक बार फिर शीर्ष प्रिंट करते हैं, और हम कर रहे हैं।


0

अजगर 2, 200 (210 - 5%)

a,b=map(int,raw_input().split());c=0;a+=1;i=a*b+a-b;e=[i*'+']
while a-1:
 v=(('|'+' '*b)*a).rstrip();p=' '*((i-len(v))/2);a-=1;c+=1
 for u in range(b):e.insert(0,p+v)
 e.insert(0,p+'+'*len(v))
print'\n'.join(e)

मैंने स्ट्रिंग गुणन का उपयोग किया और अतिरिक्त स्थान छीन लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.