¡Feliz día del tocino!

40

Hoy es el Día del tocino, que probablemente sea el motivo por el que el nombre para participar hoy es "Mmmm Bacon". ¡Qué mejor manera de celebrar el día del tocino con divertidas matrices 2d hechas de tocino! Una tira de tocino 1 por 1 está representada por esto:

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

Su objetivo aquí se le da dos coordenadas en una tupla, ( x, y), donde xy yson enteros positivos distintos de cero, debe crear el tocino y volver en algún formato (lista, matriz, cadena).

Entrada y salida:

Input: (2, 1)

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

Input: (1, 2)

Output:

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

Input: (2, 2)

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

Reglas:

  • Como puede ver con el segundo caso de prueba, si se apilan varias piezas de tocino juntas, solo una se -----separa con cada pieza de tocino encima y / o debajo. Eso significa que apilar tocino como este no es válido:

    ----- 
    )===)
    (===(
    )===)
    -----
    ----- 
    )===)
    (===(
    )===)
    -----   
    
  • Las lagunas estándar están prohibidas

  • El código de trabajo imprescindible para los casos de prueba, ya los siguientes: (4, 4), (1, 6), (5, 1), (2, 3),(3, 2)

  • Proporcionar un intérprete donde se puedan evaluar los casos de prueba anteriores.

Criterios ganadores:

¡El código más corto gana! ¡Feliz día del tocino para todos!

Anthony Pham
fuente
Esta conversación se ha movido al chat .
Dennis

Respuestas:

11

V , 28, 26 , 24 bytes

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

Pruébalo en línea!

Explicación:

À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
fuente
3
Me encanta cómo esta respuesta es solo 3 bytes más larga que un solo tocino: D
FlipTack
3
@FlipTack Hay nuevas líneas. En realidad es 2 más corto. : P
DJMcMayhem
2
Se olvidó de eso! Wow, una respuesta que es más corta que los componentes básicos de la salida. Esto es algo que está sucediendo al estilo dennis.
FlipTack
8

TI-Basic, 80 bytes

Este fue realmente bastante genio :)

":→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
fuente
Además, para cualquiera que se pregunte, en TI-Basic, los dos puntos y la nueva línea son intercambiables, y el uso Inputsin argumentos obtiene la entrada por defecto en Xy Y.
Timtech
7

Python 2.7, 74 bytes

Estoy seguro de que esto se podría jugar un poco más, pero esto es lo que se me ocurrió (la función de multiplicación de cuerdas de Python es útil):

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

Pruébalo aquí !

Sin disculpas con la explicación:

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
fuente
5

Mathematica, 74 bytes

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

Función sin nombre que toma dos argumentos enteros positivos y devuelve una cadena con líneas nuevas. Un enfoque estándar de Mathematica: construya una matriz 2D de cadenas usando un selector (mod 4) para alternar las cadenas en la dirección vertical, luego colapsarlas en una sola cadena.

Greg Martin
fuente
4

Lote, 168 bytes

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

Por desgracia, no puedo escribir lo @echo %s:==-%contrario que eliminaría la necesidad de la segunda variable.

Neil
fuente
Ahorre 2 bytes concatenando las líneas 1,2 y 3,4 con &...
Magoo
4

C, 91 89 bytes

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
fuente
4

05AB1E , 25 bytes

Código:

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

Explicación:

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

Utiliza la codificación CP-1252 . Pruébalo en línea!

Adnan
fuente
4

05AB1E , 32 30 bytes

Guardado 2 bytes gracias a Adnan .

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

Pruébalo en línea!

Explicación

'-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
fuente
Puede reemplazar ")===)"por …)==û:)
Adnan
@Adnan: ¡Ah, por supuesto! ¡Gracias!
Emigna
3

Python 2 , 70 bytes

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

¡Gracias a @xnor por guardar 4 bytes!

Pruébalo en línea!

Dennis
fuente
Parece que las líneas no alternan direcciones en su caso de prueba.
xnor
Parece que un [_::3]sería más corto.
xnor
Oh, dispara, algo salió mal allí. Eliminar hasta que pueda arreglarlo.
Dennis
Eso solucionó mi código sin agregar bytes. ¡Gracias! Veamos si logro deduplicar esas líneas nuevamente.
Dennis
Hay 2**n%5%3qué ciclos [1, 2, 1, 0, 1, 2, 1, 0, ...]. ¿Podría ser útil?
xnor
3

Python 2, 59 bytes

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

Genera cada línea a a+b*3+apartir del carácter inicial ay el carácter central b(que se calcula a partir de a). El aciclo de s '-()(', mientras que bes '-'cuando aes '-', y de lo '='contrario.


67 bytes:

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

Genera cada línea a partir de su carácter exterior ay carácter central bcomo a+b*3+a, luego imprime wcopias de esto. Estos ciclos a través de a zip.

xnor
fuente
3

JavaScript, 132 129 121 bytes

-8 bytes gracias a @ 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`')

Esto probablemente se pueda jugar más al golf. Si tienes una sugerencia, déjala en los comentarios.

ericw31415
fuente
me ganó por 1 byte .. :(
devRicher
@devRicher Pero todavía no he jugado exactamente al mío. :)
ericw31415
@devRicher En realidad, accidentalmente conté mal la nueva línea. Whoops Editar: te he vencido ahora.
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 ¿Esto no funciona? Sin embargo, puedo usar su simplificación de matriz. :)
ericw31415
2

Lua, 132 bytes

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

Intento de cadena largo y literal. Pruébalo aquí .

devRicher
fuente
2

JavaScript (ES6), 78

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

Prueba

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
fuente
1

GameMaker Language, 160 139 148 bytes 133 bytes

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
fuente
Además, antes de sugerirlo, GML requiere que cada parte del ciclo for tenga una declaración dentro :(
Timtech
1

Jalea , 26 bytes

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

Este es un enlace diádico (función) que devuelve una matriz 2D.

Pruébalo en línea!

Cómo funciona

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

Llamar con:

int main()
{
    b(2,3);
}
Steadybox
fuente
Es bueno ver otra respuesta en C, pero se puede hacer un poco más corto, vea mi respuesta :)
orlp
0

C #, 160 bytes

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ón formateada:

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

Pruébalo en línea! (por alguna razón, este enlace da un error pero funciona de todos modos)

TheLethalCoder
fuente
0

Dardo, 125 117 bytes

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

Pruébalo aquí!

Dwayne Slater
fuente
0

Dyalog APL, 55 bytes

Esta es la primera vez que uso Dyalog APL, así que estoy seguro de que este no es el mejor enfoque.

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

Explicación: Este es un enfoque bastante simple, para una cuadrícula de tocino de N × M, hago una matriz N × (4M) de las siguientes cuatro cadenas, repitiendo:

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

Entonces concateno la cuerda ----- al principio.

Aquí hay una explicación rápida del código:

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

Tcl , 91 bytes

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

Pruébalo en línea!

sergiol
fuente
¿Necesito poner la parte de entrada? Para dar cuenta del recuento de bytes?
sergiol