钻石创作者+


27

挑战:

给定一个整数n作为输入。创建一个等于给定数字2倍的钻石n

输入:

输入为整数n且2 <n≤3000。

输出:

输出将是一个字符串,并且将以菱形的形式出现+,在开始时带有加法线,显示n使用+

例子 :

D(3):

+++
  +
 +++
+++++
+++++
 +++
  +

D(5):

+++++
    +
   +++
  +++++
 +++++++
+++++++++
+++++++++
 +++++++
  +++++
   +++
    +

D(6): 

++++++
     +
    +++
   +++++
  +++++++
 +++++++++
+++++++++++
+++++++++++
 +++++++++
  +++++++
   +++++
    +++
     +

获奖标准:

这是因此每种编程语言的最短代码以字节为单位。


1
我们可以接受n一元吗?
亚当

3
+用作计数标记
亚当

1
您可以在哪里添加测试用例n吗?
Shaggy

2
@Shaggy:为什么不呢?我将立即添加。谢谢
穆罕默德·萨尔曼

Answers:


33

brainfuck151个 139字节

,[.[<]<+[>>]++++[-<++++++++>],]<[<]<<<++++++++++.>>[[>]>[-<+>]>[-<+>]>>[.>>]<<[<]<<.<<[..<<]<.>>-]>[[>]>[.>>]<<[<<]>.>>[..>>]<<,<[<]<<.>>>]

在线尝试!

通过一元输入,以+s作为提示标记(海报允许)。决定重做此操作,因为我认为旧的要长一些(尽管它也可以!)。

旧版本(151字节):

>--[>+<++++++]<[->+>.<<]++++++++[-<+<++++>>]<++>>[<<.>>-[-<+<<.>>>]<[->+<]>>>+[-<.>>+<]>+[-<+>]<<<]>>[<<<<.>>[-<+<<.>>>]<[->+<]>+>>-[-<.>>+<]>-[-<+>]<]

在线尝试!

将输入作为起始单元格。我想不出一种方法来利用前半部分来帮助下半部分,因此每个人都有一个循环。

怎么运行的:

 >--[>+<++++++]  Create 43 ('+') two space to the left of n
 <[->+>.<<]      Print n '+'s while preserving n
 ++++++++[-<+<++++>>]<++  Create 32 (' ') and 10 ('\n')
                         Tape: 32 10 0 n 43 t
 >>
 [ Loop over the first half of the diamond
   <<.>>         Print a newline
   -[-<+<<.>>>]  Decrement n and print n spaces
   <[->+<]       Restore n
   >>>+[-<.>>+<] Increment t and print t '+'s
   >+[-<+>]<<<   Increment t again and restore it
]>>
[ Loop over the second half
  <<<<.>>        Print a newline
  [-<+<<.>>>]<   Print n spaces
  [->+<]>+       Restore and increment n
  >>-[-<.>>+<]   Decrement t and print t '+'s
  >-[-<+>]<      Decrement t again and restore it
]

只是为了好玩:

+++++++++
        >
       --[
      >+<++
     ++++]<[
    ->+>.<<]+
   +++++++[-<+
  <++++>>]<++>>
 [<<.>>-[-<+<<.>
>>]<[->+<]>>>+[-<
.>>+<]>+[-<+>]<<<
 ]>>[<<<<.>>[-<+
  <<.>>>]<[->+<
   ]>+>>-[-<.>
    >+<]>-[-<
     +>]<]++
      +++++
       +++
        +

在线尝试!


2
您因有趣的事而获得我的投票。很酷的答案
穆罕默德·萨尔曼

15

画布,9 字节

+×O{+×]±╪

在这里尝试!

说明(一些字符已替换为看起来是空格):

+×O{+×]±╪
+×         repeat "+" input times
  O        output that
   {  ]    map over 1..input
    +×       repeat "+" that many times
       ±   interpret the array as a 2D string, and reverse it
        ╪  quad-palindromize with 1 horizontal overlap and 0 vertical overlap

