Segitiga biner yang mudah

18

Diberikan sebagai input bilangan bulat positif n>=1, output nbaris pertama dari segitiga berikut:

                  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

Baris bergantian antara semua nol dan semua yang ada, kecuali kolom tengah dibalik.

Uji kasus

  • Masukan :3

  • Keluaran :

        1
      1 0 1
    0 0 1 0 0
    
  • Masukan :10

  • Keluaran :

                      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
    

Kode Anda harus berfungsi untuk apa saja n<100. Ini adalah , maka kode terpendek dalam byte menang!

Ruang tambahan / baris baru dan baris baru terkemuka diizinkan!

Tidak
sumber
Apakah kelebihan ruang putih dapat diterima dan jika demikian, yang mana (garis depan / garis depan / garis pelatihan /)?
Jonathan Allan
1
Bisakah kita mengembalikan daftar nomor?
Erik the Outgolfer
8
@EriktheOutgolfer daftar daftar baik-baik saja!
1
Karena daftar daftar baik-baik saja, saya mengasumsikan bahwa keberpihakan terpusat tidak diperlukan, bukan?
Luis Mendo
1
Ini tantangan Anda, tetapi menurut saya jika Anda cukup fleksibel untuk memungkinkan daftar daftar, tidak masuk akal untuk ketat dengan pemformatan
Luis Mendo

Jawaban:

7

Jelly , 7 byte

Ṭ=Ḃµ€ŒB

Cobalah online!

-1 byte terima kasih kepada Erik the Outgolfer

Penjelasan

Ṭ=Ḃµ€Œ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
HyperNeutrino
sumber
Anda dapat mengganti ¶Çdengan µuntuk -1.
Erik the Outgolfer
@EriktheOutgolfer ooh terima kasih!
HyperNeutrino
4

Python 2 , 50 byte

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

Cobalah online!

Ini mengembalikan baris sebagai daftar String.

Python 2 , 67 65 63 byte (diformat)

n=input()
for i in range(n):k=i*`i%2`;print(n-i)*" "+k+`~i%2`+k

Cobalah online!

Output ini dengan spasi tambahan di setiap baris.

Tuan Xcoder
sumber
3

Jelly , 8 byte

⁼€=ḂŒḄµ€

Cobalah online!

-2 Terima kasih kepada HyperNeutrino .

Erik the Outgolfer
sumber
Oh serius .... pisahkan ninjad kedua: p
Jonathan Allan
@ JonathanAllan Itu benar-benar perubahan peraturan ... btw Saya pikir ini golf juga ...
Erik the Outgolfer
ya saya punya grid 15 byte kemudian daftar 10 byte ...
Jonathan Allan
1
@ JonathanAllan Hyper baik-baik saja ...
Erik the Outgolfer
¬^Ḃdapat menjadi =Ḃkarena NOT (XOR (A B))hanya IFF (A B) mengedit ternyata saya
bermain golf
3

Python 2 , 50 byte

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

Cobalah online!

Python 2 , 53 byte

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

Cobalah online!

Python 2 , 67 byte

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

Cobalah online!

benar-benar manusiawi
sumber
2
Haha, sekarang kita terikat :)
Tn. Xcoder
65 byte (untuk yang lebih lama)
Tn. Xcoder
3

Japt , 12 9 byte

õÈÇ¥Y^uÃê

Uji secara online!

Cukup Sedikit sedih dibandingkan dengan Jelly, tetapi Japt tidak memiliki apa-apa seperti jadi saya harus membuat hubungannya dengan apa yang saya miliki ...

Penjelasan

 õÈ   Ç   ¥ 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
Produksi ETH
sumber
Hore untuk bawaan: P: P: P
HyperNeutrino
Yaay, seseorang merusak rantai Python-Jelly-Python-Jelly!
Tn. Xcoder
@ Mr.Xcoder Di mana Jelly benar-benar diimplementasikan dalam Python. : p
Erik the Outgolfer
3

Mathematica, 77 byte

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

@Tidak ada pohon yang melakukan pegolf hingga 48 byte!

Mathematica, 48 byte

#&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&
J42161217
sumber
Ya saya tidak berpikir untuk menganggapnya sebagai automata seluler. Bagus!
HyperNeutrino
2
Hal yang sama tetapi pegolf:, #&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&48 byte
Bukan pohon
3

Pyth , 14 byte

Terima kasih kepada @Jakube karena telah menghemat 2 byte!

ms_+Bm%d2d%hd2

Coba di sini!

Pyth , 15 byte

Terima kasih banyak kepada @ Jakube untuk -1 byte

m++K*d]%d2%td2K

Coba di sini.

Pyth , 16 byte

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

Coba di sini.

Tuan Xcoder
sumber
Hapus kode kedua ]di kode pertama.
Jakube
@ Yakub Ya, terima kasih. Lupa tentang auto-listification untuk menambahkan elemen ke daftar.
Tn. Xcoder
Dan di sini adalah solusi 14 byte:ms_+Bm%d2d%hd2
Jakube
@ Jakube Ya, saya sedang memikirkan bifurkasi sekarang, tapi saya tidak bisa melakukannya karena saya menggunakan ponsel. Terima kasih banyak lagi!
Tn. Xcoder
3

