Mutlu Bacon Günü!


40

Bugün Bacon Günü, bu nedenle muhtemelen bugün katılım için şapka adının adı "Mmmm Bacon". Pastırma gününü pastırmadan yapılan eğlenceli 2d matrislerle kutlamanın en iyi yolu! 1'e 1 pastırma şeridi bununla temsil edilir:

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

Burada mısın amaç (bir demet içinde iki koordinat verilir x, y), nerede xve ypozitif tamsayılar sıfırdan farklı olan, bazı biçimi (liste, dizi, dize) pastırma ve getiri oluşturmak için vardır.

Giriş ve çıkış:

Input: (2, 1)

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

Input: (1, 2)

Output:

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

Input: (2, 2)

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

Kurallar:

  • İkinci test durumuyla görebileceğiniz gibi, birden fazla pastırma parçası birlikte istiflenirse, -----her biri pastırma parçasının üstünde ve / veya altında bir tane bulunur. Yani bu şekilde pastırma istifleme geçersiz:

    ----- 
    )===)
    (===(
    )===)
    -----
    ----- 
    )===)
    (===(
    )===)
    -----   
    
  • Standart boşluklar yasaktır

  • Yukarıdaki test durumları ve aşağıda kod zorunluluk çalışması: (4, 4), (1, 6), (5, 1), (2, 3),(3, 2)

  • Yukarıdaki test durumlarının test edilebileceği bir tercüman sağlayın

Kazanma Kriterleri:

En kısa kod kazanır! Herkese Mutlu Bacon Günü!


Bu konuşma sohbete taşındı .
Dennis,

Yanıtlar:


11

V , 28, 26 , 24 bayt

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

Çevrimiçi deneyin!

Açıklama:

À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
Bu cevabın tek bir pastırmadan sadece 3 bayt daha uzun olmasına
bayılıyorum

3
@FlipTack Newlines var. Aslında 2 kısa. : P
DJMcMayhem

2
Unut gitsin! Wow, çıktının yapı taşlarından daha kısa bir cevap. Bu bazı dennis tarzı şeyler oluyor.
FlipTack

8

TI-Basic, 80 bayt

Bu aslında oldukça dahiydi :)

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

Ayrıca, merak eden herkes için, TI-Basic'te kolon ve yeni satır birbirinin yerine geçebilir ve Inputhiçbir argüman kullanmadan varsayılan olarak Xve içine girdiler Y.
Timtech

7

Python 2.7, 74 bayt

Bundan biraz daha golf oynayabileceğime eminim, fakat bu benim geldiğim şeydi (Python'un dize çarpma özelliği kesinlikle işe yarar):

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

Burada dene !

Açıklama ile Ungolfed:

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 bayt

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

Adsız işlev, iki pozitif tamsayı argümanını alarak ve bir dize ile yeni satırlar döndürür. Standart bir Mathematica yaklaşımı: dizeleri dikey yönde döndürmek için (mod 4) bir seçiciyi kullanarak 2d dizge dizisi oluşturun, sonra bunları tek dizgeye daraltın.


4

Toplu iş, 168 bayt

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

Aksine maalesef @echo %s:==-%ikinci değişken için gerekliliği ortadan kaldıracak bir şey yazamam .


1,2 ve 3,4 satırlarını 1 ile birleştirerek 2 bayttan tasarruf edin &...
Magoo

4

C, 91 89 bayt

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 bayt

Kod:

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

Açıklama:

…)==û                         # 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 kodlamasını kullanır . Çevrimiçi deneyin!


4

05AB1E , 32 30 bayt

Adnan sayesinde 2 bayt kaydedildi .

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

Çevrimiçi deneyin!

açıklama

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

Sen yerine ")===)"göre …)==û:)
Adnan

@Adnan: Ah elbette! Teşekkürler!
Emigna,

3

Python 2,70 bayt

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

4 byte tasarruf için @xnor teşekkürler!

Çevrimiçi deneyin!


Görünüşe göre çizgiler test durumunuzdaki yönleri değiştirmiyor.
xnor

Bir [_::3]kısa olurdu gibi görünüyor .
xnor

Vur, orada bir şeyler ters gitti. Düzeltene kadar siliyorum.
Dennis,

Bu, bayt eklemeden kodumu düzeltti. Teşekkürler! Bakalım tekrar bu satırları tekilleştirmeyi başardım mı.
Dennis,

Orada 2**n%5%3hangi çevrimleri [1, 2, 1, 0, 1, 2, 1, 0, ...]. Yararlı olabilir mi?
xnor

3

Python 2, 59 bayt

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

Her satırı a+b*3+ailk karakterden ave merkez karakterden b(bu hesaplananlardan a) oluşturur. aÜzerinden 'saniyede '-()(', oysa bolduğu '-'zaman aolduğu '-'ve '='başka türlü.


67 bayt:

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

Her satırı dış karakterinden ave orta karakterinden bolduğu gibi oluşturur a+b*3+a, wbunun kopyalarını basar . Bu döngüler a zip.


3

JavaScript, 132 129 121 bayt

@ User2428118 sayesinde -8 bayt

(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`')

Bu muhtemelen daha fazla golf oynayabilir. Bir öneriniz varsa, lütfen yorumlarda bırakınız.


beni 1 bayt .. :(
devRicher

@devRicher Ama henüz tam olarak benimkine oy vermedim. :)
ericw31415 18

@devRicher Aslında ben yenisini yanlışlıkla yanlış saydım. Whoops. Düzenleme: Seni şimdi yendim.
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 Bu çalışmıyor mu? Senin dizi basitleştirmeyi de kullanabilirim. :)
ericw31415

2

Lua, 132 bayt

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

Uzun, değişmez dizge girişimi. Burada dene .


2

JavaScript (ES6), 78

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

Ölçek

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 Dili, 160 139 148 bayt 133 bayt

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

Ayrıca,
önermeden

1

Jöle , 26 bayt

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

Bu 2B dizi döndüren ikili bir bağlantıdır (fonksiyon).

Çevrimiçi deneyin!

Nasıl çalışır

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 bayt

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

İle ara:

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

C’de başka bir cevap görmek güzel, ama biraz daha kısa bir sürede yapılabilir, cevabımı görün :)
orlp

0

C #, 160 bayt

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

Biçimlendirilmiş versiyon:

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

Çevrimiçi deneyin! (nedense bu link bir hata veriyor ama yine de çalışıyor)


0

Dart, 125 117 bayt

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

Burada dene !


0

Dyalog APL, 55 bayt

Bu benim ilk kez Dyalog APL kullanıyorum, bu yüzden bunun en iyi yaklaşım olmadığını düşünüyorum.

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

Açıklama: Bu oldukça basit bir yaklaşım, N × M bir pastırma ızgarası için, aşağıdaki dört dizenin bir N × (4M) matrisini yapıyorum, tekrar ediyorum:

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

Sonra dizgiyi -----başlangıcı ile birleştiririm .

İşte kodun kısa bir açıklaması:

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

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

Çevrimiçi deneyin!


Giriş kısmını koymama ihtiyacım var mı? Bayt sayısını hesaplamak için?
sergiol

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.