12

Python 3中95 94 75个字节

def f(n):a=[' '*(n+~i)+'+'*(i-~i)for i in range(n)];return['+'*n]+a+a[::-1]

在线尝试!


我第一次尝试打高尔夫球,欢迎提出任何改进建议。

编辑:感谢凯文·克鲁伊森(Kevin Cruijssen)保存了1个字节

编辑:消除了有关字节数的误解

编辑:由于Jo King和user202729而保存了更多的字节


5
欢迎来到PPCG!:)
Shaggy

1
另外,如果您更改为Python 2,print'\n'.join(['+'*n]+a+a[::-1])则可以不带括号使用以节省2个字节。从我这里+1。不错的第一答案。:)
Kevin Cruijssen

1
提交可以是完整程序(标头/页脚中没有任何内容)或函数(必须定义函数(或引用,如使用匿名函数,则为lambda))。
user202729 '18

2
并且2*i+1 == i+i+1 == i-(-i-1) == i-~i
user202729 '18

2
很棒的第一答案。做得好。
ElPedro '18

8

05AB1E,14个字节

'+×sL·<'+×∊.c»

在线尝试!

说明

'+×              # push "+" repeated <input> times
   sL            # push range [1 ... input]
     ·<          # multiply each element by 2 and decrement (x*2-1)
       '+×       # replace each number with the corresponding number of "+"'s
          ∊      # mirror vertically
           .c    # center
             »   # join with the "+"-row created at the start

同样是14个字节: L‚˜'+×ćs.∞∊.c»


1
'+×s·ÅÉ'+×∊.C»使用的ÅÉ是另一个
魔术章鱼缸

@MagicOctopusUrn:我最初的想法是使用,ÅÉ但是我放弃了它,因为我没有想到使用·它来使其工作。
Emigna '18

5

Python 3中79 78个字节

def f(n):x=[('++'*i+'+').center(n*2)for i in range(n)];return[n*'+']+x+x[::-1]

在线尝试!

感谢高尔夫技巧,Python的答案向我介绍了该.center功能。返回字符串列表。


字节数中不包含页脚吗?在这种情况下,我的解决方案是58个字节
maxb,

@maxb如果使用函数,通常可以将输出作为行列表返回
Jo King

@JoKing:嗡嗡声可能会想要重新检查吗?TRY
穆罕默德·萨尔曼

@JoKing:失败。
穆罕默德·萨勒曼

1
@MuhammadSalman 1.您正在针对n = 3的返回值测试我的函数,其中n = 3,2.您在测试中有尾随换行符,并且3.我的代码在每行中都有尾随空格。也许您下次应该只看一下输出
Jo King

4

R135110 96字节

function(n){cat("+"<n,"
",sep="")
for(i in c(1:n,n:1))cat(" "<n-i,"+"<2*i-1,"
",sep="")}
"<"=rep

在线尝试!

@JayCe进入决赛。

rep函数被分配给现有的infix运算符,例如<或,^因此rep("+", n)等价于in 并可以缩写为的"<"("+", n)形式写出。<"+" < n"+"<n


1
保存25个字节并使其起作用。
JayCe '18年

因此,您的答案完全是:)很棒的原始代码!
JayCe '18年

这里有些空白可以删除,"+"直接使用而不是另存为会z节省一些字节!在这里尝试
朱塞佩

1
@ngm @Giuseppe在顶部的朱塞佩的提高,替代<rep在100个字符搞定!在这里
-JayCe

3

木炭,15字节

G→→↙N+↓‖M↑×⊕ⅈ+‖

在线尝试!链接是详细版本的代码。说明:

G→→↙N+

打印一个倒数为+s的倒三角形,该倒三角形的高度为输入高度的两倍,宽度几乎为两倍。

向下移动光标,使其在反射后降落在其他行上。

‖M↑

制作三角形的镜像。

×⊕ⅈ+

使用当前列绘制另一条线,以避免不得不再次读取输入。

反映输出,以使其他行指向左侧。





2

的JavaScript(Node.js的)106个 105字节

  • 感谢@Kevin Cruijssen减少了1个字节
n=>[...Array(n*2+1)].map((_,i)=>" ".repeat(i?i>n?i+~n:n-i:0)+"+".repeat(i?i>n?4*n-2*i+1:i*2-1:n)).join`
`

在线尝试!

________________________________________________

第二种方法

的JavaScript(Node.js的)105 100 99 98个字节

  • 感谢@Kevin Cruijssen减少了1个字节
  • 感谢@ovs减少了1个字节
n=>[X="+"[r="repeat"](n),...x=[...X].map((_,i)=>" "[r](n+~i)+"+"[r](i-~i)),...x.reverse()].join`
`

在线尝试!


2
按照惯例,如果您采用多种方法,则应该在帖子顶部保留最短的提交内容。这使其他人可以轻松地尝试挑战,搜索他们的语言并查看他们与最佳答案的比较(这对于计分板在具有计分板的挑战中正常运行是必要的)
Taylor Scott



2

J,29个字节

'+'(,]\(}:@|."1,.])@,]\.)@$~]

在线尝试!

说明:

'+'$~] - generates the line at the start, which is a seed for the diamond:

   '+'$~]  3
