อบเค้กให้ฉัน!


15

นี่คือเค้ก:

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

มันกว้าง 8 สูง 3 สูงและลึก 1

คุณต้องเขียนโปรแกรมที่ทำเค้กจาก 3 อินพุต อินพุตแรกควบคุมจำนวนขีดล่างที่มีอยู่ตรงกลางและ=s ด้านบน นี่เป็นเค้กชิ้นแรกที่มีความกว้าง 10 แทนที่จะเป็น 8:

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

อินพุตที่สองควบคุมความสูงของเค้ก นี่คือเค้กชิ้นที่สองที่มีความสูง 4 แทนที่จะเป็น 3:

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

สังเกตการทำซ้ำของเลเยอร์

อินพุตที่สามควบคุมความลึกของมัน นั่นเป็นเพียงจำนวน| |ที่รวมอยู่ด้านบน นี่คือเค้กชิ้นที่สามที่มีความลึก 2 แทนที่จะเป็น 1:

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

คุณสามารถพิมพ์ช่องว่างต่อท้าย กรณีทดสอบ:

การป้อนข้อมูล: 3, 3,3

เอาท์พุท:

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

(ฉันหวังว่าฉันจะไม่ได้รับเค้กนี้)

การป้อนข้อมูล: 3, 2,1

เอาท์พุท:

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

การป้อนข้อมูล: 5, 5,5

เอาท์พุท:

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

อินพุตจะเป็นจำนวนเต็มบวกเสมอหรือไม่
Nick Clifford

@NickClifford ใช่

บรรทัดใหม่ต่อท้ายได้รับอนุญาตหรือไม่
Shaggy


@Shaggy ฉันคิดว่ามันเป็นใช่โดยปริยายบน Meta
programmer5000

คำตอบ:


9

V , 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>อาจจะสามารถบันทึกไบต์ได้มากขึ้นในที่อื่นด้วย ขอบคุณที่เตือนฉัน! :)
DJMcMayhem

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

Mathematica, 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]}]&




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

Java 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;
}

คุณสามารถบันทึกได้ 1 ไบต์โดยใส่u=t+u+"+\n" inside the for-loop: (u = t + u + "+ \ n; a [2] -> 1;) s + = t;` แต่คำตอบที่ดี +1 จากฉัน
Kevin Cruijssen

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

Windows Batch, 211 180 163 ไบต์

เล่นรวมทั้งสิ้น48 ไบต์ด้วย @Neil!

@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 off2. หลีกเลี่ยง@call set w=%%w%%_ setlocal enabledelayedexpansion3. @for /l %%p in (2,1,%2)ใช้ 4. คุณควรเพิ่ม IMHO @set w=เพื่อให้โค้ดทำงานมากกว่าหนึ่งครั้ง
Neil

ฉันสับสนในส่วนสุดท้ายหากฉันไม่เพิ่ม@set w=รหัสจะไม่ทำงานมากกว่าหนึ่งครั้งหรือไม่
stevefestl

1
1. @for /l %%p in (1,1,%1)doดูเหมือนว่าคุณหายตัวไป 2. เค้กของคุณดูเหมือนจะสูงผิดปกติอย่างน้อยก็ดูเหมือนจะไม่ตรงกับกรณีทดสอบเมื่อฉันลอง 3. หากคุณเรียกใช้สคริปต์สองครั้งในเซสชันคำสั่งเดียวกันเค้กจะมีขนาดกว้างขึ้นและกว้างขึ้น
Neil

@Neil ทุกอย่างได้รับการแก้ไข :)
stevefestl

1
ที่ดี! สิ่งสุดท้ายที่ฉันสังเกตเห็น: 1. คุณไม่ต้องการสิ่ง@ต่อไป&นี้ 2 หากคุณเปลี่ยนลูปที่สองเป็น(2,1,%3)และลูปที่สามเป็น(1,1,%2)ฉันคิดว่าคุณสามารถลบecho +%w%+บรรทัดได้ 3. หากฉันนับอย่างถูกต้องฉันคิดว่าคุณควรเติมwด้วยช่องว่างแทน_s เนื่องจากจะทำให้การทดแทนมีน้อยลง (ฉันจะใช้@call set w= %%w%%เป็นอย่างอื่นพื้นที่ยากที่จะมองเห็น!)
Neil

1

Haskell , 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
งานที่ดีออกจากภาษาที่ไม่ใช่กอล์ฟส่วนใหญ่ไปทางด้านหลัง การประกาศมัด(w#t)d= ...บันทึกไบต์
Laikoni

1

SOGL V0.12 , 25 ไบต์

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

ลองที่นี่!

คาดว่าอินพุตเป็นความกว้างความลึกและความสูง


อนุญาตให้สั่งซื้ออินพุตอีกครั้งหรือไม่ พวกเขาดูเหมือนจะระบุไว้ในคำสั่งที่กำหนด
เรียกซ้ำ

1
@recursive โดยปกติแล้วจะอนุญาตและไม่มีคำถามบังคับให้การสั่งซื้อและคำตอบที่ได้รับการโหวตมากที่สุดลำดับที่ 2 เรียงลำดับอินพุตและอาจถูกเห็นโดย OP ดังนั้นฉันคิดว่ามันใช้ได้
dzaima

1

Python 2, 124 122 120 105 92 ไบต์

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

-15 ไบต์โดยใช้ STDIN แทนอาร์กิวเมนต์ของโปรแกรม

-13 ไบต์โดยสลับไปใช้ Python 2 (สำหรับinput()ไอเอ็นจีจำนวนเต็มและprintคำสั่ง)

-12 ไบต์จาก Caird Coinheringaahing

ลองออนไลน์!

Python 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*"_"+"+"))

ลองออนไลน์!

หากไม่จำเป็นต้องใช้โปรแกรมเต็มรูปแบบ:

Python 3, 87 84 ไบต์

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

ลองออนไลน์!



@cairdcoinheringaahing 78 ไบต์
Jonathan Frech




0

JavaScript / ES6, 90 ไบต์

ฉันเพิ่งเขียนคำตอบคร่าวๆและเกิดขึ้นเพื่อเอาชนะคำตอบของ JS ที่มีอยู่ด้วยขนาด 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);


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.