Łatwy trójkąt binarny

18

Biorąc pod uwagę dodatnią liczbę całkowitą n>=1, wyślij pierwsze nrzędy następującego trójkąta:

                  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

Wiersze występują naprzemiennie między wszystkimi zerami i wszystkimi zerami, z wyjątkiem tego, że środkowa kolumna jest odwrócona.

Przypadki testowe

  • Wejście :3

  • Wyjście :

        1
      1 0 1
    0 0 1 0 0
    
  • Wejście :10

  • Wyjście :

                      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
    

Twój kod musi działać dla każdego n<100. To jest , stąd wygrywa najkrótszy kod w bajtach!

Dopuszczalne są spacje / znaki nowej linii i znaki nowej linii!

xnor
źródło
Czy nadmiar białej przestrzeni jest akceptowalny, a jeśli tak, to który (linie prowadzące / linie wiodące / końcowe / linie końcowe)?
Jonathan Allan,
1
Czy możemy zwrócić listę numerów?
Erik the Outgolfer,
8
@EriktheOutgolfer lista list jest w porządku!
1
Ponieważ lista list jest w porządku, zakładam, że wyśrodkowane wyrównanie nie jest wymagane, prawda?
Luis Mendo,
1
To twoje wyzwanie, ale moim zdaniem, jeśli jesteś wystarczająco elastyczny, aby zezwolić na listę list, nie ma sensu być surowym przy formatowaniu
Luis Mendo

Odpowiedzi:

7

Galaretka , 7 bajtów

Ṭ=Ḃµ€ŒB

Wypróbuj online!

-1 bajt dzięki Erik the Outgolfer

Wyjaśnienie

Ṭ=Ḃµ€Œ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
źródło
Można wymienić ¶Çz µna -1.
Erik the Outgolfer,
@EriktheOutgolfer ooh dzięki!
HyperNeutrino,
4

Python 2 , 50 bajtów

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

Wypróbuj online!

Zwraca to wiersze jako listę ciągów.

Python 2 , 67 65 63 bajtów (sformatowany)

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

Wypróbuj online!

Daje to końcowe spacje w każdej linii.

Pan Xcoder
źródło
3

Galaretka , 8 bajtów

⁼€=ḂŒḄµ€

Wypróbuj online!

-2 dzięki HyperNeutrino .

Erik the Outgolfer
źródło
Och serio .... ułamek sekundy ninja: p
Jonathan Allan
@JonathanAllan To była naprawdę zmiana zasad ... btw Myślę, że to także gra w golfa ...
Erik the Outgolfer
tak, miałem 15-bajtową siatkę, a następnie 10-bajtowe listy ...
Jonathan Allan,
1
@JonathanAllan Hyper jest dobry ...
Erik the Outgolfer
¬^Ḃmogę się stać, =Ḃbo NOT (XOR (A B))to po prostu IFF (A B) edycja Najwyraźniej grałem w golfa więcej niż myślałem, że miałem o_O lol
HyperNeutrino
3

Japt , 12 9 bajtów

õÈÇ¥Y^uÃê

Przetestuj online!

Dość lekko smutny porównaniu galarecie, ale Japt nie ma czegoś takiego , więc muszę zrobić z tego, co mam ...

Wyjaśnienie

 õÈ   Ç   ¥ 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
ETHprodukcje
źródło
Brawo dla wbudowanych: P: P: P
HyperNeutrino
Tak, ktoś zerwał łańcuch Python-Jelly-Python-Jelly!
Mr. Xcoder,
@ Mr.Xcoder Gdzie Jelly jest naprawdę zaimplementowany w Pythonie. : p
Erik the Outgolfer
3

Mathematica, 77 bajtów

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

@ Nie drzewo nie golfa do 48 bajtów!

Mathematica, 48 bajtów

#&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&
J42161217
źródło
Huh, nie myślałem o tym, żeby uznać to za automaty komórkowe. Ładny!
HyperNeutrino,
2
To samo, ale golfier:, #&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&48 bajtów
Nie drzewo,
3

Pyth , 14 bajtów

Dzięki @Jakube za uratowanie 2 bajtów!

ms_+Bm%d2d%hd2

Wypróbuj tutaj!

Pyth , 15 bajtów

Bardzo dziękuję @Jakube za -1 bajtów

m++K*d]%d2%td2K

Wypróbuj tutaj.

Pyth , 16 bajtów

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

Wypróbuj tutaj.

Pan Xcoder
źródło
Usuń drugi ]z pierwszego kodu.
Jakube
@Jakube Tak, dziękuję. Zapomniałem o automatycznym zgłoszeniu do dodawania elementów do list.
Pan Xcoder,
A oto rozwiązanie 14 bajtów:ms_+Bm%d2d%hd2
Jakube
@Jakube Tak, właśnie myślałem o rozwidleniu, ale nie mogłem tego zrobić, ponieważ jestem na telefonie komórkowym. Jeszcze raz wielkie dzięki!
Pan Xcoder,
3

