簡単なバイナリ三角形


18

入力として正の整数を指定すると、次の三角形のn>=1最初のn行が出力されます。

                  1
                1 0 1
              0 0 1 0 0
            1 1 1 0 1 1 1
          0 0 0 0 1 0 0 0 0
        1 1 1 1 1 0 1 1 1 1 1
      0 0 0 0 0 0 1 0 0 0 0 0 0
    1 1 1 1 1 1 1 0 1 1 1 1 1 1 1
  0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1

行は、中央の列が反転することを除いて、すべてゼロとすべて1の間で交互になります。

テストケース

  • 入力3

  • 出力

        1
      1 0 1
    0 0 1 0 0
    
  • 入力10

  • 出力

                      1
                    1 0 1
                  0 0 1 0 0
                1 1 1 0 1 1 1
              0 0 0 0 1 0 0 0 0
            1 1 1 1 1 0 1 1 1 1 1
          0 0 0 0 0 0 1 0 0 0 0 0 0
        1 1 1 1 1 1 1 0 1 1 1 1 1 1 1
      0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
    1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
    

あなたのコードはすべてのために動作する必要がありますn<100。これはなので、バイト単位の最短コードが勝ちです!

末尾のスペース/改行および先頭の改行は許可されます!


余分な空白は許容されますか?もしそうであれば、どの行(先頭行/先頭/末尾/トレーニング行)?
ジョナサンアラン

1
数字のリストのリストを返すことはできますか?
エリックアウトゴルファー

8
@EriktheOutgolferリストのリストは素晴らしいです!

1
リストのリストに問題はないので、中央揃えは必要ないと思いますか?
ルイスメンドー

1
それはあなたの挑戦ですが、私の意見ではあなたはそれがどんな意味がありませんリストのリストの書式を厳格にすることを可能にするのに十分な柔軟性ある場合
ルイスMendo

回答:


7

ゼリー、7バイト

Ṭ=Ḃµ€ŒB

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

Erik the Outgolferのおかげで-1バイト

説明

Ṭ=Ḃµ€ŒB  Main link
    €    For each element in (implicit range of) the input:
Ṭ        List 1s and 0s with 1s in the indices in the left argument (generates `[0, 0, ..., 1]`)
 =Ḃ      Is this equal to `(z % 2)` where `z` is the range number? (Every other row is flipped)
     ŒB  Reflect each row

あなたは置き換えることができます¶Çµは-1。
エリックアウトゴルファー

@EriktheOutgolferああ、ありがとう!
ハイパーニュートリノ


3

ゼリー、8バイト

⁼€=ḂŒḄµ€

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

-2 HyperNeutrinoに感謝します


ああ、真剣に... 2番目の忍者を分割:p
ジョナサンアラン

それは本当にルール変更だった@JonathanAllan ...ところで私は、これは...あまりにもgolfableだと思う
エリックOutgolfer

ええ、私はその後、15バイトのグリッド10のバイトリスト...持っていた
ジョナサン・アラン

1
@JonathanAllanハイパーは良い...中である
エリックOutgolfer

¬^Ḃちょうど編集である=Ḃため、なることNOT (XOR (A B))IFF (A B) できます私は私がo_O lolを持っていると思ったよりも多くのゴルフをした
-HyperNeutrino

3

Python 2、50バイト

lambda n:[[i%2]*i+[~i%2]+i*[i%2]for i in range(n)]

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

Python 2、53バイト

lambda n:[(([i%2]*i+[~i%2])*2)[:-1]for i in range(n)]

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

Python 2、67バイト

lambda n:[[[i%2,~i%2][j==i]for j in range(2*i+1)]for i in range(n)]

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


2
ハハ、今は縛られています:)
Xcoder氏

65バイト(1長いため)
ミスターXcoder

3

Japt12 9バイト

õÈÇ¥Y^uÃê

オンラインでテストしてください!

Jellyと比べるとかなり悲しいですが、Japtにはそのようなものがありません。

説明

 õÈ   Ç   ¥ Y^ uà ê
UõXY{XoZ{Z==Y^Yu} ê}      Ungolfed
                          Implicit: U = input number
Uõ                        Create the range [1..U].    [1, 2, 3, 4]
  XY{              }      Map each item X and 0-index Y in this to
     Xo                     Create the range [0..X).  [[0], [0, 1], [0, 1, 2], [0, 1, 2, 3]]
       Z{      }            Map each item Z in this to
         Z==Y                 Z is equal to Y         [[1], [0, 1], [0, 0, 1], [0, 0, 0, 1]]
             ^Yu              XORed with Y % 2.       [[1], [1, 0], [0, 0, 1], [1, 1, 1, 0]]
                  ê         Bounce.                   [[1],
                                                       [1, 0, 1],
                                                       [0, 0, 1, 0, 0],
                                                       [1, 1, 1, 0, 1, 1, 1]]
                          Implicit: output result of last expression

