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!


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

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.


3

Jelly , 8 byte

⁼€=ḂŒḄµ€

Cobalah online!

-2 Terima kasih kepada HyperNeutrino .


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

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

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]&

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.


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


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

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;


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.


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:



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]])&,#]&


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

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


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!


(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

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

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

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)

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.