ダイヤモンドクリエーター+


27

チャレンジ:

n入力として整数を指定します。指定された数値の2倍のダイヤモンドを作成しますn

入力:

入力は整数でn、2 <n≤3000です。

出力:

出力は文字列になりますと、それは、以下からなるダイヤモンドの形になります+示す開始時に添加ラインでn使用して+

例:

D(3):

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

D(5):

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

D(6): 

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

受賞基準:

これはので、各プログラミング言語のバイト単位の最短コードが優先されます。


1
我々はかかる場合がありますn単項で?
アダム

3
集計マーク+として使用しますか?
アダム

1
n偶数のテストケースを追加できますか?
シャギー

2
@シャギー:確かにそうです。すぐに追加します。ありがとう
ムハンマドサルマン

回答:


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

Canvas、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の395の 94 75バイト

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

オンラインでお試しください!


ゴルフでの私の最初の試み、改善のための提案は大歓迎です。

編集:Kevin Cruijssenのおかげで1バイト節約

編集:バイト数に関する誤解を削除

編集:ジョーキングとuser202729のおかげでさらに多くのバイトを保存しました


5
PPCGへようこそ!:)
シャギー

1
また、Python 2に変更した場合は、print'\n'.join(['+'*n]+a+a[::-1])括弧なしで使用して、さらに2バイト節約できます。私からの+1。いい最初の答え。:)
ケビンクルーイッセン

1
送信は、完全なプログラム(ヘッダー/フッターにない)または関数(関数(またはのような匿名関数の場合は参照)を定義する必要があります)のいずれかlambdaです。
user202729

2
そして、2*i+1 == i+i+1 == i-(-i-1) == i-~i
user202729

2
素晴らしい最初の答え。よくやった。
エルペドロ

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:私の最初の考えは使用ÅÉでしたが·、それを機能させるために使用することを考えていなかったので、私はそれを捨てました。
エミグナ

5

Pythonの379の 78バイト

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

オンラインでお試しください!

このゴルフのヒントのおかげで、Python.center機能についての情報を提供してくれました。文字列のリストを返します。


フッターはバイトカウントに含まれていませんか?その場合、私のソリューションは58バイト
-maxb

あなたは関数を使用している場合@maxb、行のリストとして出力を返すために、一般的に大丈夫です
ジョー・キング

@JoKing:ハムはリルの再チェックをしたいですか?TRY
ムハンマドサルマン

@JoKing:失敗します。
ムハンマドサルマン

1
@MuhammadSalman 1. n = 5の戻り値に対して、n = 3の関数をテストしています。次回は出力をてください
Jo King

4

R135 110 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バイトが節約されます!ここで試してください
ジュゼッペ

1
@ngm @Giuseppeジュゼッペの改良に加えて、100文字未満を取得する代わり<repこちら
JayCe

3

、15バイト

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

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

G→→↙N+

+入力の高さと幅のほぼ2倍の逆三角形を印刷します。

カーソルを下に移動して、反射後の追加行に着地します。

‖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

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
慣例として、投稿内に複数のアプローチがある場合は、投稿の一番上に最短の投稿があるはずです。これは簡単に、挑戦を試みる彼らの言語を検索し、あなたの最高の答えに、彼らは比較方法を確認するために、他の人々のために可能に(かつ適切にスコアボード持って課題に取り組むことのスコアボードのために必要とされている)
テイラー・スコット


2

PowerShell、55バイト

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

オンラインでお試しください!


1
素晴らしい答えですが、キャラクターはの+代わりになりxます。また、Try it onlineを使用し、回答をもう少しコミュニティに優しいものにすることもできます!回答へのリンクを追加
Taylor Scott

1
Derp-私はそれを見なかったとは信じられません。ありがとう!
Torの

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へようこそ。
ムハンマドサルマン

これは機能していないようです。また、入力はSTDIN、ファイル、または関数の引数から取得する必要があります。事前に割り当てられた変数を入力として許可しません。
mbomb007

@ mbomb007すぐに承認できますか?
ヘンリックハンセン

@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:編集を提案しました。
ムハンマドサルマン

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:おっと、おそらく私の側の間違い。スーリー
ムハンマドサルマン



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バイト

入力を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ヨハンセン

@Ø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]}

オンラインでお試しください!

引数として整数を取るラムダ。

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.