สุขสันต์วันเบคอน!


40

วันนี้เป็นวันเบคอนซึ่งอาจเป็นเหตุผลว่าทำไมชื่อหมวกที่เข้าร่วมในวันนี้คือ "Mmmm Bacon" อะไรจะดีไปกว่าการฉลองวันเบคอนด้วยเมทริกซ์ 2 มิติที่เต็มไปด้วยความสนุกทำจากเบคอน! แถบเบคอนขนาด 1 คูณ 1 แสดงโดย:

----- 
)===)
(===(
)===)
-----

เป้าหมายของคุณที่นี่จะได้รับสองพิกัดใน tuple, ( x, y) โดยที่xและyเป็นจำนวนเต็มบวกที่ไม่ใช่ศูนย์คุณจะต้องสร้างเบคอนและส่งกลับในบางรูปแบบ (รายการอาร์เรย์สตริง)

อินพุตและเอาต์พุต:

Input: (2, 1)

Output:
----------  
)===))===)
(===((===(
)===))===)
----------

Input: (1, 2)

Output:

----- 
)===)
(===(
)===)
----- 
)===)
(===(
)===)
-----

Input: (2, 2)

---------- 
)===))===)
(===((===(
)===))===)
---------- 
)===))===)
(===((===(
)===))===)
----------

กฎ:

  • อย่างที่คุณเห็นในกรณีทดสอบครั้งที่สองหากเบคอนหลายชิ้นซ้อนกันเพียงหนึ่ง-----ชิ้นเท่านั้นที่แยกกับเบคอนแต่ละชิ้นด้านบนและ / หรือด้านล่าง นั่นหมายถึงการซ้อนเบคอนแบบนี้ไม่ถูกต้อง:

    ----- 
    )===)
    (===(
    )===)
    -----
    ----- 
    )===)
    (===(
    )===)
    -----   
    
  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม

  • รหัสต้องทำงานสำหรับกรณีทดสอบข้างต้นและต่อไปนี้: (4, 4), (1, 6), (5, 1), (2, 3),(3, 2)

  • จัดเตรียมล่ามที่สามารถทำการทดสอบกรณีด้านบนได้

เกณฑ์การชนะ:

รหัสที่สั้นที่สุดชนะ! สุขสันต์วันเบคอนกับทุกคน!


การสนทนานี้ได้รับการย้ายไปแชท
เดนนิส

คำตอบ:


11

V , 28, 26 , 24 ไบต์

Ài)³=)Y4PÒ-G.MÓ)/(
kÀäG

ลองออนไลน์!

คำอธิบาย:

Ài                      " Arg 1 times insert:
  )³=)                  " ')===)'
      <esc>             " Escape back to normal mode
           Y            " Yank this line
            4P          " Paste four times
              Ò-        " Replace this line with '-'
                G.      " Repeat on the last line
                  M     " Move to the middle line
                   Ó)/( " Replace ')' with '('
k                       " Move up (to the second line)
 À                      " Arg 2 times
  äG                    " Duplicate everything up to the last line

3
ฉันชอบที่คำตอบนี้มีความยาวมากกว่าเบคอนเพียง 3 ไบต์: D
FlipTack

3
@FlipTack มีการขึ้นบรรทัดใหม่ จริง ๆ แล้วมันสั้นกว่า 2 : P
DJMcMayhem

2
ลืมไปซะ! ว้าวคำตอบที่สั้นกว่าบล็อคของเอาท์พุท นี่คือบางสิ่งที่เดนนิสเกิดขึ้น
FlipTack

8

TI-Basic, 80 ไบต์

อันนี้เป็นอัจฉริยะจริง ๆ :)

