Bonne journée au bacon!


40

La journée du bacon a lieu aujourd'hui et c'est probablement pour cette raison que le nom du chapeau pour participer aujourd'hui est "Mmmm Bacon". Quelle meilleure façon de célébrer la journée du bacon avec des matrices 2d amusantes à base de bacon! Une tranche de bacon 1 sur 1 est représentée par ceci:

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

Votre but ici est donné deux coordonnées dans un tuple, ( x, y), où xet ysont des entiers positifs non nuls, vous devez créer le bacon et revenir dans un format (liste, tableau, chaîne).

Entrée et sortie:

Input: (2, 1)

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

Input: (1, 2)

Output:

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

Input: (2, 2)

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

Règles:

  • Comme vous pouvez le constater avec le deuxième cas de test, si plusieurs morceaux de bacon sont empilés, un seul se -----sépare avec chaque morceau de bacon situé au-dessus et / ou au-dessous. Cela signifie que l'empilement de bacon comme ceci est invalide:

    ----- 
    )===)
    (===(
    )===)
    -----
    ----- 
    )===)
    (===(
    )===)
    -----   
    
  • Les échappatoires standard sont interdites

  • Le travail doit de code pour les cas de test ci - dessus et ce qui suit: (4, 4), (1, 6), (5, 1), (2, 3),(3, 2)

  • Fournir un interprète où les cas de test ci-dessus peuvent être testés

Critères gagnants:

Le code le plus court gagne! Bonne journée de bacon à tous!


Cette conversation a été déplacée pour discuter .
Dennis

Réponses:


11

V , 28, 26 , 24 octets

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

Essayez-le en ligne!

Explication:

À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
J'adore le fait que cette réponse ne dépasse que 3 octets de plus qu'un bacon: D
FlipTack

3
@ FlipTack Il y a des nouvelles lignes. C'est en fait 2 plus court. : P
DJMcMayhem

2
Oublié ça! Wow, une réponse qui est plus courte que les blocs de construction de la sortie. C'est un truc de style dennis qui se passe.
FlipTack

8

TI-Basic, 80 octets

Celui-ci était en fait assez génial :)

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

De plus, pour tous ceux qui s’interrogent, dans TI-Basic, les deux points et la nouvelle ligne sont interchangeables, et l’utilisation Inputsans arguments obtient les entrées par défaut dans Xet Y.
Timtech

7

Python 2.7, 74 octets

Je suis sûr que cela pourrait être joué un peu plus, mais voici ce que je propose (la fonction de multiplication de chaînes de Python est très pratique):

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

Essayez-le ici !

Ungolfed avec explication:

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 octets

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

Fonction non nommée prenant deux arguments entiers positifs et renvoyant une chaîne avec des nouvelles lignes. Une approche Mathematica standard: créez un tableau 2D de chaînes en utilisant un sélecteur (mod 4) pour faire défiler les chaînes dans le sens vertical, puis les réduire en une seule chaîne.


4

Lot, 168 octets

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

Malheureusement, je ne peux pas écrire @echo %s:==-%sinon cela éliminerait la nécessité de la deuxième variable.


Économisez 2 octets en concaténant les lignes 1, 2 et 3 avec &...
Magoo

4

C, 91 89 octets

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 octets

Code:

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

Explication:

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

Utilise le codage CP-1252 . Essayez-le en ligne!


4

05AB1E , 32 30 octets

Sauvegardé 2 octets grâce à Adnan .

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

Essayez-le en ligne!

Explication

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

Vous pouvez remplacer ")===)"par …)==û:)
Adnan

@Adnan: Ah bien sûr! Merci!
Emigna

3

Python 2 , 70 octets

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

Merci à @xnor d'avoir économisé 4 octets!

Essayez-le en ligne!


Il semble que les lignes ne sont pas alternées dans votre cas de test.
xnor

On dirait qu'un [_::3]serait plus court.
xnor

Oh shoot, quelque chose s'est mal passé là-bas. Suppression jusqu'à ce que je puisse le réparer.
Dennis

Cela corrige mon code sans ajouter d’octets. Merci! Voyons si je parviens à dédupliquer à nouveau ces lignes.
Dennis

Il y a 2**n%5%3quels cycles [1, 2, 1, 0, 1, 2, 1, 0, ...]. Cela pourrait-il être utile?
xnor

3

Python 2, 59 octets

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

Génère chaque ligne à a+b*3+apartir du caractère initial aet du caractère central b(calculé à partir de a). Le acycle de '-()(', alors que best '-'quand aest '-', et'=' autrement.


67 octets:

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

Génère chaque ligne à partir de son caractère extérieur aet de son caractère central en btant que a+b*3+a, puis en imprime des wcopies. Ces cycle via un zip.


3

JavaScript, 132 129 121 octets

-8 octets grâce à @ 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`')

Cela peut très probablement être joué au golf plus. Si vous avez une suggestion, veuillez la laisser dans les commentaires.


battez-moi de 1 octet .. :(
devRicher

@devRicher Mais je n'ai pas encore joué au golf. :)
ericw31415

@devRicher En fait, j'ai mal compté la nouvelle ligne par accident. Oups. Edit: je vous ai battu maintenant.
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 Cela ne fonctionne pas? Je peux utiliser votre tableau simplification cependant. :)
ericw31415

2

Lua, 132 octets

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

Tentative littérale longue et longue. Essayez-le ici .


2

JavaScript (ES6), 78

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

Tester

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

Langue GameMaker, 160 139 148 octets 133 octets

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

De plus, avant de le suggérer, GML exige que chaque partie de la boucle for ait une déclaration à l'intérieur de :(
Timtech

1

Gelée , 26 octets

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

C'est un lien dyadique (fonction) qui renvoie un tableau 2D.

Essayez-le en ligne!

Comment ça marche

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 octets

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

Appeler avec:

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

C'est bien de voir une autre réponse en C, mais cela peut être fait un peu plus court, voir ma réponse :)
orlp

0

C #, 160 octets

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

Version formatée:

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

Essayez-le en ligne! (pour une raison quelconque ce lien donne une erreur mais fonctionne quand même)


0

Dart, 125 117 octets

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

Essayez-le ici!


0

Dyalog APL, 55 octets

C'est la première fois que j'utilise Dyalog APL, alors je suis sûr que ce n'est pas la meilleure approche.

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

Explication: Il s’agit d’une approche assez simple. Pour une grille de bacon de N × M, je réalise une matrice N × (4M) des quatre chaînes suivantes, en répétant:

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

Ensuite, je concatène la chaîne -----au début.

Voici une explication rapide du code:

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

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

Essayez-le en ligne!


Ai-je besoin de mettre la partie d'entrée? Pour rendre compte du nombre d'octets?
sergiol

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.