Triângulo binário fácil

18

Dado como entrada um número inteiro positivo n>=1, imprima as primeiras nlinhas do seguinte triângulo:

                  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

As linhas alternam entre todos os zeros e todos, exceto que a coluna central é invertida.

Casos de teste

  • Entrada :3

  • Saída :

        1
      1 0 1
    0 0 1 0 0
    
  • Entrada :10

  • Saída :

                      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
    

Seu código deve funcionar para qualquer n<100. Este é o , portanto o código mais curto em bytes vence!

Espaços à direita / novas linhas e novas linhas principais são permitidos!

xnor
fonte
O excesso de espaço em branco é aceitável e, em caso afirmativo, quais (linhas iniciais / linhas iniciais / finais / de treinamento)?
Jonathan Allan
1
Podemos retornar uma lista de listas de números?
Erik the Outgolfer
8
A lista de listas do @EriktheOutgolfer está boa!
1
Como uma lista de listas é boa, suponho que o alinhamento centralizado não seja necessário, é?
Luis Mendo
1
É o seu desafio, mas na minha opinião, se você é flexível o suficiente para permitir uma lista de listas que não faz qualquer sentido para ser rigoroso com a formatação
Luis Mendo

Respostas:

7

Geléia , 7 bytes

Ṭ=Ḃµ€ŒB

Experimente online!

-1 byte graças a Erik the Outgolfer

Explicação

Ṭ=Ḃµ€Œ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
fonte
Você pode substituir ¶Çcom µa -1.
Erik the Outgolfer
@EriktheOutgolfer ooh thanks!
HyperNeutrino
4

Python 2 , 50 bytes

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

Experimente online!

Isso retorna as linhas como uma lista de Strings.

Python 2 , 67 65 63 bytes (formatado)

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

Experimente online!

Isso gera um espaço à direita em cada linha.

Mr. Xcoder
fonte
3

Gelatina , 8 bytes

⁼€=ḂŒḄµ€

Experimente online!

-2 graças ao HyperNeutrino .

Erik, o Outgolfer
fonte
Oh a sério .... fração de segundo ninjad: p
Jonathan Allan
@JonathanAllan Foi realmente uma mudança de regra ... btw acho que este é golfable também ...
Erik o Outgolfer
sim, eu tinha uma grade de 15 bytes, em seguida, as listas de 10 bytes ...
Jonathan Allan
1
@JonathanAllan Hiper está sendo bom ...
Erik o Outgolfer
¬^Ḃpodem tornar-se =Ḃporque NOT (XOR (A B))é apenas IFF (A B) editar aparentemente eu golfed mais do que eu pensei que tinha o_O lol
HyperNeutrino
3

Japonês , 12 9 bytes

õÈÇ¥Y^uÃê

Teste online!

Bastante triste comparado com Jelly, mas Japt não tem nada parecido, então devo me contentar com o que tenho ...

Explicação

 õÈ   Ç   ¥ 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
ETHproductions
fonte
Hooray for builtins: P: P: P
HyperNeutrino
Sim, alguém quebrou a cadeia Python-Jelly-Python-Jelly!
Mr. Xcoder
@ Mr.Xcoder Onde o Jelly é realmente implementado em Python. : p
Erik the Outgolfer
3

Mathematica, 77 bytes

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

@ Não é uma árvore que reduziu para 48 bytes!

Mathematica, 48 bytes

#&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&
J42161217
fonte
Não pensei em considerá-lo um autômato celular. Agradável!
HyperNeutrino
2
A mesma coisa, mas golfier:, #&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&48 bytes
Não é uma árvore
3

Pitão , 14 bytes

Obrigado a @Jakube por salvar 2 bytes!

ms_+Bm%d2d%hd2

Experimente aqui!

Pitão , 15 bytes

Muito obrigado a @Jakube por -1 byte

m++K*d]%d2%td2K

Experimente aqui.

Pitão , 16 bytes

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

Experimente aqui.

Mr. Xcoder
fonte
Remova o segundo ]no primeiro código.
Jakube
@Jakube Sim, obrigado. Esqueceu a lista automática para anexar elementos às listas.
Mr. Xcoder
E aqui está uma solução de 14 bytes:ms_+Bm%d2d%hd2
Jakube
@Jakube Sim, eu estava pensando em bifurcação agora, mas não consegui fazer isso porque estou no celular. Muito obrigado novamente!
Mr. Xcoder
3