+++

]\,]\. - finds the prefixes (]\) and suffixes (]\.) of the line, making "half" the diamond 

   '+'(]\,]\.)@$~] 3
+  
++ 
+++
+++
++ 
+  

}:@|."1,.] - makes the other "half" of the diamond by reversing each line (|."1)
and dropping its last '+' (}:) and stitches the first half to it (,.])

 '+'(]\(}:@|."1,.])@,]\.)@$~] 3
  +  
 +++ 
+++++
+++++
 +++ 
  +  

, - prepends the initial line to the diamond

'+'(,]\(}:@|."1,.])@,]\.)@$~] 3
+++  
  +  
 +++ 
+++++
+++++
 +++ 
  +  



1

PHP,103字节

for(;$i++<$argn;$s.="
".str_pad(str_pad("",$i*2-1,"+",2),$argn*2-1," ",2))echo"+";echo"$s
",strrev($s);

使用-nR作为管道运行或在线尝试


1

PowerShell,58字节

param($n)'+'*$n;1..$n+$n..1|%{" "*($n-$_)+"+"*$_+"+"*--$_}

在线尝试!

只需进行向上和向下循环,每次迭代都会输出适当数量的空格,然后输出适当数量的加号。哼


1

F#(单声道),123字节

let d n=
 let t n=String('+',n)
 let s n=t(n*2-1)
 [1..n]@[n.. -1..1]|>Seq.fold(fun a x->a+sprintf"\n%*s"(n+x-1)(s x))(t n)

在线尝试!


4
欢迎来到PPCG。
穆罕默德·萨勒曼

这似乎不起作用。另外,输入应从STDIN,文件或函数参数中获取。我们不允许预分配的变量作为输入。
mbomb007 '18

@ mbomb007您现在可以批准吗?
Henrik Hansen

@HenrikHansen:为什么会出现错误?/home/runner/code.fs(2,10): error FS0039: The value or constructor 'String' is not defined. Cannot open assembly 'code.exe': No such file or directory.
穆罕默德·萨勒曼

1
@HenrikHansen:我建议进行编辑。看看
Muhammad Salman

1

PHP 102字节

for($r=str_pad;$i++<$a;$s.="\n".$r($r("",$i*2-1,"+",2),$a*2-1," ",2))echo"+";echo"$s\n",strrev($s);

我知道它可能比这个小得多;)Greetz mangas


欢迎来到PPCG!
穆罕默德·萨勒曼

当我尝试运行它时,您的代码似乎产生了错误?
穆罕默德·萨勒曼

您为什么建议将此作为单独的编辑?这没有道理。
妮莎

@StephenLeppik:糟糕,我可能是一个错误。Soory
Muhammad Salman



1

