สามเหลี่ยมไบนารีง่าย


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

แถวสลับกันระหว่างศูนย์ทั้งหมดและแถวทั้งหมดยกเว้นคอลัมน์กลางจะพลิก

กรณีทดสอบ

  • อินพุต :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ได้ นี่คือดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ!

ช่องว่างต่อท้าย / การขึ้นบรรทัดใหม่และการขึ้นบรรทัดใหม่นำได้


พื้นที่สีขาวส่วนเกินยอมรับได้หรือไม่และถ้าเป็นเช่นนั้น (เส้นนำ / เส้นนำ / ท้าย / เส้นฝึกซ้อม) หรือไม่
Jonathan Allan

1
เราสามารถส่งรายการลิสต์ของหมายเลข aa ได้ไหม
Erik the Outgolfer

8
@EriktheOutgolfer รายชื่อรายการไม่เป็นไร!

1
เนื่องจากรายชื่อรายการไม่เป็นไรฉันจึงคิดว่าไม่จำเป็นต้องมีการจัดแนวกึ่งกลางใช่ไหม
Luis Mendo

1
มันเป็นความท้าทายของคุณ แต่ในความคิดของฉันถ้าคุณมีความยืดหยุ่นเพียงพอที่จะอนุญาตให้มีรายชื่อรายการมันไม่สมเหตุสมผลเลยที่จะเข้มงวดกับการจัดรูปแบบ
Luis Mendo

คำตอบ:


7

เยลลี่ขนาด 7 ไบต์

Ṭ=Ḃµ€ŒB

ลองออนไลน์!

-1 ไบต์ขอบคุณ Erik the Outgolfer

คำอธิบาย

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

@EriktheOutgolfer โอ้โหขอบคุณ!
HyperNeutrino

4

Python 2 , 50 ไบต์

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

ลองออนไลน์!

นี่จะส่งคืนแถวเป็นรายการของ Strings

Python 2 , 67 65 63 ไบต์ (จัดรูปแบบ)

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

ลองออนไลน์!

เอาต์พุตนี้มีช่องว่างต่อท้ายในแต่ละบรรทัด


3

เยลลี่ขนาด 8 ไบต์

⁼€=ḂŒḄµ€

ลองออนไลน์!

-2 ขอบคุณที่HyperNeutrino


โอ้อย่างจริงจัง .... แยกนินจาที่สอง: p
Jonathan Allan

@JonathanAllan มันเป็นกฎที่เปลี่ยนไปจริงๆ ... btw ฉันคิดว่ามันสามารถเล่นได้เช่นกัน ...
Erik the Outgolfer

ใช่ฉันมีตาราง 15 ไบต์แล้วรายการไบต์ 10 ...
โจนาธานอัลลัน

1
@JonathanAllan Hyper กำลังดี ...
Erik the Outgolfer

¬^Ḃสามารถกลายเป็น=ḂเพราะNOT (XOR (A B))เป็นเพียงIFF (A B) การแก้ไขที่เห็นได้ชัดว่าผมแข็งแรงเล่นกอล์ฟมากขึ้นกว่าที่ฉันคิดว่าฉันมี o_O ฮ่า ๆ
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 ไบต์ (สำหรับอีกต่อไป)
Mr. Xcoder

3

Japt , 12 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

ไชโยสำหรับตัวอาคาร: P: P: P
HyperNeutrino

Yaay มีคนทำลายโซ่ Python-Jelly-Python-Jelly!
Mr. Xcoder

@ Mr.Xcoder โดยที่ Jelly ถูกนำไปใช้จริงใน Python : p
Erik the Outgolfer

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

ฉันไม่คิดว่าจะเป็นออโตมาตาเซลลูล่าร์ ดี!
HyperNeutrino

2
สิ่งเดียวกัน แต่นักเล่นกอล์ฟ: #&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&48 ไบต์
ไม่ใช่ต้นไม้

3

Pyth , 14 ไบต์

ขอบคุณ @Jakube สำหรับการบันทึก 2 ไบต์!

ms_+Bm%d2d%hd2

