培根节快乐!


40

今天是培根日,这可能就是为什么今天参加比赛的帽子的名称是“ Mmmm Bacon”。还有什么更好的方式来庆祝用培根制成的充满乐趣的二维矩阵来庆祝培根的一天!一条1根培根条表示如下:

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

您的目标是在元组(xy)中获得两个坐标,其中xy是非零正整数,您将创建培根并以某种格式(列表,数组,字符串)返回。

输入和输出:

Input: (2, 1)

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

Input: (1, 2)

Output:

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

Input: (2, 2)

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

规则:

  • 从第二个测试用例中可以看到,如果将多个培根堆叠在一起,则-----每根培根上方和/或下方只有一个分开。这意味着像这样堆叠培根是无效的:

    ----- 
    )===)
    (===(
    )===)
    -----
    ----- 
    )===)
    (===(
    )===)
    -----   
    
  • 禁止出现标准漏洞

  • 对于上述测试用例和下面的代码必须工作:(4, 4)(1, 6)(5, 1)(2, 3)(3, 2)

  • 提供可以测试上述测试用例的解释器

获奖标准:

最短的代码胜出!祝大家培根快乐!


此对话已转移至聊天
丹尼斯

Answers:


11

V28,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 16/12/30

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不带参数使用默认情况下将输入输入到X和中Y
Timtech '16

7

Python 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)选择器构建二维字符串数组,以在垂直方向上循环字符串,然后将其折叠为单个字符串。


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 2016年

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

05AB1E32 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

@Adnan:当然可以!谢谢!
Emigna '16

3

Python 2,70个字节

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

感谢@xnor节省了4个字节!

在线尝试!


看起来这些行在测试用例中并没有交替显示方向。
xnor

看起来[_::3]会更短。
xnor

哦,开枪,那里出了点问题。删除,直到我可以修复它。
丹尼斯,

这固定了我的代码,而没有添加任何字节。谢谢!让我们看看我是否能够再次对这些行进行重复数据删除。
丹尼斯,

2**n%5%3哪些循环[1, 2, 1, 0, 1, 2, 1, 0, ...]。有用吗?
xnor

3

Python 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和中心字符ba+b*3+a,然后打印w的这个副本。这些通过一个循环zip


3

JavaScript中,132个 129 121字节

-8个字节,感谢@ 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`')

这很可能会打更多。如果您有任何建议,请在评论中保留。


击败我一个字节..
::

@devRicher但是我还没有完全打高尔夫球。:)
ericw31415 '16

@devRicher实际上我不小心误了换行符。哎呀 编辑:我现在打败你了。
ericw31415 '16

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

@ user2428118这行不通吗?我可以使用简化的数组。:)
ericw31415 '16

2

Lua,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

JavaScript(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,2016年

1

果冻,26个字节

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

这是一个返回二维数组的二元链接(函数)。

在线尝试!

这个怎么运作

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

Dyalog APL,55个字节

这是我第一次使用Dyalog APL,因此我确定这不是最佳方法。

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

说明:这是一个非常简单的方法,对于N×M的培根网格,我重复以下四个字符串,制作一个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 (⊂)


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.