Chúc mừng ngày Bacon!


40

Hôm nay là ngày Bacon có lẽ là lý do tại sao tên của chiếc mũ để tham gia ngày hôm nay là "Mmmm Bacon". Còn gì tuyệt vời hơn khi ăn mừng ngày thịt xông khói với ma trận 2d đầy thú vị được làm từ thịt xông khói! Một dải thịt xông khói 1 trên 1 được thể hiện bằng cách này:

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

Mục tiêu của bạn ở đây được đưa ra hai tọa độ trong một tuple, ( x, y), trong đó xylà các số nguyên dương khác không, bạn phải tạo thịt xông khói và trả về ở một số định dạng (danh sách, mảng, chuỗi).

Đầu vào và đầu ra:

Input: (2, 1)

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

Input: (1, 2)

Output:

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

Input: (2, 2)

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

Quy tắc:

  • Như bạn có thể thấy với trường hợp thử nghiệm thứ hai, nếu nhiều miếng thịt xông khói được xếp chồng lên nhau, chỉ có một -----phân tách với mỗi miếng thịt xông khói ở trên và / hoặc bên dưới nó. Điều đó có nghĩa là xếp thịt xông khói như thế này là không hợp lệ:

    ----- 
    )===)
    (===(
    )===)
    -----
    ----- 
    )===)
    (===(
    )===)
    -----   
    
  • Sơ hở tiêu chuẩn bị cấm

  • Các công việc mã bắt buộc đối với các trường hợp thử nghiệm trên và sau: (4, 4), (1, 6), (5, 1), (2, 3),(3, 2)

  • Cung cấp một thông dịch viên trong đó các trường hợp kiểm tra ở trên có thể được kiểm tra

Tiêu chí chiến thắng:

Mã ngắn nhất sẽ thắng! Chúc mừng ngày Bacon đến mọi người!


Cuộc trò chuyện này đã được chuyển sang trò chuyện .
Dennis

Câu trả lời:


11

V , 28, 26 , 24 byte

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

Hãy thử trực tuyến!

Giải trình:

À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
Tôi yêu như thế nào câu trả lời này là chỉ có 3 byte dài hơn một thịt xông khói duy nhất: D
FlipTack

3
@FlipTack Có dòng mới. Nó thực sự ngắn hơn 2. : P
DJMcMayhem

2
Quên điều đó đi! Wow, một câu trả lời ngắn hơn các khối xây dựng của đầu ra. Đây là một số thứ theo phong cách dennis đang diễn ra.
FlipTack

8

TI-Basic, 80 byte

Điều này thực sự khá thiên tài :)

":→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

Ngoài ra, đối với bất kỳ ai thắc mắc, trong TI-Basic, dấu hai chấm và dòng mới có thể hoán đổi cho nhau và việc sử dụng Inputkhông có đối số sẽ được nhập theo mặc định vào XY.
Timtech

7

Python 2.7, 74 byte

Tôi chắc chắn rằng điều này có thể được đánh gôn thêm, nhưng đây là những gì tôi nghĩ ra (tính năng nhân chuỗi của Python chắc chắn sẽ có ích):

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

Hãy thử nó ở đây !

Ung dung với lời giải thích:

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

Toán học, 74 byte

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

Hàm không tên lấy hai đối số nguyên dương và trả về một chuỗi có dòng mới. Một cách tiếp cận Mathicala tiêu chuẩn: xây dựng một chuỗi 2d bằng cách sử dụng trình chọn (mod 4) để xoay vòng các chuỗi theo hướng dọc, sau đó thu gọn chúng thành một chuỗi.


4

Mẻ, 168 byte

@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:_=-%

Thật không may, tôi không thể viết @echo %s:==-%nếu không sẽ loại bỏ sự cần thiết cho biến thứ hai.


Lưu 2 byte bằng cách nối các dòng 1,2 và 3,4 với &...
Magoo

4

C, 91 89 byte

i;f(w,h){w=w*5+1;for(i=0;i<w*4*h+w;++i)putchar(i%w<w-1?i/w%4?i%w%5%4?61:40+i/w%2:45:10);}

4

05AB1E , 25 byte

Mã số:

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

Giải trình:

…)==û                         # 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

Sử dụng mã hóa CP-1252 . Hãy thử trực tuyến!


