Glücklicher Speck-Tag!

40

Heute ist Bacon Day , weshalb der Hut für die heutige Teilnahme wahrscheinlich "Mmmm Bacon" heißt. Was gibt es Schöneres, als den Speck-Tag mit lustigen 2D-Matrizen aus Speck zu feiern! Ein 1: 1-Speckstreifen wird folgendermaßen dargestellt:

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

Ihr Ziel ist es, hier zwei Koordinaten in einem Tupel ( x, y) anzugeben , wobei xund yungleich Null positive ganze Zahlen sind. Sie müssen den Speck erstellen und in einem bestimmten Format (Liste, Array, Zeichenfolge) zurückgeben.

Ein- und Ausgang:

Input: (2, 1)

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

Input: (1, 2)

Output:

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

Input: (2, 2)

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

Regeln:

  • Wie Sie im zweiten Testfall sehen können, wird, wenn mehrere Speckstücke aufeinander gestapelt sind, nur eines -----mit jedem Stück Speck darüber und / oder darunter getrennt. Das bedeutet, dass das Stapeln von Speck wie folgt ungültig ist:

    ----- 
    )===)
    (===(
    )===)
    -----
    ----- 
    )===)
    (===(
    )===)
    -----   
    
  • Standardlücken sind verboten

  • Der Code muss Arbeit für die oben genannten Testfällen und der folgenden: (4, 4), (1, 6), (5, 1), (2, 3),(3, 2)

  • Stellen Sie einen Dolmetscher zur Verfügung, mit dem die oben genannten Testfälle getestet werden können

Gewinnkriterien:

Kürzester Code gewinnt! Wir wünschen allen einen schönen Speck-Tag!

Anthony Pham
quelle
Diese Unterhaltung wurde in den Chat verschoben .
Dennis

Antworten:

11

V , 28, 26 , 24 Bytes

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

Probieren Sie es online!

Erläuterung:

À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
quelle
3
Ich liebe es, wie diese Antwort nur 3 Bytes länger ist als ein einzelner Speck: D
FlipTack
3
@FlipTack Es gibt Newlines. Es ist eigentlich 2 kürzer. : P
DJMcMayhem
2
Hab's vergessen! Wow, eine Antwort, die kürzer ist als die Bausteine ​​der Ausgabe. Dies ist ein paar Sachen im Stil von Dennis.
FlipTack
8

TI-Basic, 80 Bytes

Dieser war eigentlich ziemlich 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
quelle
Für alle, die sich fragen, sind in TI-Basic der Doppelpunkt und der Zeilenumbruch austauschbar, und die Verwendung Inputohne Argumente wird standardmäßig in Xund eingegeben Y.
Timtech
7

Python 2.7, 74 Bytes

Ich bin mir sicher, dass dies noch ein bisschen mehr Golf sein könnte, aber das habe ich mir ausgedacht (Pythons Saitenmultiplikationsfunktion ist auf jeden Fall nützlich):

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

Probieren Sie es hier aus !

Ungolfed mit Erklärung:

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

Mathematica, 74 Bytes

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

Unbenannte Funktion, die zwei positive Ganzzahlargumente verwendet und eine Zeichenfolge mit Zeilenumbrüchen zurückgibt. Ein Mathematica-Standardansatz: Erstellen Sie ein 2d-Array von Zeichenfolgen mit einem (Mod 4) -Wähler, um die Zeichenfolgen in vertikaler Richtung zu wechseln, und reduzieren Sie sie dann zu einer einzelnen Zeichenfolge.

Greg Martin
quelle
4

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

Eher kann ich leider nicht @echo %s:==-%anders schreiben , das würde die Notwendigkeit für die zweite Variable beseitigen.

Neil
quelle
Sparen Sie 2 Bytes, indem Sie die Zeilen 1,2 und 3,4 mit &...
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
quelle
4

05AB1E , 25 Bytes

Code:

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

Erläuterung:

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

Verwendet die CP-1252- Codierung. Probieren Sie es online!

Adnan
quelle
4

05AB1E , 32 30 Bytes

