Szczęśliwego dnia bekonu!

40

Dzisiaj jest Dzień Bekonu i prawdopodobnie dlatego nazwa kapelusza na dzisiejszy udział to „Mmmm Bacon”. Czy jest lepszy sposób na uczczenie dnia bekonu dzięki wypełnionym zabawą matrycom 2D wykonanym z bekonu! Pasek boczku 1 na 1 jest reprezentowany przez to:

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

Twój cel tutaj ma dwie współrzędne w krotce ( x, y), gdzie xi ysą niezerowymi liczbami całkowitymi dodatnimi, musisz utworzyć boczek i zwrócić w jakimś formacie (lista, tablica, łańcuch).

Wejście i wyjście:

Input: (2, 1)

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

Input: (1, 2)

Output:

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

Input: (2, 2)

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

Zasady:

  • Jak widać w drugim przypadku testowym, jeśli wiele kawałków boczku jest ułożonych w stos, tylko jeden -----dzieli się z każdym kawałkiem boczku powyżej i / lub poniżej. Oznacza to, że układanie boczku w ten sposób jest nieprawidłowe:

    ----- 
    )===)
    (===(
    )===)
    -----
    ----- 
    )===)
    (===(
    )===)
    -----   
    
  • Standardowe luki są zabronione

  • Prace kod obowiązkowa dla powyższych przypadków testowych oraz następujące: (4, 4), (1, 6), (5, 1), (2, 3),(3, 2)

  • Zapewnij tłumacza, w którym można przetestować powyższe przypadki testowe

Zwycięskie kryteria:

Najkrótszy kod wygrywa! Szczęśliwego dnia bekonu dla wszystkich!

Anthony Pham
źródło
Ta rozmowa została przeniesiona do czatu .
Dennis

Odpowiedzi:

11

V , 28, 26 , 24 bajtów

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

Wypróbuj online!

Wyjaśnienie:

À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
DJMcMayhem
źródło
3
Uwielbiam to, że ta odpowiedź jest tylko 3 bajty dłuższa niż pojedynczy boczek: D
FlipTack
3
@FlipTack Istnieją nowe linie. To właściwie 2 razy krótsze. : P
DJMcMayhem
2
Zapomniałem o tym! Wow, odpowiedź krótsza niż elementy składowe wyniku. To się dzieje w stylu Dennisa.
FlipTack,
8

TI-Basic, 80 bajtów

Ten był naprawdę genialny :)

":→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
Timtech
źródło
Ponadto, dla każdego, kto się zastanawia, w TI-Basic dwukropek i znak nowej linii są wymienne, a użycie Inputbez argumentów domyślnie wprowadza dane do Xi Y.
Timtech
7

Python 2.7, 74 bajty

Jestem pewien, że można by jeszcze trochę zagrać w golfa, ale oto co wymyśliłem (przydatna jest funkcja mnożenia ciągów w Pythonie):

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

Wypróbuj tutaj !

Nieoznakowany z wyjaśnieniem:

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!
Calconym
źródło
5

Mathematica, 74 bajty

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

Funkcja bez nazwy, która przyjmuje dwa argumenty liczby całkowitej dodatniej i zwraca ciąg znaków z nowymi wierszami. Standardowe podejście matematyczne: zbuduj tablicę 2d łańcuchów za pomocą selektora (mod 4), aby cyklicznie przeciągać łańcuchy w kierunku pionowym, a następnie zwinąć je w pojedynczy łańcuch.

Greg Martin
źródło
4

Partia, 168 bajtów

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

Raczej nie mogę napisać @echo %s:==-%inaczej, co wyeliminowałoby konieczność stosowania drugiej zmiennej.

Neil
źródło
Zaoszczędź 2 bajty, łącząc linie 1,2 i 3,4 z &...
Magoo
4

C, 91 89 bajtów

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);}
orlp
źródło
4

05AB1E , 25 bajtów

Kod:

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

Wyjaśnienie:

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

Wykorzystuje kodowanie CP-1252 . Wypróbuj online!

Adnan
źródło
4

05AB1E , 32 30 bajtów