ลองที่นี่!

Pyth , 15 ไบต์

ขอบคุณมากสำหรับ @Jakube สำหรับ -1 ไบต์

m++K*d]%d2%td2K

ลองที่นี่

Pyth , 16 ไบต์

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

ลองที่นี่


ลบที่สอง]ในรหัสแรก
Jakube

@ Jakube ใช่แล้วขอบคุณ ลืมเกี่ยวกับการตรวจสอบอัตโนมัติสำหรับการผนวกองค์ประกอบเข้ากับรายการ
Mr. Xcoder

และนี่คือวิธีการแก้ปัญหา 14 ไบต์:ms_+Bm%d2d%hd2
Jakube

@Jakube ใช่ฉันกำลังคิดที่จะแยกไปสองทาง แต่ฉันไม่สามารถทำได้เนื่องจากฉันอยู่ในมือถือ ขอบคุณมากอีกครั้ง!
Mr. Xcoder

3

R , 73 ไบต์

ขอบคุณ Giuseppe! รับได้สวย.

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
ฉันไม่คิดว่าคุณต้องกังวลเกี่ยวกับการหุ้มคอนโซลสำหรับสิ่งที่ใหญ่กว่า โดยส่วนตัวแล้วฉันจะทิ้ง, file = "a" เนื่องจากเอาต์พุตไปยัง STDOUT ถูกต้อง
MickyT


1

ปาสคาล , 181 154 ไบต์

บันทึก 27 ไบต์ด้วย @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;

ลองออนไลน์!

Unglofed

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`¶.*¶

ลองออนไลน์! คำอธิบาย: ขั้นตอนแรกจะแปลงอินพุตเป็นสตริงศูนย์ที่มีความยาวนั้น ขั้นตอนที่สองจะนำหน้าทั้งหมดของสตริงนั้น (ไม่รวมสตริงเอง) และนำหน้า 1 ไปยังพวกเขา ขั้นตอนที่สามจะสลับบิตบนเส้นอื่น


1

05AB1E , 24 21 18 ไบต์

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

ลองออนไลน์!


แก้ไข: ก็เป็น 05AB1E กอล์ฟครั้งแรกของฉันดังนั้นฉันจึงไม่แปลกใจที่จะสามารถตีกอล์ฟได้ แก้ไขประวัติ:





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=Arrayเพื่อบันทึก 8 ไบต์

จุดดีฉันไม่คิดอย่างนั้น
เดวิดเบลีย์

คุณสามารถบันทึกอย่างน้อย 3 ไบต์ขึ้นไปโดย: 1) แทนที่จะใช้A=Array;ตัวแปรเริ่มต้นAในการเรียกอาเรย์แรก (เช่นfor(x of(A=Array)(n))) ซึ่งจะช่วยประหยัด 1 ไบต์, 2) แทนที่'\n'ด้วยบรรทัดใหม่ตามตัวอักษร (ใช้เครื่องหมายเน้นเสียงร้ายแรง) 3) วงเล็บต้องการในเพราะมันจะเทียบเท่ากับ(b+1)%2 b+1&1

0

JavaScript (ES6) , 74 73 71 68 64 ไบต์

-7 ไบต์โดย @Neil

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

ลองออนไลน์!

ฟังก์ชั่นวนซ้ำแบบง่ายที่สร้างบรรทัดทีละบรรทัด ส่งออกเป็นอาร์เรย์ของตัวเลข


เอาต์พุตเป็นสตริงที่จัดรูปแบบ:

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ขึ้น
Neil

หรือ1&n^i==nอาจใช้ได้ แต่ฉันยังไม่ได้ทดสอบ
Neil

ลองดูn--?...:[]สิ (และคุณไม่จำเป็นต้องใช้;รหัสในการเล่นกอล์ฟ)
Neil

2*n+1อาจจะเป็นn-~nแต่ฉันไม่สามารถจำได้อย่างแน่นอน
Neil

@ Neil ขอบคุณ! เพิ่มสิ่งที่ฉันสามารถทำงานได้
Birjolaxew


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.