組み込み用のHooray:P:P:P
HyperNeutrino

やあ、誰かがチェーンPython-Jelly-Python-Jellyを壊した!
ミスターXcoder

@ Mr.Xcoder Jellyが実際にPythonで実装されている場所。:p
エリック・ザ・アウトゴルファー

3

Mathematica、77バイト

Table[CellularAutomaton[51,{{1},0},#,{All,All}][[i]][[#-i+2;;-#+i-2]],{i,#}]&

@ツリーは48バイトまでゴルフをしませんでした

Mathematica、48バイト

#&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&

ええ、私はそれをセルオートマトンと考えることは考えませんでした。いいね!
ハイパーニュートリノ

2
同じことだがゴルファー:#&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&、48バイト
木ではない

3

Pyth、14バイト

@ Jakube、2バイトの節約に感謝します!

ms_+Bm%d2d%hd2

ここで試してみてください!

Pyth、15バイト

-1バイトの@Jakubeに感謝します

m++K*d]%d2%td2K

ここで試してみてください。

Pyth、16バイト

m++K*d`%d2`%td2K

ここで試してみてください。


]最初のコードの2番目を削除します。
ジャクベ

@ジャクベうん、ありがとう。リストに要素を追加するための自動リスト化を忘れていました。
氏Xcoder

ms_+Bm%d2d%hd2
次に

@ジャクベはい、私は今分岐を考えていましたが、私はモバイルにいるのでそれを行うことができませんでした。どうもありがとう!
ミスターXcoder

3

R、73バイト

ジュゼッペに感謝します!ナイスキャッチ。

n=scan();for(i in 1:n)cat(c(rep(" ",n-i),x<-rep(1-i%%2,i-1)),i%%2,x,"\n")

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

R、78バイト

n=scan();for(i in 1:n)cat(x<-c(rep(" ",n-i),rep(1-i%%2,i-1)),i%%2,rev(x),"\n")

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

R、82バイト

n=scan();for(i in 1:n){j=i%%2;x=c(rep(" ",n-i),rep(1-j,i-1));cat(x,j,rev(x),"\n")}

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

R、110バイト-stdoutへの出力

m=matrix(x<-rep_len(0:1,n<-scan()),n,n-1);m[upper.tri(m,T)]=" ";for(i in 1:n)cat(rev(m[i,]),1-x[i],m[i,],"\n")

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

R、130バイト-ファイルへの出力

m=matrix(x<-rep_len(0:1,n<-scan()),n,n-1);m[upper.tri(m,T)]=" ";for(i in 1:n)cat(rev(m[i,]),1-x[i],m[i,],"\n",file="a",append=i>1)

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

コンソールにファイルを収める方法がわからない場合のファイルへの書き込みn==99(結果はこちらを参照)。


2
コンソールが大きなnをラップすることを心配する必要はないと思います。個人的には、STDOUTへの出力が正しいので、file = "a"を捨てます。
MickyT


1

パスカル181バイト

@ThePirateBayのおかげで27バイト節約

procedure f(n:integer);var i,j:integer;begin for i:=1to n do begin write(' ':(n-i+1)*2);for j:=1to i*2-1do write((ord(j<>i)+i)mod 2,' ');writeln()end end;

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

グロフなし

procedure f (n: integer);
    var i, j: integer;
    begin
        for i := 1 to n do
        begin
            write(' ': (n-i+1) * 2);
            for j := 1 to i*2-1 do
                write((ord(j<>i) + i) mod 2, ' ')
            writeln()
        end
    end;


1

網膜、25バイト

.+
$*0
0
1$`¶
T`d`10`¶.*¶

オンラインでお試しください!説明:最初のステージは、入力をその長さのゼロのストリングに変換します。2番目の段階では、その文字列のすべてのプレフィックス(文字列自体を含まない)を取得し、それらに1をプレフィックスします。次に、3番目の段階で、代替行のビットを切り替えます。


1

05AB1E24 21 18 バイト

FNÉN×NÈJûIN>-úˆ}¯»

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


編集:まあ、それは私の最初の05AB1Eゴルフですので、物事がゴルフをすることができることに驚かないです。履歴を編集:



1

Mathematica、90バイト