R , 73 byte

Terima kasih untuk Giuseppe! Tangkapan bagus.

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

Cobalah online!

R , 78 byte

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

Cobalah online!

R , 82 byte

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")}

Cobalah online!

R , 110 byte - output ke 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")

Cobalah online!

R , 130 bytes - output ke file

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)

Cobalah online!

Menulis ke file karena saya tidak tahu bagaimana memasangnya di konsol jika n==99(lihat hasilnya di sini ).

djhurio
sumber
2
Saya tidak berpikir Anda perlu khawatir tentang konsol membungkusnya untuk n yang lebih besar. Secara pribadi saya akan membuang, file = "a" karena output ke STDOUT sudah benar.
MickyT
1
73 bytes
Giuseppe
1

Pascal , 181 154 byte

27 byte disimpan berkat @ThePirateBay

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;

Cobalah online!

Tidak berlapis

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;
Uriel
sumber
1
126 byte
tsh
1

Retina , 25 byte

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

Cobalah online! Penjelasan: Tahap pertama mengubah input menjadi string nol dengan panjang itu. Tahap kedua kemudian mengambil semua awalan string itu (tidak termasuk string itu sendiri) dan awalan 1 untuk mereka. Tahap ketiga kemudian beralih bit pada baris alternatif.

Neil
sumber
1

05AB1E , 24 21 18 byte

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

Cobalah online!


Sunting: Ya, ini adalah golf 05AB1E pertama saya, jadi saya tidak terkejut hal-hal yang bisa dilakukan golf. Edit riwayat:

LarsW
sumber
1

Perl 5 , 58 + 1 (-n) = 59 byte

say$"x(2*--$_).($/=$i%2 .$")x$i.(1-$i%2).$".$/x$i++while$_

Cobalah online!

# Perl 5 , 59 + 1 (-n) = 60 byte

say$"x(2*--$_).($i%2 .$")x$i.(1-$i%2).($".$i%2)x$i++while$_

Cobalah online!

Xcali
sumber
1

Mathematica, 90 byte

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

Arang , 18 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

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
Neil
sumber
0

JavaScript, 140 132 byte (dengan pemformatan yang tepat)

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}

Cobalah secara Online

David Bailey
sumber
Jika Anda tidak tahu, Anda dapat menggunakannya A=Arrayuntuk menghemat 8 byte.
Poin bagus, saya tidak memikirkan itu
David Bailey
Anda dapat menyimpan setidaknya 3 byte lebih banyak dengan: 1) Alih-alih A=Array;Anda dapat init variabel Apada panggilan array pertama (mis. for(x of(A=Array)(n))) Yang menghemat 1 byte, 2) Ganti '\n'dengan baris baru literal (gunakan aksen kubur), 3) Anda tidak membutuhkan tanda kurung di (b+1)%2karena itu setara dengan b+1&1.
0

JavaScript (ES6) , 74 73 71 68 64 byte

-7 byte oleh @Neil

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

Cobalah online!

Fungsi rekursif sederhana yang menghasilkan garis satu per satu. Output sebagai array dari array angka.


Output sebagai string yang diformat:

JavaScript (ES6) , 122 119 118 byte

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"

Cobalah online!

Birjolaxew
sumber
(n%2+(i==n))%2dapat disederhanakan menjadi (n+(i==n))%2.
Neil
Atau 1&n^i==nmungkin berhasil, tetapi saya belum mengujinya.
Neil
Coba juga n--?...:[]. (Dan Anda tidak memerlukan ;kode golf.)
Neil
2*n+1mungkin n-~n, tapi aku tidak pernah bisa mengingatnya dengan pasti.
Neil
@Neil Terima kasih! Menambahkan yang saya bisa mulai bekerja
Birjolaxew
0

Haskell , 54 byte

Pemahaman daftar lurus ke depan:

f n=[k++[mod i 2]++k|i<-[1..n],k<-[mod(i+1)2<$[2..i]]]

Cobalah online!

ბიმო
sumber
0

J, 32 byte

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

Cobalah online! Ini adalah fungsi anonim yang mengembalikan daftar nilai kotak.

Saya suka membayangkan bahwa definisi fungsi eksplisit menyimpan byte berdasarkan menghapus topi dan semacamnya, tetapi mungkin menambahkan beberapa byte dibandingkan dengan jawaban diam-diam.

Penjelasan

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
cole
sumber
0

05AB1E , 11 byte

FN°SRNF_}ûˆ

Cobalah online!

Penjelasan

F             # for N in range [0 ... input-1] do:
 N°           # push 10^N
   S          # split to list of digits
    R         # reverse
     NF_}     # N times do: logical negation
         û    # palendromize
          ˆ   # add to global list
              # implicitly display global list
Emigna
sumber
0

J , 17 byte

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

Cobalah online!

Menghasilkan daftar array kotak.

Penjelasan

(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)
mil
sumber
0

Java 8, 121 111 109 101 byte

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

Nilai byte saya saat ini (101) juga merupakan deretan segitiga biner. :)

Penjelasan:

Coba di sini.

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
Kevin Cruijssen
sumber