मुझे एक केक सेंकना!


15

यह एक केक है:

_========_
|        |
+________+
|        |
+________+
|        |
+________+

यह 8 चौड़ा, 3 लंबा और 1 गहरा है।

आपको एक प्रोग्राम लिखना होगा जो 3 इनपुट से एक केक बनाता है। पहला इनपुट नियंत्रित करता है कि =शीर्ष पर कितने अंडरस्कोर हैं और बीच में हैं । यहां 8 के बजाय 10 की चौड़ाई वाला पहला केक है:

_==========_
|          |
+__________+
|          |
+__________+
|          |
+__________+

दूसरा इनपुट नियंत्रित करता है कि केक कितना लंबा है। यहां 3 के बजाय 4 की ऊंचाई वाला दूसरा केक है:

_==========_
|          |
+__________+
|          |
+__________+
|          |
+__________+
|          |
+__________+

परतों की पुनरावृत्ति पर ध्यान दें।

तीसरा इनपुट नियंत्रित करता है कि यह कितना गहरा है। कि बस कितने | |शीर्ष पर शामिल करने के लिए है। यहां 1 के बजाय 2 की गहराई वाला तीसरा केक है:

_==========_
|          |
|          |
+__________+
|          |
+__________+
|          |
+__________+
|          |
+__________+

आप अनुगामी व्हाट्सएप प्रिंट कर सकते हैं। परीक्षण के मामलों:

इनपुट: 3, 3,3

आउटपुट:

_===_
|   |
|   |
|   |
+___+
|   |
+___+
|   |
+___+

(मुझे आशा है कि मुझे यह केक कभी नहीं मिलेगा)

इनपुट: 3, 2,1

आउटपुट:

_===_
|   |
+___+
|   |
+___+

इनपुट: 5, 5,5

आउटपुट:

_=====_
|     |
|     |
|     |
|     |
|     |
+_____+
|     |
+_____+
|     |
+_____+
|     |
+_____+
|     |
+_____+

क्या इनपुट हमेशा धनात्मक पूर्णांक होंगे?
निक क्लिफर्ड

@NickClifford हाँ।

अनुगामी newlines की अनुमति है?
झबरा


@ शैगी मुझे ऐसा लगता है, यह मेटा पर डिफ़ॉल्ट रूप से हाँ है।
प्रोग्रामर

जवाबों:


9

वी , 25 , 20 बाइट्स

2é_Àé=ÙÒ|èÙÒ+È_ÀäkÀÄ

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

Hexdump:

00000000: 32e9 5fc0 e93d d9d2 7ce8 d9d2 2bc8 5fc0  2._..=..|...+._.
00000010: e46b c0c4                                .k..

तीन बाइट बचाने के लिए @ nmjmcman101 को धन्यवाद , और एक पुराने ऑपरेटर को याद दिलाने के लिए जिसने एक और दो बाइट्स बचाए।

स्पष्टीकरण:

a, bऔर cतीन तर्क हैं।

2é_                   " Insert two '_' characters
   Àé=                " Insert 'a' '=' characters between them
      Ù               " Duplicate this line
       Ò|             " Replace this whole line with '|'s
         è            " *Hollow* this line (replace all the middle characters with spaces)
          Ù           " Duplicate this line
           Ò+         " Replace this whole line with '+'s
             È_       " *Hollow* this line again, but use '_' instead of spaces
               Àäk    " Make 'b' copies of this line and the line above it
                  ÀÄ  " Make 'c' copies of this line

मुझे लगता है कि आप कुछ बाइट्स के Ò r|$.साथ बदल सकते हैं Ò|èइसे ऑनलाइन आज़माएं!
nmjcman101

@ nmjcman101 ओह यार, मैं पूरी तरह से भूल गया कि èअस्तित्व में भी है। मुझे यह याद रखने के लिए अपना दिमाग रगड़ना पड़ा कि यह क्या करता है। लेकिन यह वास्तव में चालाक है! वास्तव में, अपरकेस वैरिएंट का उपयोग करके, È<char>संभवतः कुछ अन्य स्थानों में भी कुछ और बाइट्स बचा सकता है। मुझे याद दिलाने के लिये धन्यवाद! :)
जेम्स