Python 3,98字节

def d(s):print("+"*s);t=[("+"*i).center(2*s-1)for i in range(1,2*s,2)];print("\n".join(t+t[::-1]))

在线尝试!

可读版本:

def diamond(size):
    print(size * "+")
    top = [("+" * i).center(2*size - 1) for i in range(1, 2*size, 2)]
    print("\n".join(top))
    print("\n".join(reversed(top)))

更好:)我格式化了您的条目,使其看起来像其他答案。您想访问tio.run,它会为您格式化答案,并使其他人轻松重现您的代码。
JayCe

1

Yabasic,102字节

匿名函数,将输入作为带有+计数标记的一元数输入并输出到控制台。

Input""s$
n=Len(s$)
?s$
For i=-n To n
j=Abs(i)
If i For k=2To j?" ";Next:?Mid$(s$+s$,1,2*(n-j)+1)
Next

在线尝试!

替代版本,117字节

匿名函数答案,将输入作为十进制整数并输出到控制台。

Input""n
For i=1To n s$=s$+"+"Next
?s$
For i=-n To n
j=Abs(i)
If i For k=2To j?" ";Next:?Mid$(s$+s$,1,2*(n-j)+1)
Next

在线尝试!


匿名函数?它们看起来像整个程序来我...
与Orjan约翰森

@ØrjanJohansen这个术语,对于Yabasic而言,仅意味着它们没有被包装为用户定义的sub例程,也不属于任何库,因此不能像内置函数那样被离散地调用(例如Abs(x))。如果愿意,您可以在这里阅读更多有关此的内容。
泰勒·斯科特

1

JavaScript(Node.js),183字节

a=x=>{g='\n';r=(m,n)=>String.prototype.repeat.call(m,n);k='+';l=r(k,x)+g;c=d='';for(i=0;i++<x;c+=r(' ',x-i)+r(k,i)+r(k,i-1)+g,d+=r(' ',i-1)+r(k,x+1-i)+r(k,x-i)+g);console.log(l+c+d);}

在线尝试!

感谢@JoKing更新了我的答案


@JoKing对不起,我的错,我只是更新我的答案,谢谢我的朋友。
NTCG

@JoKing,谢谢您的时间
-NTCG,

1

APL(Dyalog Unicode),25 字节SBCS

⍪∘⊖⍨c,⍨⌽1↓[2]c←↑,\⎕←⎕/'+'

在线尝试!

说明:

⍪∘⊖⍨c,⍨⌽1↓[2]c←↑,\⎕←⎕/'+'   Full program
                       ⎕/'+'   Get input from user as N, replicate '+' N times
                    ⎕←         Print above string
                  ,\            Find all prefixes of above string, e.g. '+','++','+++' etc.
                               Mix the above into a matrix - right-pads with spaces as needed
               c               Assign above matrix to 'c' for 'corner'
          1↓[2]                 Drop the first column
                              Reverse the resulting matrix
     c,⍨                       Append 'c' to above - this gives us the top half
⍪∘⊖⍨                          Take the above, flip it about the horizontal axis,
                               and append it to itself

1↓[2]- > 0 1↓甚至更好:c,⍨⌽1↓[2]c←- >⍉(⊖⍪1↓⊢)⍉
NGN

0

Java 8,159字节

n->{String r="",N="\n",t=r;for(int i=n,j,k;i-->0;t+="+",r+=i>0?N:"")for(j=-n;++j<n;r+=k<n?"+":" ")k=i+(j<0?-j:j);return t+N+r+N+new StringBuffer(r).reverse();}

绝对可以打更多的高尔夫球,但这是一个开始。

说明:

在线尝试。