":→Str0:Input :For(M,0,4Y:For(N,1,X:")===)
If not(fPart(M/4:"-----
If .5=fPart(M/4:"(===(
Str0+Ans→Str0:End:Ans+":→Str0:End

นอกจากนี้สำหรับทุกคนที่สงสัยใน TI-Basic ลำไส้ใหญ่และขึ้นบรรทัดใหม่แทนกันและการใช้Inputมีข้อโต้แย้งไม่ได้รับการป้อนข้อมูลโดยค่าเริ่มต้นเข้าและX Y
Timtech

7

Python 2.7, 74 ไบต์

ฉันแน่ใจว่านี่จะสามารถเล่นกอล์ฟได้มากกว่านี้ แต่นี่คือสิ่งที่ฉันคิดขึ้นมา (คุณสมบัติการคูณสตริงของ Python มีประโยชน์แน่นอน):

a,b=input();f="-"*5*a;d=")===)"*a;print'\n'.join([f,d,"(===("*a,d,''])*b+f

ลองที่นี่ !

ไม่พอใจกับคำอธิบาย:

a,b = input()                                       # Take input from the user as a tuple
f = "-"*5 * a                                       # f is the delimiter between bacons
d = ")===)" * a                                     # 2nd and 4th lines of bacon
print '\n'.join([f, d, "(===("*a, d, ''])*b + f     # Join everything together!

5

Mathematica, 74 ไบต์

Array[b["-----",b=")===)","(===("][[#~Mod~4]]&,{4#2+1,#}]~Riffle~"\n"<>""&

ฟังก์ชันที่ไม่มีชื่อจะรับอาร์กิวเมนต์จำนวนเต็มบวกสองรายการและส่งคืนสตริงพร้อมกับการขึ้นบรรทัดใหม่ วิธีการทางคณิตศาสตร์แบบมาตรฐาน: สร้างอาร์เรย์ของสตริง 2d โดยใช้ตัวเลือก (mod 4) เพื่อวนรอบสตริงในทิศทางแนวตั้งจากนั้นยุบให้เป็นสตริงเดียว


4

แบตช์ 168 ไบต์

@set s=
@for /l %%i in (1,1,%1)do @call set s=%%s%%-___-
@set t=%s:_==%
@echo %s:_=-%
@for /l %%i in (1,1,%2)do @echo %t:-=)%&echo %t:-=(%&echo %t:-=)%&echo %s:_=-%

โชคไม่ดีที่ฉันไม่สามารถเขียน@echo %s:==-%อย่างอื่นที่จะกำจัดความจำเป็นสำหรับตัวแปรที่สอง


ประหยัด 2 ไบต์ด้วยการต่อสาย 1,2 และ 3,4 เข้าด้วยกัน&...
Magoo


4

05AB1E , 25 ไบต์

รหัส:

…)==û×Ь'(:s)¬g'-×=¸«»²F=

คำอธิบาย:

…)==û                         # Push the string ")===)"
     ×                        # String multiply by the first input
      Ð                       # Triplicate the string
       ¬                      # Take the first character, which is a ')' and push
        '(:                   # Replace by '('
           s                  # Swap the top two elements
            )                 # Wrap everything into an array
             ¬g               # Get the length of the first element in the array
               '-×            # And repeat the character '-' that many times
                  =           # Print it without popping
                   ¸«         # Append the string of dashes to the array
                     »        # Join by newlines
                      ²F      # Second input times do...
                        =     #   Print the top of the stack without popping

ใช้การเข้ารหัสCP-1252 ลองออนไลน์!


4

05AB1E , 32 30 ไบต์

ที่บันทึกไว้ 2 ไบต์ขอบคุณที่Adnan

'-5×…)==ûÐ')'(:s)vy¹×})I.D¬)˜»

ลองออนไลน์!

คำอธิบาย

'-5×                            # push "-----" 
    …)==ûÐ                      # push 3 copies of ")===)"
          ')'(:s                # replace ")" with "(" in the 2nd copy
                )               # wrap in list
                 vy¹×})         # repeat each list entry input-1 times
                       I.D      # repeat list input-2 times
                          ¬     # push the first element of the list ("-----")
                           )˜   # wrap in list and flatten
                             »  # join by newline

คุณสามารถแทนที่ได้")===)"ด้วย…)==û:)
Adnan

@Adnan: อ่าแน่นอน! ขอบคุณ!
Emigna

3

Python 2 , 70 ไบต์

def f(w,h):n=4*h+1;exec"n-=1;print'-)()-===-===-===-)()'[n%4::4]*w;"*n

ขอบคุณ @xnor สำหรับการบันทึก 4 ไบต์!

ลองออนไลน์!


ดูเหมือนว่าเส้นไม่ได้บอกทิศทางในกรณีทดสอบของคุณ
xnor

ดูเหมือนว่า[_::3]จะสั้นกว่า
xnor

โอ้ยิงมีบางอย่างผิดปกติ ลบจนกว่าฉันจะแก้ไขได้
เดนนิส