Zaoszczędzono 2 bajty dzięki Adnan .

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

Wypróbuj online!

Wyjaśnienie

'-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
Emigna
źródło
Możesz zastąpić ")===)"przez …)==û:
Adnan
@Adnan: Ach, oczywiście! Dzięki!
Emigna
3

Python 2 , 70 bajtów

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

Dzięki @xnor za zapisanie 4 bajtów!

Wypróbuj online!

Dennis
źródło
Wygląda na to, że linie w twoim przypadku testowym nie zmieniają kierunków.
xnor
Wygląda na to, [_::3]że byłby krótszy.
xnor
Och, strzel, coś poszło nie tak. Usuwam, dopóki nie będę mógł tego naprawić.
Dennis
To naprawiło mój kod bez dodawania bajtów. Dzięki! Zobaczmy, czy uda mi się ponownie zduplikować te linie.
Dennis
Tam, 2**n%5%3które cykle [1, 2, 1, 0, 1, 2, 1, 0, ...]. Czy to może być przydatne?
xnor
3

Python 2, 59 bajtów

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

Generuje każdą linię a+b*3+aod znaku początkowego ai znaku środkowego b(z którego oblicza się a). W a„S przechodzić '-()(', a bto '-'po ato '-', a '='inaczej.


67 bajtów:

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

Generuje każdą linię od jego zewnętrznej postaci ai środkowej charakteru bjako a+b*3+a, a następnie drukuje wkopie tego. Są cykl za pośrednictwem zip.

xnor
źródło
3

JavaScript, 132 129 121 bajtów

-8 bajtów dzięki @ 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`')

To może być prawdopodobnie bardziej golfa. Jeśli masz sugestię, zostaw ją w komentarzach.

ericw31415
źródło
pobił mnie o 1 bajt .. :(
devRicher
@devRicher Ale jeszcze nie grałem w golfa. :)
ericw31415
@devRicher Właściwie przypadkowo błędnie przeliczyłem nowy wiersz. Ups Edycja: Teraz cię pokonałem.
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 To nie działa? Mogę jednak użyć uproszczenia macierzy. :)
ericw31415
2

Lua, 132 bajty

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

Długa, dosłowna próba łańcucha. Wypróbuj tutaj .

devRicher
źródło
2

JavaScript (ES6), 78

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

Test

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>

edc65
źródło
1

GameMaker Language, 160 139 148 bajtów 133 bajty

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
Timtech
źródło
Ponadto, zanim to zasugerujesz, GML wymaga, aby każda część pętli for zawierała instrukcję :(
Timtech
1

Galaretka , 26 bajtów

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

To diademiczne łącze (funkcja), które zwraca tablicę 2D.

Wypróbuj online!

Jak to działa

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.
Dennis
źródło
0

C, 159 158 153 bajtów

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

Zadzwoń z:

int main()
{
    b(2,3);
}
Steadybox
źródło
Miło widzieć kolejną odpowiedź w C, ale można to zrobić nieco krócej, zobacz moją odpowiedź :)
lub
0

C #, 160 bajtów

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

Wersja sformatowana:

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

Wypróbuj online! (z jakiegoś powodu ten link wyświetla błąd, ale i tak działa)

TheLethalCoder
źródło
0

Dart, 125 117 bajtów

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

Wypróbuj tutaj!

Dwayne Slater
źródło
0

Dyalog APL, 55 bajtów

Po raz pierwszy korzystam z Dyalog APL, więc jestem pewien, że nie jest to najlepsze podejście.

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

Objaśnienie: Jest to dość proste podejście, dla siatki boczków N × M tworzę macierz N × (4M) następujących czterech ciągów, powtarzając:

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

Następnie łączę ciąg -----do początku.

Oto krótkie wyjaśnienie kodu:

')===)' '(===(' ')===)' '-----'  ⍝ 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 (⊂)
ren
źródło
0

Tcl , 91 bajtów

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

Wypróbuj online!

sergiol
źródło
Czy potrzebuję umieścić część wejściową? Aby uwzględnić liczbę bajtów?
sergiol