Array[(x=Table[1,f=(2#-1)];x[[⌈f/2⌉]]=0;If[#==1,{1},If[OddQ@#,x/.{1->0,0->1},x]])&,#]&


0

、18バイト

EN⪫IE⁺¹ι﹪⁺ι¬λ² ‖O←

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

EN              For each of the input number of rows
  ⪫             Join with spaces
   I            Convert to string
    E⁺¹ι        For each column
        ﹪⁺ι¬λ²  Calculate the digit
‖O←             Reflect to the left

0

JavaScript、140 132バイト(適切なフォーマット)

n=>{A=Array;a='';b=0;for(x of A(n)){for(c of A(n-b))a+=' ';for(c of A(b))a+=b%2;a+=(b+1)%2;for(c of A(b))a+=b%2;a+='\n';b++}return a}

オンラインで試す


知らなかった場合は、A=Array8バイトを節約するために使用できます。

良い点、私はそれを考えていませんでした
デビッドベイリー

1)代わりに、1バイトを保存する最初の配列呼び出しでA=Array;初期化変数Aを初期化できます(for(x of(A=Array)(n))2)、1)'\n'リテラル改行で置換(重大なアクセントを使用)、3)しないに(b+1)%2相当するため、括弧が必要b+1&1です。

0

JavaScript(ES6)74 73 71 68 64バイト

@Neilによる-7バイト

f=n=>n--?[...f(n), [...Array(n-~n)].map((v,i)=>(n+(i==n))%2)]:[]

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

行を1行ずつ生成する単純な再帰関数。数値の配列の配列として出力します。


フォーマットされた文字列として出力します:

JavaScript(ES6)122 119 118バイト

f=(n,w=2*n+1,N=n,s=" ".repeat((N-n)*2))=>(--n?f(n,w,N)+s+[...Array(n-~n)].map((v,i)=>(n+(i==n))%2).join(" "):s+1)+"\n"

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


(n%2+(i==n))%2に簡略化できます(n+(i==n))%2
ニール

または動作する1&n^i==nかもしれませんが、私はそれをテストしていません。
ニール

また試してみてくださいn--?...:[]。(そして、;インコードゴルフは必要ありません。)
ニール

2*n+1かもしれませんがn-~n、確かに思い出すことはできません。
ニール

@ニールありがとう!私が働くことができるものを追加した
ビルジョラクセ


0

J、32バイト

3 :'-.^:(2|y)(=|.)i.>:+:y'&.>@i.

オンラインでお試しください!これは、ボックス化された値のリストを返す匿名関数です。

明示的な関数定義は、キャップなどを削除することでバイトを節約することを想像したいのですが、暗黙の答えに比べておそらく数バイト追加されます。

説明

3 :'-.^:(2|y)(=|.)i.>:+:y'&.>@i.
                              i. For i = 0 ... input - 1
3 :'-.^:(2|y)(=|.)i.>:+:y'        Explicit function: compute nth row
                    >:+:y          2n+1
                  i.               Range [0,2n+1)
             (=|.)                 Equate range to reversed range
                                    (yield 0 0 0 ... 1 ... 0 0 0)
                                   If
                                    n = 1 (mod 2)
                                   Then
                                    Negate each value
                          &.>     Box


0

J、17バイト

(2&|~:0=i:)&.>@i.

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

ボックス化された配列のリストを出力します。

説明

(2&|~:0=i:)&.>@i.  Input: n
               i.  Range from 0 to n, exclusive end
           & >     Unbox each and perform on each x
        i:           Range from -x to x, inclusive
      0=             Equal to 0
    ~:               Not equal
 2&|                 x mod 2
           &.>       Perform inverse of unbox (box)

0

Java 8、121 111 109 101バイト

n->{String r[]=new String[n],t;for(int i=0,j;i<n;r[i++]=t+i%2+t)for(j=0,t="";j++<i;t+=i%2);return r;}

私の現在のバイトスコア(101)もバイナリトライアングルの行です。:)

説明:

ここで試してみてください。

n->{                         // Method with integer parameter and String-array return-type
  String r[]=new String[n],  //  Result String-array
         t;                  //  Temp String
  for(int i=0,j;             //  Some index-integers
      i<n;                   //  Loop (1) from 0 to `n` (exclusive)
      r[i++]=                //    After every iteration, set the next row to:
        t+                   //     `t` +
        i%2                  //     Center digit (`i` has already been raised by 1 now)
        +t)                  //     + `t` again
    for(j=0,t="";            //   Reset index `j` and the temp-String `t`
        j++<i;               //   Inner loop (2) from 0 to `i` (exclusive)
      t+=i%2                 //    Append `t` with an outer digit
    );                       //   End of inner loop (2)
                             //  End of loop (1) (implicit / single-line body)
  return r;                  //  Return resulting String-array
}                            // End of method

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.