แก้ไขรหัสของฉันโดยไม่เพิ่มไบต์ใด ๆ ขอบคุณ! ลองดูว่าฉันจัดการขจัดความซ้ำซ้อนของเส้นเหล่านั้นอีกครั้งหรือไม่
เดนนิส

มี2**n%5%3รอบ[1, 2, 1, 0, 1, 2, 1, 0, ...]ไหน อาจเป็นประโยชน์หรือไม่
xnor

3

Python 2, 59 ไบต์

w,h=input()
for a in'-()('*h+'-':print(a+3*'=-'[a>')']+a)*w

สร้างแต่ละบรรทัดa+b*3+aจากอักขระเริ่มต้นaและอักขระกึ่งกลางb(ซึ่งคำนวณจากa) aวงจร 's ผ่าน'-()('ในขณะที่bเป็น'-'เมื่อaเป็น'-'และ'='เป็นอย่างอื่น


67 ไบต์:

w,h=input()
for a,b in['--']+zip(')()-','===-')*h:print(a+b*3+a)*w

สร้างแต่ละบรรทัดจากอักขระตัวนอกaและอักขระกึ่งกลางbเป็นa+b*3+aจากนั้นพิมพ์wสำเนาของสิ่งนี้ zipวงจรเหล่านี้ผ่านทาง


3

JavaScript, 132 129 121 ไบต์

-8 ไบต์ขอบคุณ @ user2428118

(x,y)=>{a=b=["-----",")===)","(===(",")===)","-----"];for(i=0;++i<y;){b=[...b,...a.slice(1)]}return b.map(v=>v.repeat(x)).join(`
`)}

(x,y)=>eval('a=b=["-----",")===)","(===(",")===)","-----"];for(i=0;++i<y;)b=[...b,...a.slice(1)];b.map(v=>v.repeat(x)).join`\n`')

(x,y)=>eval('a=b=[c="-----",d=")===)","(===(",d,c];for(i=0;++i<y;)b=[...b,...a.slice(1)];b.map(v=>v.repeat(x)).join`\n`')

นี่อาจเป็นเรื่องที่น่าสนใจมากขึ้น หากคุณมีข้อเสนอแนะโปรดทิ้งไว้ในความคิดเห็น


เอาชนะฉันทีละ 1 ไบต์ .. :(
devRicher

@devRicher แต่ฉันยังไม่ได้ตีกอล์ฟอย่างแน่นอน :)
ericw31415

@devRicher ที่จริงฉันทำผิดพลาดขึ้นบรรทัดใหม่ อ๊ะ แก้ไข:ฉันชนะคุณแล้ว
ericw31415

1
@ ericw31415 _ (x,y)=>eval('a=b=[d="-----",c=")===)","(===(",c,d];for(i=0;++i<y;)b=[...b,...a.slice(1)].map(v=>v.repeat(x)).joinBACKTICK NEWLINE BACKTICK_;')
2428118

@ user2428118 สิ่งนี้ไม่ทำงานใช่ไหม ฉันสามารถใช้การทำให้เข้าใจง่ายของอาร์เรย์ของคุณ :)
ericw31415

2

Lua, 132 ไบต์

a="-----"b=")===)"c="(===("w,z=io.read(),io.read()function g(f)return f:rep(w).."\n"end print((g(a)..g(b)..g(c)..g(b)):rep(z)..g(a))

ลองใช้สายอักขระยาว ๆ ลองได้ที่นี่


2

JavaScript (ES6), 78

(x,y,r=s=>`${s}`.repeat(x)+`
`,a=r`)===)`,c=r`-----`)=>c+r(a+r`(===(`+a+c,x=y)

ทดสอบ

F=
(x,y,r=s=>`${s}`.repeat(x)+`
`,a=r`)===)`,c=r`-----`)=>c+r(a+r`(===(`+a+c,x=y)

function update() {
  var x=+X.value,y=+Y.value
  O.textContent=F(x,y)
}

update()
X<input type=number id=X value=1 min=1 oninput='update()'>
Y<input type=number id=Y value=1 min=1 oninput='update()'>
<pre id=O></pre>


1

GameMaker Language, 160 139 148 bytes 133 ไบต์