4

चारकोल , 34 26 बाइट्स

Nγ←×γ_↑+↑N_×γ=‖BOγF⁻N¹C⁰±²

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। आदेश चौड़ाई, गहराई, ऊंचाई में पैरामीटर लेता है। स्पष्टीकरण:

Nγ          Input the width.
←×γ_        Print a set of _s that go at the bottom of each layer.
↑+          Print one of the +s that go on the left.
↑N          Input the depth and print that many left |s.
_           Print the top left _.
×γ=         Print the =s along the top.
‖BOγ        Copy the left column to the right.
F           Repeat:
 ⁻ ¹         One time fewer than:
  N           Input of the height:
    C⁰±²        Copy the whole cake up 2 characters.

2

गणितज्ञ, 167 बाइट्स

c=Column;r=Row;t=Table;f=Flatten;c[c/@{r/@f[{{{"_",r@t["=",#],"_"}},t[{"|",r@t[" ",#],"|"},#3-1]},1],c/@f[{t[{r@{"|",r@t[" ",#],"|"},r@{"+",r@t["_",#],"+"}},#2]},1]}]&

2

PHP> = 7.1, 104 बाइट्स

for([,$w,$h,$t]=$argv;$i<2*$h+$t;)echo str_pad($e="_|+"[$b=$i++<$t?$i>1:1+$_++%2],$w+1,"= _"[$b])."$e
";

ऑनलाइन संस्करण


1
बुरा नहीं। मिला 3 बाइट:for([,$w,$h,$t]=$argv;$i<2*$h+$t;)echo str_pad($e="_|+"[$b=$i++<$t?$i>1:2-($i-$t&1)],$w+1,"= _"[$b])."$e\n";
क्रिस्टोफ

1
और एक और 3 बाइट $b=$i++<$t?$i>1:1+$_++%2:।
क्रिस्टोफ

@Christoph अच्छा विचार धन्यवाद
Jörg Hülsermann



1

जेली , 30 29 बाइट्स

-1 बाइट बाहरी और आंतरिक स्तंभों के बीच अनुवाद करने के लिए XOR के अतिरिक्त स्विचिंग से, दो _प्रविष्टियों के बजाय 5 वर्ण लुकअप के लिए अनुमति देता है ।

ṬṚ;⁹RḤṬḤ¤Wµ^9ẋ⁵;@;µZị“_+= |”Y

पूरा कार्यक्रम के तीन कार्यक्रम तर्क लेने depth, height, widthऔर केक मुद्रण।

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

कैसे?

ṬṚ;⁹RḤṬḤ¤Wµ^9ẋ⁵;@;µZị“_+= |”Y - Main link: depth, height (width is a program argument)
Ṭ                             - untruth   [0,0,0,...1] such that the length is the depth
 Ṛ                            - reverse   [1,0,0,...0]
        ¤                     - nilad followed by link(s) as a nilad:
   ⁹                          -   link's right argument, height
    R                         -   range   [1,2,3,...,height]
     Ḥ                        -   double  [2,4,6,...,2*height]
      Ṭ                       -   untruth [0,1,0,1,0,1,...,0,1] (length double height)
       Ḥ                      -   double  [0,2,0,2,0,2,...,0,2]
  ;                           - concatenate  [1,0,0,...,0,0,2,0,2,0,2,...,0,2]
                              -     ...this is the form of a column of cake!
         W                    - wrap in a list
          µ                   - monadic chain separation, call that c
           ^9                 - bitwise XOR c with 9 [8,9,9,...,9,9,11,9,11,9,11,...,9,11]
              ⁵               - program's 3rd argument, width
             ẋ                - repeat the augmented c width times
               ;@             - concatenate with a copy of c
                 ;            - concatenate a copy of c
                  µ           - monadic chain separation call that sideways cake
                   Z          - transpose the sideways cake to put it the right way up
                     “_+= |”  - literal ['_','+','=',' ','|'] (cake decoration)
                    ị         - index into (1 based and modular, so 8,9, and 11 are, mod 5,
                                            3, 4, and 1 yielding '=', ' ', and '_')
                            Y - join with new lines
                              - implicit print



1

जावा 7 , 169 164 158 बाइट्स

String f(int...a){String s="_",t="|",u="+";for(;a[0]-->0;s+="=",t+=" ")u+="_";s=s+"_";t="\n"+t+"|";u=t+"\n"+u+"+";for(;a[2]-->1;)s+=t;for(;a[1]-->0;)s+=u;return s;}

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

Ungolfed:

String f(int...a)                    // saves two bytes over int a, int b, int c
{
    String s="_", t="|", u="+";      // set up the start of each row

    for(; a[0]-->0; s+="=", t+=" ")  // Uses the goes-to operator to fill the row
        u+="_";                      

    s += "_\n";                      // adds the end of each row
    t += "|\n";              
    u = t + u + "+\n";               // and combining t into u

    for(; a[2]-->1; )                // add the top of the cake
        s += t;

    for(; a[1]-->0; )                // add the rest of the cake
        s += u;

    return s;
}

आप u=t+u+"+\n" inside the for-loop: (यू = टी + यू + "+ \ n; एक [२] -> १;) एस + टी; s के लिए लगाकर १ बाइट बचा सकते हैं । लेकिन अच्छा जवाब, मेरे से +1
केविन क्रूज़सेन

1

05AB1E , 33 31 बाइट्स

'_'=¹×«Ć,'|¹úRóG=}²F='+'_¹×«Ć,

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

व्याख्या

'_'=¹×«Ć,'|¹úRóG=}²F='+'_¹×«Ć,   Main link. Args: w h d
'_                                Push literal '_'
  '=¹×                            Push '=' w times
      «Ć,                         Concat, enclose and print
         '|                       Push literal '|'
           ¹ú                     Pad with w spaces in front
             RĆ                   Reverse and ecnlose
               ³G }               d - 1 times do:
                 =                Print without consuming
                   ²F             h times do:
                     =            Print without consuming
                      '+          Push literal '+'
                        '_¹×      Push '_' w times
                            «Ć,   Concat, enclose and print

1

विंडोज बैच, 211 180 163 बाइट्स

@Neil की बदौलत कुल 48 बाइट्स गिए गए!

@for /l %%p in (1,1,%1)do @call set w= %%w%%
@echo _%w: ==%_
@for /l %%p in (2,1,%3)do @echo ^|%w%^|
@for /l %%p in (1,1,%2)do @echo ^|%w%^|&echo +%w: =_%+
@set w=

1
1. @प्रत्येक पंक्ति का उपयोग करना और उसके बाद doकी तुलना में थोड़ा कम है @echo off। 2. @call set w=%%w%%_बचता है setlocal enabledelayedexpansion। 3. उपयोग @for /l %%p in (2,1,%2)। 4. IMHO आपको जोड़ना चाहिए @set w=ताकि कोड एक से अधिक बार काम करे।
नील

मैं पिछले भाग से उलझन में हूं, अगर मैं नहीं जोड़ूंगा @set w=, तो क्या कोड एक से अधिक बार काम नहीं करेगा?
स्टेवफेस्टल

1
1. @for /l %%p in (1,1,%1)doलगता है आपका लापता हो गया है। 2. आपका केक गलत ऊँचाई का लगता है, कम से कम यह परीक्षण के मामले से मेल नहीं खाता जब मैं इसे आज़माता हूँ। 3. यदि आप स्क्रिप्ट को एक ही कमांड सत्र में दो बार चलाते हैं तो केक केवल व्यापक और व्यापक हो जाता है।
नील

@ नील यह सब तय है :)
स्टीववेस्टल

1
महान! बस कुछ आखिरी चीजें जिन पर मैंने गौर किया: 1. आपको इसके @बाद की जरूरत नहीं है &। 2 यदि आप दूसरे लूप को (2,1,%3)और तीसरे लूप को बदलते हैं (1,1,%2)तो मुझे लगता है कि आप echo +%w%+लाइन को हटा सकते हैं । 3. अगर मैंने सही तरीके से गिना है, तो मुझे लगता है कि आपको एस के wबजाय रिक्त स्थान के साथ भरना चाहिए _, क्योंकि इसके परिणामस्वरूप कम प्रतिस्थापन होंगे। (मैं उपयोग करूँगा @call set w= %%w%%अन्यथा स्थान को पाना कठिन है!)
नील

1

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

f w t d=["_=| +_\n"!!j|i<-0:([2..d]>>[2])++([1..t]>>[2,4]),j<-i:([1..w]>>[i+1])++[i,6]]

1
अधिकांश गैर-गोल्फ भाषाओं को पीछे छोड़ते हुए अच्छा काम। एक infix घोषणा (w#t)d= ...एक बाइट बचाता है।
लकोनी

1

SOGL V0.12 , 25 बाइट्स

e =*¼_Oe↕¼|.⌡Qe╔*¼+.H«{Q;

यह कोशिश करो!

इनपुट को चौड़ाई, गहराई, फिर ऊँचाई के रूप में लेने की अपेक्षा करता है।


क्या इनपुट्स को फिर से ऑर्डर करने की अनुमति है? वे एक निर्धारित क्रम में निर्दिष्ट प्रतीत होते हैं।
पुनरावर्ती

1
@recursive आमतौर पर इसे अनुमति दी जाती है और कहीं भी प्रश्न आदेश देने के लिए बाध्य नहीं करता है और दूसरा सबसे अधिक मतदान का जवाब इनपुटों को फिर से देता है और शायद ओपी द्वारा देखा गया है, इसलिए मैं मानूंगा कि यह ठीक है।
दिजिमा

1

अजगर 2, 124 122 120 105 92 बाइट्स

w,t,d=input()
a="\n|"+w*" "+"|"
print"_"+w*"="+"_"+(d-1)*a+t*(a+"\n+"+w*"_"+"+")

कार्यक्रम तर्क के बजाय STDIN का उपयोग करके -15 बाइट्स

-13 बाइट्स पायथन 2 ( input()आईएनजी पूर्णांक और) के लिए स्विच करकेprint कथन के लिए)

-12 Caird Coinheringaahing से बाइट्स

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

पायथन 3, 124 122 120 105 बाइट्स

w,t,d=[int(input())for n in(1,2,3)]
a="\n|"+w*" "+"|"
print("_"+w*"="+"_"+(d-1)*a+t*(a+"\n+"+w*"_"+"+"))

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

यदि एक पूर्ण कार्यक्रम की आवश्यकता नहीं है:

पायथन 3, 87 84 बाइट्स

lambda w,t,d:"_"+w*"="+"_"+(d-1)*("\n|"+w*" "+"|")+t*("\n|"+w*" "+"|\n+"+w*"_"+"+")

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



@ कैयरडॉक्‍सहेयरिंगाहिंग 78 बाइट्स
जोनाथन फ्रेच




0

जावास्क्रिप्ट / ईएस 6, 90 बाइट्स

मैंने सिर्फ एक मोटा हल लिखा है, और मौजूदा जेएस उत्तर को 56 बाइट्स से हरा दिया है। तब मैंने 11 बाइट्स से गोल्फिंग की।

(w,h,d,g=a=>a+a[1][r='repeat'](w)+a[0]+`
`)=>g('_=')+(l=g('| '))[r](d-1)+(l+g('+_'))[r](h)

यहाँ एक डेमो है।

var F = (w,h,d,f=a=>a+a[1][r='repeat'](w)+a[0]+`
`)=>f('_=')+(l=f('| '))[r](d-1)+(l+f('+_'))[r](h);

console.log(F(prompt('width') || 3, prompt('height') || 3, prompt('depth') || 3));
console.log(F.toString().length);


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