R , 73 bajty

Dzięki Giuseppe! Dobry chwyt.

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

Wypróbuj online!

R , 78 bajtów

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

Wypróbuj online!

R , 82 bajty

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

Wypróbuj online!

R , 110 bajtów - wyjście na standardowe wyjście

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

Wypróbuj online!

R , 130 bajtów - wyjście do pliku

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)

Wypróbuj online!

Zapisywanie do pliku, ponieważ nie wiem, jak go umieścić w konsoli, jeśli n==99(zobacz wynik tutaj ).

djhurio
źródło
2
Nie sądzę, że powinieneś się martwić, że konsola zapakuje go dla większych liter. Osobiście porzuciłbym, file = "a", ponieważ dane wyjściowe do STDOUT są poprawne.
MickyT,
1
73 bajty
Giuseppe
1

Pascal , 181 154 bajtów

27 bajtów zapisanych dzięki @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;

Wypróbuj online!

Nieklofowany

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
źródło
1
126 bajtów
tsh
1

Siatkówka , 25 bajtów

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

Wypróbuj online! Objaśnienie: Pierwszy etap konwertuje dane wejściowe na ciąg zer o tej długości. Drugi etap bierze następnie wszystkie prefiksy tego ciągu (nie wliczając samego łańcucha) i przedrostki 1 do nich. Trzeci etap przełącza następnie bity na alternatywnych liniach.

Neil
źródło
1

05AB1E , 24 21 18 bajtów

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

Wypróbuj online!


Edycja: Cóż, to mój pierwszy golf 05AB1E, więc nie jestem zaskoczony, że można grać w golfa. Edytuj historię:

LarsW
źródło
1

Perl 5 , 58 + 1 (-n) = 59 bajtów

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

Wypróbuj online!

# Perl 5 , 59 + 1 (-n) = 60 bajtów

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

Wypróbuj online!

Xcali
źródło
1

Mathematica, 90 bajtów

Array[(x=Table[1,f=(2#-1)];x[[⌈f/2⌉]]=0;If[#==1,{1},If[OddQ@#,x/.{1->0,0->1},x]])&,#]&
Pan Xcoder
źródło
0

Węgiel drzewny , 18 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

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
źródło
0

JavaScript, 140 132 bajtów (z odpowiednim formatowaniem)

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}

Wypróbuj online

David Bailey
źródło
Jeśli nie wiesz, możesz użyć, A=Arrayaby zapisać 8 bajtów.
Dobrze, że o tym nie myślałem
David Bailey,
Możesz zapisać co najmniej 3 kolejne bajty przez: 1) Zamiast tego A=Array;możesz zainicjować zmienną Aprzy pierwszym wywołaniu tablicy (tj. for(x of(A=Array)(n))), Co oszczędza 1 bajt, 2) Zamień na '\n'dosłownie nową linię (użyj poważnych akcentów), 3) Nie potrzebujesz nawiasów, (b+1)%2ponieważ jest to równoważne z b+1&1.
0

JavaScript (ES6) , 74 73 71 68 64 bajtów

-7 bajtów przez @Neil

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

Wypróbuj online!

Prosta funkcja rekurencyjna, która generuje linie jeden po drugim. Dane wyjściowe jako tablica tablic liczb.


Dane wyjściowe jako sformatowany ciąg:

JavaScript (ES6) , 122 119 118 bajtów

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"

Wypróbuj online!

Birjolaxew
źródło
(n%2+(i==n))%2można uprościć do (n+(i==n))%2.
Neil
Lub 1&n^i==nmoże działać, ale go nie przetestowałem.
Neil
Spróbuj także n--?...:[]. (I nie potrzebujesz ;golfa w kodzie).
Neil
2*n+1być może n-~n, ale nigdy nie pamiętam na pewno.
Neil
@Neil Thanks! Dodano te, które mogłem uruchomić
Birjolaxew
0

Haskell , 54 bajty

Proste zrozumienie listy:

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

Wypróbuj online!

ბიმო
źródło
0

J, 32 bajty

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

Wypróbuj online!Jest to anonimowa funkcja, która zwraca pudełkową listę wartości.

Lubię sobie wyobrażać, że wyraźna definicja funkcji oszczędza bajty dzięki usunięciu wielkich liter i tym podobnych, ale prawdopodobnie dodaje kilka bajtów w porównaniu do milczącej odpowiedzi.

Wyjaśnienie

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
kapusta
źródło
0

05AB1E , 11 bajtów

FN°SRNF_}ûˆ

Wypróbuj online!

Wyjaśnienie

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
źródło
0

J , 17 bajtów

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

Wypróbuj online!

Zwraca listę tablic w ramkach.

Wyjaśnienie

(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)
mile
źródło
0

Java 8, 121 111 109 101 bajtów

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

Mój aktualny wynik bajtów (101) to także rząd trójkąta binarnego. :)

Wyjaśnienie:

Wypróbuj tutaj.

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
źródło