एक स्तरित केक प्रिंट करें


14

चुनौती

एक इनपुट को देखते हुए n, ASCII आर्ट केक की nपरतों को ऊपर की तरफ से दो मोमबत्तियों के साथ लंबा , प्रिंट करें । विवरण के लिए नीचे दिए गए उदाहरण देखें।

उत्पादन

>> cake(1)

 _|_|_
|     |
+-----+

>> cake(3)

     _|_|_
    |     |
  +---------+
  |         |
+-------------+
|             |
+-------------+

...और इसी तरह।

नियम

  • मानक कमियां निषिद्ध हैं
  • कृपया एक चतुर समाधान पर एक प्रयास करें
  • यह , इसलिए बाइट्स जीत में सबसे छोटा जवाब है। हालांकि, उत्तर का चयन नहीं किया जाएगा।

मज़े करो!

जवाबों:


6

पायथन 2, 238 चार्ट

i=input()
m=["+"+"-"*(i*4+1)+"+","|"+" "*(i*4+1)+"|"]
for v in range(i,1,-1):
 m+=[" "*(i-v)*2+"+"+"-"*(v*4+1)+"+"," "*(i-v+1)*2+"|"+" "*((v-1)*4+1)+"|"]
m.pop()
m+=[" "*(i-1)*2+"|"+" "*5+"|"," "*(i-1)*2+" _|_|_"]
print'\n'.join(m[::-1])

केक 2 का अनुपम उदाहरण:

   _|_|_
  |     |
+---------+
|         |
+---------+

नमस्कार, और साइट पर आपका स्वागत है! आप एसटीडीआईएन से इनपुट ले सकते हैं और 24 चार्ट बंद कर सकते हैं। उदाहरण के लिए,i=int(input())
जेम्स

यदि आप चाहते हैं, तो आपको पायथन 2 में परिवर्तन int(input())करने input()और printकथन और कथन में परिवर्तन करने में सक्षम होना चाहिए , साथ ही आप चार स्थानों को एक में बदल सकते हैं (यदि यह एक टैब है, तो इसे और अधिक स्पष्ट करने के लिए एक स्थान पर बदल दें कि यह एक वर्ण है) । इसके अलावा आपका बाइटकाउंट किसी कारण से 4 बहुत अधिक है।
ASCII- केवल

@ मार्स अलवर ऊप्स, हां, मुझे यकीन नहीं है कि मैंने शुरुआत करने के लिए अजगर 3 को क्यों चुना। धन्यवाद।
edelbitter

आप प्रतिशत स्वरूपण का उपयोग करके कुछ बाइट्स को बचाने में भी सक्षम हो सकते हैं
ASCII-only

4

रूबी, 109 107 बाइट्स

->n{p=->t{puts t.center 3+4*n}
p['_|_|_']
(1..n).map{|i|p[?|+' '*(1+4*i)+?|]
p[?++?-*((i<n ?5:1)+4*i)+?+]}}

3

बैच, 233 बाइट्स

@echo off
set i=
for /l %%j in (2,1,%1)do call set i=  %%i%%
echo %i% _^|_^|_
set s=-----
for /l %%j in (2,1,%1)do call:l
echo ^|%s:-= %^|
echo +%s%+
exit/b
:l
echo %i%^|%s:-= %^|
set i=%i:~2%
set s=----%s%
echo %i%+%s%+

अजगर की तुलना में कम? कुछ गलत होना चाहिए ...


3

जावास्क्रिप्ट (ईएस 6), 134 बाइट्स

एक पुनरावर्ती केक।

f=(n,i=--n,r=(n,c)=>'- '[+!c].repeat(n),p=r((i-n)*2),j=n*4+5,x=p+`+${r(j,1)}+
`)=>(n?f(n-1,i)+x:p+` _|_|_
`)+p+`|${r(j)}|
`+(n-i?'':x)

डेमो

let f=(n,i=--n,r=(n,c)=>'- '[+!c].repeat(n),p=r((i-n)*2),j=n*4+5,x=p+`+${r(j,1)}+
`)=>(n?f(n-1,i)+x:p+` _|_|_
`)+p+`|${r(j)}|
`+(n-i?'':x)

console.log(f(4))


3

हास्केल, 103 बाइट्स

