Tam giác nhị phân dễ dàng


18

Cho đầu vào là một số nguyên dương n>=1, xuất ra các nhàng đầu tiên của tam giác sau:

                  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

Các hàng xen kẽ giữa tất cả các số 0 và tất cả các số, ngoại trừ cột trung tâm được lật.

Các trường hợp thử nghiệm

  • Đầu vào :3

  • Đầu ra :

        1
      1 0 1
    0 0 1 0 0
    
  • Đầu vào :10

  • Đầu ra :

                      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
    

Mã của bạn phải làm việc cho bất kỳ n<100. Đây là , do đó mã ngắn nhất tính bằng byte sẽ thắng!

Không gian lưu trữ / dòng mới và dòng mới hàng đầu được cho phép!


Là không gian trắng thừa có thể chấp nhận và nếu vậy, mà (dòng hàng đầu / hàng đầu / đường mòn / đào tạo)?
Jonathan Allan

1
Chúng tôi có thể trả về một danh sách các danh sách các số?
Erik the Outgolfer

8
@EriktheOutgolfer danh sách danh sách là tốt!

1
Vì một danh sách các danh sách là tốt, tôi giả sử rằng không cần phải căn chỉnh trung tâm, phải không?
Luis Mendo

1
Đó là thách thức của bạn, nhưng theo tôi nếu bạn đủ linh hoạt để cho phép một danh sách các danh sách thì sẽ không có ý nghĩa gì nghiêm ngặt với định dạng
Luis Mendo

Câu trả lời:


7

Thạch , 7 byte

Ṭ=Ḃµ€ŒB

Hãy thử trực tuyến!

-1 byte nhờ Erik the Outgolfer

Giải trình

Ṭ=Ḃµ€Œ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

Bạn có thể thay thế ¶Çbằng µcho -1.
Erik the Outgolfer

@EriktheOutgolfer ooh cảm ơn!
HyperNeutrino


3

Thạch , 8 byte

⁼€=ḂŒḄµ€

Hãy thử trực tuyến!

-2 nhờ HyperNeutrino .


Oh nghiêm túc .... chia ninjad thứ hai: p
Jonathan Allan

@Jonathan ALLan Đó thực sự là một sự thay đổi quy tắc ... btw Tôi nghĩ rằng điều này cũng có thể chơi được ...
Erik the Outgolfer

vâng Tôi có một lưới 15 byte sau đó là danh sách 10 byte ...
Jonathan Allan


¬^Ḃcó thể trở thành =Ḃbởi vì NOT (XOR (A B))chỉ cần IFF (A B) chỉnh sửa rõ ràng tôi đã chơi golf nhiều hơn tôi nghĩ rằng tôi đã có o_O lol
HyperNeutrino


3

Japt , 12 9 byte

õÈÇ¥Y^uÃê

Kiểm tra nó trực tuyến!

Khá Hơi buồn so với Jelly, nhưng Japt không có bất cứ điều gì như vì vậy tôi phải làm gì với những gì tôi có ...

Giải trình

 õÈ   Ç   ¥ 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

Hoan hô các nội dung: P: P: P
HyperNeutrino

Yaay, ai đó đã phá vỡ chuỗi Python-Jelly-Python-Jelly!
Ông Xcoder

@ Mr.Xcoder Nơi Jelly thực sự được triển khai trong Python. : p
Erik the Outgolfer

3

Toán học, 77 byte

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

@ Không phải là một cây đã đánh gôn xuống còn 48 byte!

Toán học, 48 byte

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

Tôi không nghĩ đến việc coi nó là một automata di động. Đẹp!
HyperNeutrino

2
Điều tương tự nhưng golfier : #&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&, 48 byte
Không phải là một cây vào

3

Bình thường , 14 byte

Cảm ơn @Jakube đã lưu 2 byte!

ms_+Bm%d2d%hd2

Hãy thử nó ở đây!

Bình thường , 15 byte

Cảm ơn rất nhiều về @Jakube cho -1 byte

m++K*d]%d2%td2K

Hãy thử nó ở đây.

Bình thường , 16 byte

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

Hãy thử nó ở đây.


Loại bỏ thứ hai ]trong mã đầu tiên.
Jakube

@Jakube Vâng, cảm ơn. Quên về tự động liệt kê để thêm các yếu tố vào danh sách.
Ông Xcoder

Và đây là một giải pháp 14 byte:ms_+Bm%d2d%hd2
Jakube