R , 73 bytes

Graças a Giuseppe! Boa pegada.

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

Experimente online!

R , 78 bytes

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

Experimente online!

R , 82 bytes

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

Experimente online!

R , 110 bytes - saída para 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")

Experimente online!

R , 130 bytes - saída para um arquivo

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)

Experimente online!

Escrevendo para um arquivo como eu não sei como encaixá-lo no console se n==99(veja o resultado aqui ).

djhurio
fonte
2
Eu não acho que você precise se preocupar com o console envolvendo-o para n maiores. Pessoalmente, abandonaria o arquivo = "a", pois a saída para STDOUT está correta.
MickyT
1
73 bytes
Giuseppe
1

Pascal , 181 154 bytes

27 bytes salvos graças a @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;

Experimente online!

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;
Uriel
fonte
1
126 bytes
tsh
1

Retina , 25 bytes

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

Experimente online! Explicação: O primeiro estágio converte a entrada em uma sequência de zeros desse comprimento. O segundo estágio pega todos os prefixos dessa sequência (sem incluir a própria sequência) e prefixa um 1 para eles. O terceiro estágio alterna os bits em linhas alternativas.

Neil
fonte
1

05AB1E , 24 21 18 bytes

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

Experimente online!


Edit: Bem, é o meu primeiro golfe 05AB1E, então não estou surpreso que as coisas possam ser jogadas. Editar histórico:

LarsW
fonte
1

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

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

Experimente online!

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

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

Experimente online!

Xcali
fonte
1

Mathematica, 90 bytes

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

Carvão , 18 bytes

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

Experimente online! Link é a versão detalhada do código. Explicaçã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
Neil
fonte
0

JavaScript, 140 132 bytes (com formatação adequada)

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}

Experimente Online

David Bailey
fonte
Se você não sabia, pode usar A=Arraypara salvar 8 bytes.
Bom ponto, eu não pensei nisso #
David Bailey
Você pode salvar pelo menos mais 3 bytes: 1) Em vez de A=Array;iniciar a variável Ana primeira chamada de matriz (ou seja, for(x of(A=Array)(n))) que economiza 1 byte, 2) Substitua '\n'por nova linha literal (use sotaques graves), 3) Você não precisa de parênteses (b+1)%2porque é equivalente a b+1&1.
0

JavaScript (ES6) , 74 73 71 68 64 bytes

-7 bytes por @Neil

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

Experimente online!

Função recursiva simples que gera as linhas uma a uma. Saídas como matriz de matriz de números.


Saídas como string formatada:

JavaScript (ES6) , 122 119 118 bytes

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"

Experimente online!

Birjolaxew
fonte
(n%2+(i==n))%2pode ser simplificado para (n+(i==n))%2.
Neil
Ou 1&n^i==npode funcionar, mas não testei.
Neil
Também tente n--?...:[]. (E você não precisa do ;no golfe código.)
Neil
2*n+1Pode ser n-~n, mas nunca me lembro com certeza.
Neil
@ Neil Obrigado! Adicionado os que eu poderia começar a trabalhar
Birjolaxew
0

Haskell , 54 bytes

Compreensão direta da lista:

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

Experimente online!

ბიმო
fonte
0

J, 32 bytes

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

Experimente online!Esta é uma função anônima que retorna uma lista de valores em caixa.

Eu gosto de imaginar que a definição de função explícita salva bytes em virtude da remoção de caps e tal, mas provavelmente adiciona alguns bytes em comparação com uma resposta tácita.

Explicação

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
fonte
0

05AB1E , 11 bytes

FN°SRNF_}ûˆ

Experimente online!

Explicação

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
fonte
0

J , 17 bytes

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

Experimente online!

Produz uma lista de matrizes in a box.

Explicação

(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)
milhas
fonte
0

Java 8, 121 111 109 101 bytes

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

Minha pontuação de bytes atual (101) também é uma linha do triângulo binário. :)

Explicação:

Experimente aqui.

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
fonte