একটি স্তরযুক্ত কেক মুদ্রণ করুন


14

চ্যালেঞ্জ

একটি ইনপুট দেওয়া হয়েছে n, nউপরে দুটি মোমবাতি রেখে পাশ থেকে দেখানো লম্বা একটি ASCII আর্ট কেক স্তর মুদ্রণ করুন। বিস্তারিত জানার জন্য নীচের উদাহরণগুলি দেখুন।

আউটপুট

>> 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 বেছে নিয়েছি। ধন্যবাদ।
এডেলবিটার

আপনি শতাংশ বিন্যাস ব্যবহার করে কয়েকটি বাইট সংরক্ষণ করতে সক্ষম হতে পারেন
ASCII- কেবল

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

জাভাস্ক্রিপ্ট (ES6), 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

জাভাস্ক্রিপ্ট (ES6), 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

পিএইচপি, 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),"
";

আমি কৌতুহলী; কিভাবে এই ইনপুট পড়া?
লিন

@ লিন: জঘন্য আমি এই সময়টি ভুলে গিয়েছিলাম। 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- এটি দৃষ্টিভঙ্গি উভয় লাইন নির্বাচন করে, তাদের ইয়ঙ্ক করে, তাদের নীচে আটকায় এবং তাদের সাথে 4 টি ড্যাশ এবং স্পেস যুক্ত করে।
  • #@zএই #বার পুনরাবৃত্তি
  • ddl4x শেষ লাইনগুলি মুছে ফেলে এবং নীচের স্তরের শীর্ষের সাথে সমান করতে কেকের নীচে ড্যাশগুলির জন্য সরান
  • ggd$i_|_|_ প্রথম লাইনটি কেকের শীর্ষে প্রতিস্থাপন করে
  • %ceতারপরে পুরো কেকটি নীচের স্তরের প্রস্থে কেন্দ্র করে! !

1

এসওজিএল ভি0.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

এক্সেল ভিবিএ, 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

কিউ বেসিক, ১১১ বাইট

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) কে 4 হাইফেনের চেয়ে কম হওয়া উচিত যা অন্যথায় হবে না।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.