@Jakube Vâng, tôi đã nghĩ đến việc phân chia ngay bây giờ, nhưng tôi không thể làm điều đó vì tôi đang ở trên điện thoại di động. Cảm ơn rất nhiều lần nữa!
Ông Xcoder

3

R , 73 byte

Cảm ơn Giuseppe! Bắt đẹp.

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

Hãy thử trực tuyến!

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

Hãy thử trực tuyến!

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

Hãy thử trực tuyến!

R , 110 byte - xuất ra thiết bị xuất chuẩn

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

Hãy thử trực tuyến!

R , 130 byte - xuất ra tệp

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)

Hãy thử trực tuyến!

Viết ra một tập tin vì tôi không biết làm thế nào để phù hợp với nó trong bảng điều khiển nếu n==99(xem kết quả ở đây ).


2
Tôi không nghĩ rằng bạn cần phải lo lắng về giao diện điều khiển gói nó cho n lớn hơn. Cá nhân tôi sẽ bỏ qua, file = "a" vì đầu ra cho STDOUT là chính xác.
MickyT


1

Pascal , 181 154 byte

27 byte được lưu nhờ @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;

Hãy thử trực tuyến!

Không được ủng hộ

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

Võng mạc , 25 byte

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

Hãy thử trực tuyến! Giải thích: Giai đoạn đầu tiên chuyển đổi đầu vào thành một chuỗi số không có độ dài đó. Giai đoạn thứ hai sau đó lấy tất cả các tiền tố của chuỗi đó (không bao gồm chính chuỗi đó) và tiền tố 1 cho chúng. Giai đoạn thứ ba sau đó bật các bit trên các dòng thay thế.


1

05AB1E , 24 21 18 byte

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

Hãy thử trực tuyến!


Chỉnh sửa: Chà, đây là sân golf 05AB1E đầu tiên của tôi nên tôi không ngạc nhiên khi mọi thứ có thể được đánh gôn. Chỉnh sửa lịch sử:



1

Toán học, 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

Than , 18 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

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 (với định dạng phù hợp)

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}

Dùng thử trực tuyến


Nếu bạn không biết, bạn có thể sử dụng A=Arrayđể lưu 8 byte.

Điểm hay, tôi đã không nghĩ về điều đó
David Bailey

Bạn có thể lưu ít nhất 3 byte nữa bằng cách: 1) Thay vì A=Array;bạn có thể biến init Atrong cuộc gọi mảng đầu tiên (nghĩa là for(x of(A=Array)(n))), tiết kiệm 1 byte, 2) Thay thế '\n'bằng dòng mới bằng chữ (sử dụng dấu trọng âm), 3) Bạn không cần dấu ngoặc trong (b+1)%2vì nó tương đương với b+1&1.

0

JavaScript (ES6) , 74 73 71 68 64 byte

-7 byte bởi @Neil

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

Hãy thử trực tuyến!

Hàm đệ quy đơn giản tạo ra từng dòng một. Đầu ra là mảng của mảng số.


Đầu ra dưới dạng chuỗi được định dạng:

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"

Hãy thử trực tuyến!


(n%2+(i==n))%2có thể được đơn giản hóa để (n+(i==n))%2.
Neil

Hoặc 1&n^i==ncó thể làm việc, nhưng tôi đã không thử nó.
Neil

Cũng thử n--?...:[]. (Và bạn không cần ;chơi gôn mã.)
Neil

2*n+1có thể n-~n, nhưng tôi không bao giờ có thể nhớ chắc chắn.
Neil

@Neil Cảm ơn! Đã thêm những cái tôi có thể làm việc
Birjolaxew


0

J, 32 byte

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

Hãy thử trực tuyến! Đây là một hàm ẩn danh trả về một danh sách các giá trị được đóng hộp.

Tôi muốn tưởng tượng rằng định nghĩa hàm rõ ràng tiết kiệm byte nhờ vào việc loại bỏ mũ và như vậy, nhưng nó có thể thêm một vài byte so với câu trả lời ngầm.

Giải trình

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_}ûˆ

Hãy thử trực tuyến!

Giải trình

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.

Hãy thử trực tuyến!

Xuất ra một danh sách các mảng được đóng hộp.

Giải trình

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

Điểm số byte hiện tại của tôi (101) cũng là một hàng của tam giác nhị phân. :)

Giải trình:

Hãy thử nó ở đây.

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.