x=argument0 y=argument1*4for(m=0;m<=y;m++){for(n=0;n<x;n++){a=")===)"if !m mod 4a="-----"else if n mod 2a="(===("r+=a}r+="#"}return r

นอกจากนี้ก่อนที่คุณจะแนะนำ GML จะต้องมีส่วนใดส่วนหนึ่งของลูปเพื่อให้มีคำสั่งอยู่ภายใน :(
Timtech

1

เยลลี่ 26 ไบต์

4“\ḊƭVṠ’bị“-=()”s5ẋ€ḷẋµ1ịṭ

นี่คือลิงก์ dyadic (ฟังก์ชัน) ที่ส่งคืนอาร์เรย์ 2D

ลองออนไลน์!

มันทำงานอย่างไร

4“\ḊƭVṠ’bị“-=()”s5ẋ€ḷẋµ1ịṭ  Main link. Left argument: w. Right argument: h

4                           Set the return value to 4.
 “\ḊƭVṠ’b                   Yield 366323084456 and convert it to base 4.
                            This yields [1,1,1,1,1,0,2,2,2,0,3,2,2,2,3,0,2,2,2,0].
         ị“-=()”            Index into that string, using modular 1-based indexing.
                s5          Split the result into chunks of length 5.
                  ẋ€ḷ       Repeat the characters of each chunk w times.
                     ẋ      Repeat the array of chunks h times.
                      µ     Begin a new, monadic chain. Argument: M (bacon matrix)
                       1ị   Retrieve the first line.
                         ṭ  Tack; append it to M.

0

C, 159 158 153 bytes

p(s,n){printf(s,--n?p(s,n):0);}i,j;b(n,m){p("-----",n);for(j=3;j--;){p("\n",1);for(i=n;i--;)p(j%2?"(===(":")===)",1);}p("\n",1);--m?b(n,m):p("-----",n);}

โทรด้วย:

int main()
{
    b(2,3);
}

ดีที่จะเห็นคำตอบใน C อื่น แต่ก็สามารถทำได้ค่อนข้างสั้นดูคำตอบของฉัน :)
orlp

0

C #, 160 ไบต์

x=>y=>{int i=0,h=4*y+1,j;var s=new string[h];for(;i<h;++i)if(i%4<1)s[i]=new string('-',x*5);else{var c=i%2>0?')':'(';for(j=0;j++<x;)s[i]+=c+"==="+c;}return s;};

เวอร์ชันที่จัดรูปแบบ:

x => y =>
{
    int i = 0, h = 4 * y + 1, j;

    var s = new string[h];

    for (; i < h; ++i)
        if (i % 4 < 1)
            s[i] = new string('-', x * 5);
        else
        {
            var c = i % 2 > 0 ? ')' : '(';

            for (j = 0; j++ < x; )
                s[i] += c + "===" + c;
        }

    return s;
};

ลองออนไลน์! (ด้วยเหตุผลบางประการลิงก์นี้ให้ข้อผิดพลาด แต่ใช้ได้ผลอยู่ดี)



0

Dyalog APL ขนาด 55 ไบต์

นี่เป็นครั้งแรกที่ฉันใช้ Dyalog APL ดังนั้นฉันแน่ใจว่านี่ไม่ใช่วิธีที่ดีที่สุด

 {(⊂'-----'),[1]⍉⍺(4×⍵)⍴')===)' '(===(' ')===)' '-----'}

คำอธิบาย: นี่เป็นวิธีที่ค่อนข้างง่ายสำหรับตารางเบคอนของ N × M ฉันสร้างเมทริกซ์ N × (4M) ของสี่สายต่อไปนี้โดยทำซ้ำ:

')===)'
'(===('
')===)'
'-----'

จากนั้นฉันเชื่อมสตริง-----เข้ากับจุดเริ่มต้น

นี่คือคำอธิบายสั้น ๆ ของรหัส:

')===)' '(===(' ')===)' '-----'  ⍝ An array of the four strings        

⍺ (4×⍵) ⍴                        ⍝ reshape (⍴) the array to a matrix with the dimensions
                                 ⍝ ⍺ by (4×⍵) (⍺ is the 1st argument and ⍵ is the second) 

⍉                               ⍝ transpose the matrix 

,[1]                             ⍝ concatenate to beginning of the matrix...

(⊂'-----')                       ⍝ ...the string '-----' embedded in its own matrix (⊂)


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