f(a:b)n=a:([0..4*n]>>b)++[a]
x!n=x:[f"| "n,f"+-"n]
g 1=" _|_|_"!1
g n=map("  "++)(init.g$n-1)++f"+-"n!n

एक फ़ंक्शन को परिभाषित करता है gजो आउटपुट की लाइनों वाले स्ट्रिंग्स की एक सूची देता है


2

05AB1E, 115 , 101 वर्ण

>UXð×?" _|_|_",Xð×?"|     |",X<U0<VXGNVXY-ð×?'+?8Y·+G'-?}'+,XY-ð×?'|?7Y·+ð×?'|,}XY-ð×?'+?8Y·+G'-?}'+,

अदनान की बदौलत बची 14 चरस!
निश्चित रूप से यहाँ गोल्फ के लिए कुछ जगह है।

इसे ऑनलाइन आज़माएं!

ध्यान दें कि यह सब कुछ एक स्थान से ऑफसेट प्रिंट करता है।


प्रोग्रामिंग पहेलियाँ और कोड गोल्फ में आपका स्वागत है! बहुत अच्छा पहला उत्तर :)
अदनान

1
शायद स्ट्रिंग गुणन मदद करता है, जो ×कमांड है। यह इसका उपयोग कैसे किया जाता है, इस पर एक उदाहरण है।
अदनान

@ अदनान कि मदद करता है! धन्यवाद!
ल्यूक

2

पायथन 2, 122 बाइट्स

a='  '*input()
b='+-+'
c=d=' '
while a:b='+----'+b[1:];c=d*4+c;a=a[2:];print a+[' _|_|_',b][c>d*5]+'\n%s|%%s|'%a%c
print b

2

पायथन 3, 162 वर्ण

p=print
t=int(input())
d=4*'-'
s='  '
a='+\n'
r=(t-1)*s
p(r+' _|_|_\n'+r+'|     |')
for i in range(2,t+1):b=(t-i)*s;p(b+'+-'+i*d+a+b+'| '+i*2*s+'|')
p('+-'+t*d+a)

यह बहुत चालाक नहीं है, लेकिन मैंने इनमें से पहले कभी नहीं किया है। (संपादित करें: अनावश्यक कोष्ठकों को हटाया गया; एक और चरित्र द्वारा कम किया गया)


साइट पर आपका स्वागत है, और अच्छा पहला जवाब!
जेम्स

2

पायथ, 73 बाइट्स

+K*dtyQ"_|_|_"+tK"|     |"jP.iJms[*\ yt-Qd\+*+5*4d\-\+)+StQtQmXd"+-""| "J

एक प्रोग्राम जो STDIN पर एक पूर्णांक का इनपुट लेता है और परिणाम को प्रिंट करता है।

यहाँ अभी भी कुछ गोल्फ होना बाकी है।

इसे ऑनलाइन आज़माएं

स्पष्टीकरण बाद में आ रहा है


1

जावास्क्रिप्ट (ईएस 6), 171 बाइट्स

n=>[(s="  "[R='repeat'](n-1))+" _|_|_",s+"|     |",...Array(n-1),`+${"-"[R](n*4+1)}+`].map((_,i)=>_||(s="  "[R](n-i))+`+${"-"[R](i=i*4+1)}+`+`
${s}|${" "[R](i)}|`).join`
`

पहली पास, शायद इष्टतम नहीं ...


1

PHP, 150 147 138 136 130 140 बाइट्स

नया दृष्टिकोण:

echo$p=str_pad("",-2+2*$n=$argv[1])," _|_|_";for($x="    ",$b=$y="----";$n--;){$a.=$x;if($n)$b.=$y;echo"
$p| $a|
",$p=substr($p,2),"+-$b+";}

संदर्भ के लिए पुराना संस्करण:

$p=str_pad;for($o=["_|_|_"];$i++<$n=$argv[1];$o[]="+".$p("",($i<$n)*4+$e,"-")."+")$o[]="|".$p("",$e=$i*4+1)."|";foreach($o as$s)echo$p($s,$n*4+3," ",2),"
";

मैं उत्सुक हूँ; यह इनपुट कैसे पढ़ता है?
लिन

@ लीन: लानत है कि मैं भूल गया कि इस time.10 बाइट्स के लिए उपरि $argv। : - /
टाइटस

1

विम्सस्क्रिप्ट, 116 115 बाइट्स

बहुत गड़बड़ है, लेकिन यह काम करता है!

fu A(n)
let @z="Vkyjply4lpjy4hp"
exe "norm 2i+\e5i-\eo||\e5i \e".a:n."@zddl4xggd$i_|_|_"
exe "%ce ".(a:n*4+3)
endfu

इसे कहते हैं: call A(3)एक में खाली बफर। फ़ंक्शन को लोड करने के लिए,source cake.vim

व्याख्या

  • 2i+<Esc>5i-<Esc> पहली पंक्ति लिखता है +-----+
  • o||<Esc>5i<Space><Esc>| |दूसरी पंक्ति में जोड़ता है
  • Vkyjply4lpjy4hpमैक्रो में सहेजा गया है @z- यह नेत्रहीन दोनों लाइनों का चयन करता है, उन्हें yanks करता है, उन्हें नीचे चिपकाता है और उनके लिए 4 डैश और रिक्त स्थान जोड़ता है।
  • #@zइस #बार दोहराता है
  • ddl4x अंतिम पंक्तियों को हटाता है और केक के निचले भाग को नीचे की परत के बराबर बनाने के लिए डैश के लिए हटा देता है
  • ggd$i_|_|_ केक के शीर्ष द्वारा पहली पंक्ति को बदलता है
  • %ceफिर नीचे की परत की चौड़ाई के लिए पूरे केक को केंद्र में रखता है! !

1

SOGL V0.12 , 27 26 बाइट्स

∫4*I:┌*╗1Ο;@*┐1Ο}⁴¹k┐╔2ΟΚ╚

यह कोशिश करो!

स्पष्टीकरण:

∫               }           for each in 1..input inclusive, pushing counter
 4*                           multiply by 4
   I                          increase by 1
    :                         duplicate; this will be used later
     ┌*                       repeat a dash pop times
       ╗1Ο                    encase them in plusses
          ;                   get the duplicate on the stacks top
           @*                 repeat a space pop times
             ┐1Ο              encase in vertical bars
                 ⁴          duplicate the item below ToS - the last line
                  ¹         wrap the stack in an array
                   k        remove the arrays first item
                    ┐       push "_"
                     ╔      push "|"
                      2Ο    encase 2 copies of the vertical bar in underscores
                        Κ   and prepend that to the array
                         ╚  center the array horizontally

0

एक्सेल VBA, 139 130 127 बाइट्स

बेनामी VBE तत्काल विंडो जो सेल से इनपुट लेता है A1और VBE तत्काल विंडो के लिए एक केक आउटपुट करता है

For i=1To[A1]:s=Space(2*([A1]-i)):x=String(1+4*i,45):?s &IIf(i=1," _|_|_","+" &x &"+"):?s"|"Replace(x,"-"," ")"|":Next:?s"+"x"+


0

QBasic, 115 बाइट्स

INPUT n
?SPC(n*2-1)"_|_|_
FOR i=1TO n
s=n*2-i*2
?SPC(s)"|"SPC(i*4+1)"|
?SPC(s-2)"+"STRING$(i*4+(i=n)*4+5,45)"+
NEXT

Ungolfed

मोमबत्तियों के साथ शीर्ष रेखा प्रिंट करें; फिर केक के बाकी हिस्सों को एक बार में दो पंक्तियों में प्रिंट करें।

INPUT n
PRINT SPC(n * 2 - 1); "_|_|_"
FOR i = 1 TO n
  indent = n * 2 - i * 2
  PRINT SPC(indent); "|"; SPC(i * 4 + 1); "|"
  PRINT SPC(indent - 2); "+"; STRING$(i * 4 + (i = n) * 4 + 5, 45); "+"
NEXT

SPC, जब एक PRINTबयान में उपयोग किया जाता है , तो दिए गए रिक्त स्थान की संख्या का उत्सर्जन करता है। आसानी से, जब एक नकारात्मक तर्क दिया जाता है, तो इसे 0 के रूप में indent - 2माना जाता है , इसलिए तथ्य यह है कि -2अंतिम चलना में कोई समस्या नहीं है। STRING$एक गिनती और एक चरित्र कोड (यहां, 45 के लिए -) लेता है और कई बार उस चरित्र को दोहराता है। यहां, हमें अंतिम पंक्ति (तब i=n) को विशेष रूप से स्थिति में लाना होगा, जो कि अन्यथा होने वाली तुलना में ४ हाइफ़न होगी।


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