행복한 베이컨의 날!


40

오늘은 베이컨 데이 입니다. 아마도 오늘 참가할 모자의 이름이 "Mmmm Bacon"인 이유 것입니다. 베이컨으로 만든 재미있는 2D 행렬로 베이컨의 날을 축하하는 더 좋은 방법! 1 x 1 베이컨 스트립은 다음과 같이 표시됩니다.

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

여기에 당신의 목표는 (튜플에서 두 좌표를 주어 x, y), 어디서 xy긍정적 인 정수 제로가 아닌, 당신은 어떤 형식 (목록, 배열, 문자열)에 베이컨과 수익을 만들 수 있습니다.

입력과 출력:

Input: (2, 1)

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

Input: (1, 2)

Output:

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

Input: (2, 2)

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

규칙 :

  • 두 번째 테스트 사례에서 볼 수 있듯이 베이컨 조각이 여러 개 쌓이면 -----베이컨 조각 위와 아래에 하나만 분리됩니다. 즉, 이와 같이 베이컨을 쌓아 올리는 것은 유효하지 않습니다.

    ----- 
    )===)
    (===(
    )===)
    -----
    ----- 
    )===)
    (===(
    )===)
    -----   
    
  • 표준 허점은 금지되어 있습니다

  • 위의 테스트 케이스 및 다음의 코드해야 일 : (4, 4), (1, 6), (5, 1), (2, 3),(3, 2)

  • 위의 테스트 사례를 테스트 할 수있는 통역사 제공

당첨 기준 :

최단 코드 승리! 모두에게 행복한 베이컨의 날!


이 대화는 채팅 으로 이동 되었습니다 .
Dennis

답변:


11

V , 28, 26 , 24 바이트

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

온라인으로 사용해보십시오!

설명:

À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
나는이 대답은 하나의 베이컨 이상에만 3 바이트 얼마나 사랑 : D
FlipTack

3
@FlipTack 줄 바꿈이 있습니다. 실제로 2 짧습니다. : P
DJMcMayhem

2
그것에 대해 잊었다! 와우, 출력의 빌딩 블록보다 짧은 대답. 이것은 데니스 스타일의 것들입니다.
FlipTack

8

TI 기본, 80 바이트

이것은 실제로 매우 천재적이었습니다 :)

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

또한 궁금한 사람은 TI-Basic에서 콜론과 개행 문자를 서로 바꿀 수 있으며 Input인수없이 사용 하면 기본적으로 Xand에 입력됩니다 Y.
Timtech

7

파이썬 2.7, 74 바이트

나는 이것이 더 골프를 칠 수 있다고 확신하지만 이것이 내가 생각 해낸 것입니다 (Python의 문자열 곱셈 기능은 편리합니다) :

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

여기에서보십시오 !

설명이없는 골퍼

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 바이트

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

명명되지 않은 함수는 양의 정수 인수를 취하고 개행 문자열을 반환합니다. 표준 Mathematica 접근법 : (mod 4) 선택기를 사용하여 문자열을 세로 방향으로 순환시킨 다음 단일 문자열로 축소하여 2d 문자열 배열을 만듭니다.


4

배치, 168 바이트

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

오히려 불행히도 나는 @echo %s:==-%두 번째 변수의 필요성을 제거하는 다른 방법으로는 쓸 수 없습니다 .


라인 1, 2, 3, 4를 연결하여 2 바이트를 절약하십시오 &...
Magoo

4

C, 91 89 바이트

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 바이트

암호:

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

설명:

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

CP-1252 인코딩을 사용합니다 . 온라인으로 사용해보십시오!


4

05AB1E , 32 30 바이트

Adnan 덕분에 2 바이트를 절약했습니다 .

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

온라인으로 사용해보십시오!

설명

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

당신은 대체 할 수 있습니다 ")===)"으로 …)==û:
아드 난

@Adnan : 아 물론! 감사!
Emigna

3

파이썬 2 , 70 바이트

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

4 바이트를 절약 한 @xnor에게 감사합니다!

온라인으로 사용해보십시오!


테스트 사례에서 선이 방향을 바꾸지 않는 것처럼 보입니다.
xnor

[_::3]더 짧은 것 같습니다 .
xnor

오 쏴, 뭔가 잘못 됐어 고칠 때까지 삭제합니다.
Dennis

바이트를 추가하지 않고 코드를 수정했습니다. 감사! 해당 행을 다시 중복 제거 할 수 있는지 봅시다.
Dennis

거기에 2**n%5%3있는 사이클 [1, 2, 1, 0, 1, 2, 1, 0, ...]. 유용할까요?
xnor

3

파이썬 2, 59 바이트

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

a+b*3+a초기 문자 a와 중심 문자 b(에서 계산 됨 a) 에서 와 같이 각 행을 생성합니다 . a통해의주기는 '-()('반면, b'-'a이다 '-', 그리고 '='그렇지.


67 바이트 :

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

그 외 캐릭터로부터 각 라인 생성 a및 문자를 중심 b으로 a+b*3+a하고 출력 w이 사본. 이 사이클은을 통해 순환합니다 zip.


3

자바 스크립트, 132 (129) 121 바이트

@ user2428118 덕분에 -8 바이트

(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`')

이것은 아마도 더 골프를 칠 수 있습니다. 의견이 있으시면 의견에 남겨주십시오.


1 바이트로 나를 이길 .. :(
devRicher

@devRicher 그러나 나는 아직 정확히 내 골프를하지 않았습니다. :)
ericw31415

@devRicher 사실은 실수로 줄 바꿈을 잘못 계산했습니다. 으악. 편집 : 나는 지금 당신을 이겼습니다.
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 작동하지 않습니까? 그래도 배열 단순화를 사용할 수 있습니다. :)
ericw31415

2

루아, 132 바이트

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

길고 리터럴 문자열 시도. 여기서 사용해보십시오 .


2

자바 스크립트 (ES6), 78

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

테스트

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

GameMaker 언어, 160 (139) 148 바이트 133 바이트

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

또한 제안하기 전에 GML은 for 루프의 각 부분에 다음과 같은 문장이 있어야합니다. (
Timtech

1

젤리 , 26 바이트

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

2D 배열을 반환하는 2 차원 링크 (함수)입니다.

온라인으로 사용해보십시오!

작동 원리

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 바이트

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

전화 :

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

C에서 다른 답변을 볼 수는 있지만 조금 더 짧게 할 수 있습니다. 내 답변을 참조하십시오 :)
orlp

0

C #, 160 바이트

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

형식화 된 버전 :

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

온라인으로 사용해보십시오! (어떤 이유로이 링크는 오류를 제공하지만 어쨌든 작동합니다)


0

다트 125 117 바이트

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

여기 사용해보십시오 !


0

Dyalog APL, 55 바이트

Dyalog APL을 사용한 것은 이번이 처음이므로 이것이 최선의 방법은 아니라고 확신합니다.

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

설명 : 이것은 NxM의 베이컨 그리드에 대해 매우 간단한 접근법으로, 다음 4 개의 문자열로 N × (4M) 행렬을 반복하여 만듭니다.

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

그런 다음 문자열 -----을 처음에 연결합니다 .

코드에 대한 간단한 설명은 다음과 같습니다.

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


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.