n->{                    // Method with integer parameter and String return-type
  String r="",          //  Result-String, starting empty
         N="\n",        //  Temp-String for new-line to save bytes
         t=r;           //  First-line String, starting empty
  for(int i=n,j,k;i-->0 //  Loop `i` in the range (n,0]
      ;                 //    After every iteration:
       t+="+",          //     Append a "+" to the first-line String
       r+=i>0?N:"")     //     Add a new-line if this isn't the last iteration of `i` yet
    for(j=-n;++j<n;     //   Inner loop `j` in the range (-n,n]
        r+=             //     After every iteration, append the result with:
           k<n?         //      If `k` is smaller than the input `n`:
            "+"         //       Append a "+"
           :            //      Else:
            " ")        //       Append a space instead
      k=i+(j<0?-j:j);   //    Set `k` to `i` plus the absolute value of `j`
  return t+N            //  Return the first-line String plus new-line,
         +r+N           //   plus the result-String plus new-line,
         +new StringBuffer(r).reverse();}
                        //   plus the result-String again reversed

0

Japt -R18 16字节

õ_ç+ êÃê1 û i+pU

试试吧


说明

                     :Implicit input of integer U
õ                    :Range [1,U]
 _    Ã              :Pass each Z through a function
  ç+                 :  Repeat "+" Z times
     ê               :  Palindromise
       ê1            :Mirror
          û          :Centre pad each element to the length of the longest element
            i        :Prepend
             +pU     :  "+" repeated U times
                     :Implicitly join with newlines and output

0

附件,62字节

{"+"*_+lf+UnGrid!Bounce=>"+ "[Table[`>,1:_]|>~`'#Reverse|>@N]}

在线尝试!

一个以整数为参数的lambda。

A> n := 3
3
A> Table[`>,1:n]
 false false false
  true false false
  true  true false
A> Table[`>,1:n]|>~`'#Reverse
  true  true false
  true false false
 false false false
 false false false
  true false false
  true  true false
A> Table[`>,1:n]|>~`'#Reverse|>@N
 1 1 0
 1 0 0
 0 0 0
 0 0 0
 1 0 0
 1 1 0
A> "+ "[Table[`>,1:n]|>~`'#Reverse|>@N]
 " " " " "+"
 " " "+" "+"
 "+" "+" "+"
 "+" "+" "+"
 " " "+" "+"
 " " " " "+"
A> Bounce=>"+ "[Table[`>,1:n]|>~`'#Reverse|>@N]
 " " " " "+" " " " "
 " " "+" "+" "+" " "
 "+" "+" "+" "+" "+"
 "+" "+" "+" "+" "+"
 " " "+" "+" "+" " "
 " " " " "+" " " " "
A> UnGrid!Bounce=>"+ "[Table[`>,1:n]|>~`'#Reverse|>@N]
"  +  \n +++ \n+++++\n+++++\n +++ \n  +  "
A> lf+UnGrid!Bounce=>"+ "[Table[`>,1:n]|>~`'#Reverse|>@N]
"\n  +  \n +++ \n+++++\n+++++\n +++ \n  +  "
A> "+"*n+lf+UnGrid!Bounce=>"+ "[Table[`>,1:n]|>~`'#Reverse|>@N]
"+++\n  +  \n +++ \n+++++\n+++++\n +++ \n  +  "
A> Print[_]
+++
  +
 +++
+++++
+++++
 +++
  +
["+++\n  +  \n +++ \n+++++\n+++++\n +++ \n  +  "]
A>

0

T-SQL,152个字节

根据我们的IO规则,输入是通过预先存在的带有整数字段n的t进行的。

DECLARE @n INT,@ INT=1,@k INT=1SELECT @n=n FROM t
PRINT REPLICATE('+',@n)a:PRINT SPACE(@n-@)+REPLICATE('+',2*@-1)IF @=@n SET @k-=1SET @+=@k IF @>0GOTO a

手动计数循环,不是非常“类似于SQL”。格式:

DECLARE @n INT,@ INT=1,@k INT=1
SELECT @n=n FROM t
PRINT REPLICATE('+',@n)
a:
    PRINT SPACE(@n-@)+REPLICATE('+',2*@-1)
    IF @=@n SET @k-=1
    SET @+=@k
IF @>0 GOTO a
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.