2 Bytes gespart dank Adnan .

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

Probieren Sie es online!

Erläuterung

'-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
quelle
Sie können ")===)"durch …)==û:) ersetzen
Adnan
@Adnan: Ah natürlich! Vielen Dank!
Emigna
3

Python 2 , 70 Bytes

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

Vielen Dank an @xnor für das Speichern von 4 Bytes!

Probieren Sie es online!

Dennis
quelle
Es sieht so aus, als würden die Linien in Ihrem Testfall nicht die Richtung wechseln.
xnor
Es sieht aus wie ein [_::3]kürzer wäre.
31.
Oh, schieß, da ist etwas schief gelaufen. Löschen, bis ich es reparieren kann.
Dennis
Das hat meinen Code repariert, ohne irgendwelche Bytes hinzuzufügen. Vielen Dank! Mal sehen, ob es mir gelingt, diese Zeilen erneut zu deduplizieren.
Dennis
Es gibt 2**n%5%3welche Zyklen [1, 2, 1, 0, 1, 2, 1, 0, ...]. Könnte das nützlich sein?
xnor
3

Python 2, 59 Bytes

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

Erzeugt jede Zeile a+b*3+aab dem Anfangszeichen aund dem mittleren Zeichen b(aus dem berechnet wird a). Der aZyklus durch '-()(', während bist, '-'wann aist '-', und '='sonst.


67 Bytes:

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

Erzeugt jede Zeile von seinen äußeren Charakter aund Mittenzeichen bwie a+b*3+a, druckt dann wKopien davon. Diese zirkulieren über a zip.

xnor
quelle
3

JavaScript, 132 129 121 Byte

-8 Bytes dank @ 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`')

Hier kann man mit ziemlicher Wahrscheinlichkeit mehr golfen. Wenn Sie einen Vorschlag haben, lassen Sie ihn bitte in den Kommentaren.

ericw31415
quelle
schlagen Sie mich um 1 Byte .. :(
devRicher
@devRicher Meins habe ich aber noch nicht genau golfen. :)
ericw31415
@devRicher Eigentlich habe ich versehentlich den Zeilenvorschub falsch gezählt. Hoppla. Edit: Ich habe dich jetzt geschlagen.
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 Funktioniert das nicht? Ich kann jedoch Ihre Array-Vereinfachung verwenden. :)
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))

Langer, wörtlicher String-Versuch. Probieren Sie es hier aus .

devRicher
quelle
2

JavaScript (ES6), 78

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

Prüfung

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
quelle
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
quelle
Bevor Sie es vorschlagen, verlangt GML, dass jeder Teil der for-Schleife eine Anweisung enthält :(
Timtech
1

Gelee , 26 Bytes

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

Dies ist eine dyadische Verknüpfung (Funktion), die ein 2D-Array zurückgibt.

Probieren Sie es online!

Wie es funktioniert

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

Rufen Sie an mit:

int main()
{
    b(2,3);
}
Steadybox
quelle
Schön, eine andere Antwort in C zu sehen, aber es kann viel kürzer gemacht werden, siehe meine Antwort :)
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;};

Formatierte Version:

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

Probieren Sie es online! (Aus irgendeinem Grund gibt dieser Link einen Fehler aus, funktioniert aber trotzdem)

DerLethalCoder
quelle
0

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

Probieren Sie es hier aus!

Dwayne Slater
quelle
0

Dyalog APL, 55 Bytes

Ich benutze Dyalog APL zum ersten Mal, daher bin ich mir sicher, dass dies nicht der beste Ansatz ist.

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

Erläuterung: Dies ist ein recht einfacher Ansatz. Für ein Speckgitter von N × M erstelle ich eine N × (4M) -Matrix aus den folgenden vier Zeichenfolgen, die sich wiederholen:

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

Dann verkette ich den String -----an den Anfang.

Hier ist eine kurze Erklärung des Codes:

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

Tcl , 91 Bytes

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

Probieren Sie es online!

Sergiol
quelle
Benötige ich den put the input Teil? Um die Byteanzahl zu berücksichtigen?
Sergiol