Feliz Dia do Bacon!

40

Hoje é o Dia do Bacon, e é provavelmente por isso que o nome do chapéu para participar hoje é "Mmmm Bacon". Que melhor maneira de comemorar o dia do bacon com divertidas matrizes 2D preenchidas feitas de bacon! Uma tira de bacon 1 por 1 é representada por isso:

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

Seu objetivo aqui é dado duas coordenadas em uma tupla, ( x, y), onde xe ysão números inteiros positivos diferentes de zero, você deve criar o bacon e retornar em algum formato (lista, matriz, string).

Entrada e saída:

Input: (2, 1)

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

Input: (1, 2)

Output:

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

Input: (2, 2)

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

Regras:

  • Como você pode ver no segundo caso de teste, se vários pedaços de bacon forem empilhados juntos, apenas um será -----separado com cada pedaço de bacon acima e / ou abaixo dele. Isso significa que empilhar bacon como este é inválido:

    ----- 
    )===)
    (===(
    )===)
    -----
    ----- 
    )===)
    (===(
    )===)
    -----   
    
  • As brechas padrão são proibidas

  • O trabalho de código imperativo para os casos de teste anteriores e às seguintes: (4, 4), (1, 6), (5, 1), (2, 3),(3, 2)

  • Forneça um intérprete onde os casos de teste acima possam ser testados

Critérios de vencimento:

O código mais curto vence! Feliz Dia do Bacon a todos!

Anthony Pham
fonte
Esta conversa foi movida para o bate-papo .
Dennis

Respostas:

11

V , 28, 26 , 24 bytes

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

Experimente online!

Explicação:

À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
fonte
3
Eu amo como essa resposta tem apenas 3 bytes a mais que um único bacon: D
FlipTack
3
@FlipTack Existem novas linhas. Na verdade, é 2 mais curto. : P
DJMcMayhem
2
Esqueceu sobre isso! Uau, uma resposta que é mais curta do que os blocos de construção da saída. Isso está acontecendo no estilo dennis.
FlipTack
8

TI-Basic, 80 bytes

Este foi realmente bastante genial :)

":→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
fonte
Além disso, para quem se pergunta, no TI-Basic os dois pontos e a nova linha são intercambiáveis, e o uso Inputsem argumentos é inserido por padrão em Xe Y.
Timtech
7

Python 2.7, 74 bytes

Tenho certeza de que isso poderia ser um pouco mais divertido, mas é isso que eu criei (o recurso de multiplicação de strings do Python certamente é útil):

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

Experimente aqui !

Ungolfed com explicação:

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

Mathematica, 74 bytes

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

Função sem nome, recebendo dois argumentos inteiros positivos e retornando uma string com novas linhas. Uma abordagem padrão do Mathematica: crie uma matriz 2D de cadeias usando um seletor (mod 4) para alternar as cadeias na direção vertical e, em seguida, reduza-as para uma única cadeia.

Greg Martin
fonte
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:_=-%

Infelizmente, não posso escrever de @echo %s:==-%outra forma que eliminaria a necessidade da segunda variável.

Neil
fonte
Salve 2 bytes concatenando as linhas 1,2 e 3,4 com &...
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
fonte
4

05AB1E , 25 bytes

Código:

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

Explicação:

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

Usa a codificação CP-1252 . Experimente online!

Adnan
fonte
4

05AB1E , 32 30 bytes

Economizou 2 bytes graças a Adnan .

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

Experimente online!

Explicação

'-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
fonte
Você pode substituir ")===)"por …)==û:)
Adnan
@Adnan: Ah, é claro! Obrigado!
Emigna
3

Python 2 , 70 bytes

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

Obrigado a @xnor por salvar 4 bytes!

Experimente online!

Dennis
fonte
Parece que as linhas não alternam direções no seu caso de teste.
xnor
Parece que um [_::3]seria mais curto.
Xnor
Oh dispara, algo deu errado lá. Excluindo até que eu possa corrigi-lo.
Dennis
Isso corrigiu meu código sem adicionar bytes. Obrigado! Vamos ver se consigo desduplicar essas linhas novamente.
Dennis
2**n%5%3quais ciclos [1, 2, 1, 0, 1, 2, 1, 0, ...]. Isso pode ser útil?
xnor
3

Python 2, 59 bytes

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

Gera cada linha a a+b*3+apartir do caractere inicial ae do caractere central b(do qual é calculado a). O aciclo passa '-()(', enquanto bé '-'quando aé '-'e de '='outra forma.


67 bytes:

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

Gera cada linha do seu carácter exterior apersonagem e o centro bcomo a+b*3+a, em seguida, imprime wcópias deste. Estes ciclo via a zip.

xnor
fonte
3

JavaScript, 132 129 121 bytes

-8 bytes graças 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`')

Provavelmente isso pode ser jogado mais. Se você tem uma sugestão, deixe nos comentários.

ericw31415
fonte
me bateu por 1 byte .. :(
devRicher
@devRicher Mas ainda não joguei exatamente o meu. :)
ericw31415
@devRicher Na verdade, acidentalmente desmontei a nova linha. Ops. Edit: Eu venci você agora.
ericw31415
11
@ 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 Isso não funciona? Eu posso usar sua simplificação de array. :)
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))

Tentativa de cadeia longa e literal. Experimente aqui .

devRicher
fonte
2

JavaScript (ES6), 78

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

Teste

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

Linguagem do GameMaker, 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
fonte
Além disso, antes de sugeri-lo, o GML exige que cada parte do loop for tenha uma declaração dentro :(
Timtech
1

Geléia , 26 bytes

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

Este é um link diádico (função) que retorna uma matriz 2D.

Experimente online!

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

Ligue para:

int main()
{
    b(2,3);
}
Steadybox
fonte
É bom ver outra resposta em C, mas pode ser feito um pouco mais curto, ver a minha resposta :)
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;};

Versão formatada:

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

Experimente online! (por algum motivo, este link apresenta um erro, mas funciona de qualquer maneira)

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

Experimente aqui!

Dwayne Slater
fonte
0

Dyalog APL, 55 bytes

Esta é a minha primeira vez usando o Dyalog APL, por isso tenho certeza de que essa não é a melhor abordagem.

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

Explicação: Essa é uma abordagem bastante simples, para uma grade de bacon de N × M, faço uma matriz N × (4M) das quatro seqüências a seguir, repetindo:

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

Então concatenar a string -----para o começo.

Aqui está uma rápida explicação do 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
fonte
0

Tcl , 91 bytes

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

Experimente online!

sergiol
fonte
Preciso colocar a parte de entrada? Para contabilizar a contagem de bytes?
sergiol 4/17/17