4

05AB1E , 32 30 byte

Đã lưu 2 byte nhờ Adnan .

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

Hãy thử trực tuyến!

Giải trình

'-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

Bạn có thể thay thế ")===)"bằng …)==û:)
Adnan

@Ad Nam: Tất nhiên rồi! Cảm ơn!
Emigna

3

Python 2 , 70 byte

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

Cảm ơn @xnor vì đã tiết kiệm 4 byte!

Hãy thử trực tuyến!


Có vẻ như các dòng không thay thế hướng trong trường hợp thử nghiệm của bạn.
xnor

Có vẻ như [_::3]sẽ ngắn hơn.
xnor

Oh bắn, có gì đó không ổn ở đó. Xóa cho đến khi tôi có thể sửa nó.
Dennis

Điều đó đã sửa mã của tôi mà không cần thêm bất kỳ byte nào. Cảm ơn! Hãy xem liệu tôi có thể lặp lại những dòng đó một lần nữa không.
Dennis

2**n%5%3chu kỳ nào [1, 2, 1, 0, 1, 2, 1, 0, ...]. Điều đó có thể hữu ích?
xnor

3

Python 2, 59 byte

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

Tạo mỗi dòng như a+b*3+atừ ký tự ban đầu avà ký tự trung tâm b(được tính từ a). Các a's chu kỳ qua '-()(', trong khi đó b'-'khi a'-', và '='ngược lại.


67 byte:

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

Tạo mỗi dòng từ ký tự bên ngoài avà ký tự trung tâm bnhư a+b*3+asau đó in các wbản sao này. Các chu kỳ này thông qua a zip.


3

JavaScript, 132 129 121 byte

-8 byte nhờ @ 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`')

Điều này hoàn toàn có thể được chơi golf nhiều hơn. Nếu bạn có một đề nghị, xin vui lòng để lại trong các ý kiến.


đánh tôi bằng 1 byte .. :(
devRicher

@devR Rich Nhưng tôi chưa chơi golf chính xác. :)
ericw31415

@devR Rich Thật ra tôi vô tình nghe nhầm dòng mới. Rất tiếc. Chỉnh sửa: Tôi đã đánh bại bạn bây giờ.
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)).join_BACKTICK NEWLINE BACKTICK_;')
user2428118

@ user2428118 Điều này không hoạt động? Tôi có thể sử dụng đơn giản hóa mảng của bạn mặc dù. :)
ericw31415

2

Lua, 132 byte

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))

Chuỗi dài, nghĩa đen. Hãy thử nó ở đây .


2

JavaScript (ES6), 78

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

Kiểm tra

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

Ngôn ngữ GameMaker, 160 139 148 byte 133 byte

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

Ngoài ra, trước khi bạn đề xuất, GML yêu cầu mỗi phần của vòng lặp for phải có câu lệnh bên trong :(
Timtech

1

Thạch , 26 byte

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

Đây là một liên kết dyadic (hàm) trả về một mảng 2D.

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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 byte

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

Gọi với:

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

Rất vui khi thấy một câu trả lời khác trong C, nhưng nó có thể được thực hiện ngắn hơn một chút, xem câu trả lời của tôi :)
orlp

0

C #, 160 byte

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

Phiên bản được định dạng:

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

Hãy thử trực tuyến! (vì một số lý do, liên kết này có lỗi nhưng vẫn hoạt động)


0

Phi tiêu, 125 117 byte

(x,y){var t='-'*5*x,i=0;return()sync*{yield t;for(;i<y*4;i++)yield i%4>2?t:i%2>0?'(===('*x:')===)'*x;}().join('\n');}

Hãy thử nó ở đây!


0

APL Dyalog, 55 byte

Đây là lần đầu tiên tôi sử dụng Dyalog APL, vì vậy tôi chắc chắn đây không phải là cách tiếp cận tốt nhất.

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

Giải thích: Đây là một cách tiếp cận khá đơn giản, đối với lưới thịt xông khói N × M, tôi tạo ma trận N × (4M) của bốn chuỗi sau, lặp lại:

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

Sau đó, tôi nối chuỗi -----vào đầu.

Đây là một lời giải thích nhanh về mã:

')===)' '(===(' ')===)' '-----'  ⍝ 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 (⊂)


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.