다이아몬드 제작자 +


27

도전 :

n입력 으로 정수가 주어집니다 . 주어진 숫자의 2 배인 다이아몬드를 만드십시오 n.

입력 :

입력은 정수 n이고 2 <n ≤ 3000입니다.

출력 :

출력은 문자열이되고 다음 +n사용하여 표시 할 때 추가 라인 으로 구성된 다이아몬드 형태가 됩니다.+

예 :

D (3) :

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

D (5) :

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

D (6) : 

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

우승 기준 :

이것은 이므로 각 프로그래밍 언어에서 가장 짧은 바이트 단위의 코드가 승리합니다.


1
우리 n는 단항에 들어갈 수 있습니까?
Adám

3
... 사용 +으로 집계 마크 ?
Adám

1
어느 곳에 나 테스트 케이스를 추가 할 수 있습니까 n?
Shaggy

2
@Shaggy : 왜 안돼? 바로 추가하겠습니다. 감사합니다
Muhammad Salman

답변:


33

브레인 퍽 , 151 139 바이트

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

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

+을 탤리 마크로 사용하여 단항을 통해 입력을 받습니다 (포스터에서 허용 ). 내가 오래된 것보다 조금 길다고 생각했기 때문에 이것을 재 작업하기로 결정했습니다 (이것도 너무 깁니다!).

이전 버전 (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
당신은 단지 재미있는 것에 대한 내 투표를 받았습니다. 멋진 답변
Muhammad Salman

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

파이썬 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

2
그리고 2*i+1 == i+i+1 == i-(-i-1) == i-~i.
user202729

2
좋은 첫 번째 대답. 잘 했어.
ElPedro

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»사용하는 ÅÉ것은 또 하나입니다
Magic Octopus Urn

@MagicOctopusUrn : 내 초기 생각이 사용 ÅÉ되었지만 ·작동하도록 생각하지 않아 버렸습니다 .
Emigna

5

파이썬 3 , 79 78 바이트

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

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

골프 팁 팁 덕분에 .center함수 에 대해 알려주는 Python 답변이 있습니다. 문자열 목록을 반환합니다.


바닥 글이 바이트 수에 포함되지 않습니까? 이 경우 내 솔루션은 58 바이트입니다
maxb

@maxb 함수를 사용한다면 일반적으로 출력을 줄 목록으로 반환해도됩니다.
Jo King

@ JoKing : 흠 릴 다시 확인 하시겠습니까? 시도
무하마드 살만

@JoKing : 실패합니다.
무하마드 살만

1
@MuhammadSalman 1. n = 5, 2에 대한 반환 값에 대해 n = 3에 대한 내 함수를 테스트하고 있습니다. 2. 테스트에 후행 줄 바꿈이 있습니다. 3. 내 코드에는 각 줄에 후행 공백이 있습니다. 어쩌면 다음에 출력을 보아야 할 것입니다.
Jo King

4

R , 135110 96 바이트

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

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

마지막 컷으로 @JayCe.

rep기능과 같은 기존의 중위 오퍼레이터에 할당 <하거나 ^그 정도로 rep("+", n)동등 "<"("+", n)이용하여 기록 될 수 <있는 등의 중위 연산자 "+" < n및 단축 "+"<n.


1
25 바이트를 저장 하고 함수로 만드십시오.
JayCe

그래서 완전히 당신의 대답 :) 훌륭한 원래 코드!
JayCe

여기에 제거 할 수있는 공백이 있으며 바이트 "+"를 절약하면서 직접 저장하는 대신 직접 사용하십시오 z! 여기에서 시도
Giuseppe

1
주세페의 개선 @ngm @Giuseppe에 위로, 대신 <rep100 개 문자에서 받으실 수 있습니다! 여기
JayCe

3

, 15 바이트

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

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

G→→↙N+

+입력 높이와 폭의 거의 두 배인 역 삼각형을 인쇄합니다 .

반사 후 추가 라인에 놓 이도록 커서를 아래로 이동하십시오.

‖M↑

삼각형의 거울상을 만듭니다.

×⊕ⅈ+

입력을 다시 읽을 필요가 없도록 현재 열을 사용하여 추가 선을 그립니다.

추가 라인이 왼쪽을 가리 키도록 출력을 반영하십시오.




3

QB64, 82 79 바이트

INPUT n
?STRING$(n,43):FOR a=1TO 2*n:d=a-(a>n)*2*(n-a):?SPC(n-d);STRING$(2*d-1,43):NEXT

3
PPCG에 오신 것을 환영합니다! 이것은 훌륭한 첫 번째 제출물이며 QBasic이 이달의 언어 인 동안 게시 된 솔루션 목록에 추가했습니다 . 원하는 경우 간단한 설명을 추가하여이 답변을 개선 할 수 있습니다. 여기서 시간을 보내십시오!
DLosc

2

자바 스크립트 (Node.js를) , 106 (105) 바이트

  • 1 바이트 씩 줄인 @Kevin Cruijssen 덕분에
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`
`

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

________________________________________________

두 번째 접근

자바 스크립트 (Node.js를) , 105 (100) 99 98 바이트

  • 1 바이트 씩 줄인 @Kevin Cruijssen 덕분에
  • 1 바이트 씩 줄인 @ovs 덕분에
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

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에 오신 것을 환영합니다.
Muhammad Salman

작동하지 않는 것 같습니다. 또한 STDIN, 파일 또는 함수 인수에서 입력을 가져와야합니다. 사전 할당 된 변수를 입력으로 허용하지 않습니다.
mbomb007

@ 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.
Muhammad Salman

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

Ik는 이것이 이것보다 훨씬 작을 수 있음을 알고 있습니다.) Greetz mangas


PPCG에 오신 것을 환영합니다!
Muhammad Salman

코드를 실행하려고 할 때 오류가 발생하는 것 같습니다.
Muhammad Salman

이것을 별도의 편집으로 제안한 이유는 무엇입니까? 그것은 말도 안돼.
Nissa

@StephenLeppik : 죄송합니다. 아마 저의 실수 일 것입니다. Soory
Muhammad Salman



1

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

익명 함수는 10 진수로 입력을 받아 콘솔로 출력합니다.

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

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


익명의 기능? 그들은 나에게 전체 프로그램처럼 보인다 ...
Ørjan Johansen

@ ØrjanJohansen이 용어는 Yabasic의 경우 사용자 정의 sub루틴 으로 랩핑 되지 않았으며 라이브러리의 일부가 아니므로 내장 함수처럼 (예를 들어 Abs(x)) 이산 적으로 불릴 수 없습니다 . 원한다면 여기 에서 조금 더 읽을 수 있습니다 .
Taylor Scott

1

자바 스크립트 (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

자바 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

apt -R , 18 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]}

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

정수를 인수로 취하는 람다.

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