Selamat Hari Bacon!


40

Hari ini adalah Hari Bacon yang mungkin mengapa nama topi untuk berpartisipasi hari ini adalah "Bacon Mmmm". Apa cara yang lebih baik untuk merayakan hari bacon dengan matriks 2d penuh kesenangan yang terbuat dari bacon! Potongan daging 1 oleh 1 diwakili oleh ini:

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

Tujuan Anda di sini diberikan dua koordinat dalam sebuah tuple, ( x, y), di mana xdan ybilangan bulat positif bukan nol, Anda harus membuat bacon dan kembali dalam beberapa format (daftar, array, string).

Masukan dan keluaran:

Input: (2, 1)

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

Input: (1, 2)

Output:

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

Input: (2, 2)

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

Aturan:

  • Seperti yang dapat Anda lihat dengan kotak uji kedua, jika beberapa potong daging ditumpuk, hanya satu yang -----terpisah dengan masing-masing potongan daging di atas dan / atau di bawahnya. Itu berarti menumpuk bacon seperti ini tidak valid:

    ----- 
    )===)
    (===(
    )===)
    -----
    ----- 
    )===)
    (===(
    )===)
    -----   
    
  • Celah standar dilarang

  • Kode keharusan bekerja untuk kasus uji di atas dan berikut: (4, 4), (1, 6), (5, 1), (2, 3),(3, 2)

  • Berikan juru bahasa tempat uji kasus di atas dapat diuji

Kriteria Menang:

Kode terpendek menang! Selamat Hari Bacon untuk semua orang!


Percakapan ini telah dipindahkan ke obrolan .
Dennis

Jawaban:


11

V , 28, 26 , 24 byte

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

Cobalah online!

Penjelasan:

À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
Saya suka bagaimana jawaban ini hanya 3 byte lebih lama dari satu bacon: D
FlipTack

3
@FlipTack Ada Newlines. Ini sebenarnya 2 lebih pendek. : P
DJMcMayhem

2
Lupa tentang itu! Wow, jawaban yang lebih pendek dari blok bangunan output. Ini adalah beberapa hal gaya dennis yang terjadi.
FlipTack

8

TI-Basic, 80 byte

Yang ini sebenarnya cukup jenius :)

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

Juga, bagi siapa pun yang bertanya-tanya, di TI-Basic, titik dua dan baris baru dapat dipertukarkan, dan menggunakan Inputtanpa argumen mendapat input secara default ke Xdan Y.
Timtech

7

Python 2.7, 74 byte

Saya yakin ini bisa bermain golf lagi, tapi inilah yang saya dapatkan (fitur multiplikasi string Python sangat berguna):

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

Coba di sini !

Tidak digabungkan dengan penjelasan:

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 byte

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

Fungsi tanpa nama mengambil dua argumen integer positif dan mengembalikan string-dengan-baris baru. Pendekatan standar Mathematica: membangun array 2d string menggunakan pemilih (mod 4) untuk siklus string ke arah vertikal, kemudian runtuh ke string tunggal.


4

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

Sayangnya saya tidak bisa menulis @echo %s:==-%kalau tidak akan menghilangkan keharusan untuk variabel kedua.


Simpan 2 byte dengan menyatukan baris 1,2 dan 3,4 dengan &...
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

Kode:

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

Penjelasan:

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

Menggunakan pengkodean CP-1252 . Cobalah online!


4

05AB1E , 32 30 byte

Disimpan 2 byte berkat Adnan .

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

Cobalah online!

Penjelasan

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

Anda dapat menggantinya ")===)"dengan …)==û:)
Adnan

@ Adnan: Ah tentu saja! Terima kasih!
Emigna

3

Python 2 , 70 byte

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

Terima kasih kepada @xnor karena telah menghemat 4 byte!

Cobalah online!


Sepertinya garis tidak bergantian arah dalam test case Anda.
xnor

Sepertinya [_::3]akan lebih pendek.
xnor

Oh menembak, ada yang tidak beres di sana. Menghapus sampai saya bisa memperbaikinya.
Dennis

Itu memperbaiki kode saya tanpa menambahkan byte. Terima kasih! Mari kita lihat apakah saya berhasil membuat duplikat garis itu lagi.
Dennis

Ada 2**n%5%3siklus mana [1, 2, 1, 0, 1, 2, 1, 0, ...]. Mungkinkah itu berguna?
xnor

3

Python 2, 59 byte

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

Menghasilkan setiap baris a+b*3+adari karakter awal adan karakter tengah b(yang dihitung dari a). The a's siklus melalui '-()(', sedangkan badalah '-'saat aini '-', dan '='sebaliknya.


67 byte:

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

Buat setiap baris dari karakter luarnya adan karakter tengah bsebagai a+b*3+a, lalu cetak wsalinannya. Siklus ini melalui a zip.


3

JavaScript, 132 129 121 byte

-8 byte terima kasih kepada @ 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`')

Ini mungkin bisa lebih banyak golf. Jika Anda memiliki saran, silakan tinggalkan di komentar.



@ DevRicher Tapi saya belum benar-benar bermain golf saya. :)
ericw31415

@devRicher Sebenarnya saya tidak sengaja salah menghitung baris baru. Aduh. Sunting: Saya sudah mengalahkan Anda sekarang.
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 Ini tidak berfungsi? Saya dapat menggunakan penyederhanaan array Anda. :)
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))

Upaya string yang panjang dan literal. Coba di sini .


2

JavaScript (ES6), 78

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

Uji

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

Bahasa 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

Juga, sebelum Anda menyarankannya, GML mengharuskan setiap bagian dari for loop memiliki pernyataan di dalam :(
Timtech

1

Jelly , 26 byte

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

Ini adalah tautan diad (fungsi) yang mengembalikan array 2D.

Cobalah online!

Bagaimana itu bekerja

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

Telepon dengan:

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

Senang melihat jawaban lain dalam C, tetapi bisa dilakukan sedikit lebih pendek, lihat jawaban saya :)
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;};

Versi yang diformat:

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

Cobalah online! (untuk beberapa alasan tautan ini memberikan kesalahan tetapi tetap berfungsi)


0

Dart, 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');}

Coba di sini!


0

Dyalog APL, 55 byte

Ini adalah pertama kalinya saya menggunakan Dyalog APL, jadi saya yakin ini bukan pendekatan terbaik.

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

Penjelasan: Ini adalah pendekatan yang cukup sederhana, untuk kotak bacon N × M, saya membuat matriks N × (4M) dari empat string berikut, mengulangi:

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

Lalu aku menyatukan senar itu ----- ke awal.

Berikut penjelasan singkat kodenya:

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

0

Tcl , 91 byte

time {time {append h -----
append l )===)
append p (===(} $m
puts "$h
$l
$p
$l"} $n
puts $h

Cobalah online!


Apakah saya perlu memasukkan bagian input? Untuk menghitung jumlah byte?
sergiol

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.