Triángulo binario fácil

18

Dado como entrada un entero positivo n>=1, genera las primeras nfilas del siguiente 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

Las filas se alternan entre todos los ceros y todos, excepto que la columna central se voltea.

Casos de prueba

  • Entrada :3

  • Salida :

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

  • Salida :

                      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
    

Su código debe funcionar para cualquiera n<100. Este es el , por lo tanto, gana el código más corto en bytes.

¡Se permiten espacios finales / líneas nuevas y líneas nuevas iniciales!

xnor
fuente
¿Es aceptable el exceso de espacio en blanco y, de ser así, cuál (líneas principales / líneas principales / finales / líneas de entrenamiento)?
Jonathan Allan
1
¿Podemos devolver una lista de listas de números?
Erik the Outgolfer
8
¡La lista de listas de @EriktheOutgolfer está bien!
1
Como una lista de listas está bien, supongo que no es necesaria la alineación centrada, ¿verdad?
Luis Mendo
1
Es su desafío, pero en mi opinión, si es lo suficientemente flexible como para permitir una lista de listas, no tiene sentido ser estricto con el formato
Luis Mendo

Respuestas:

7

Jalea , 7 bytes

Ṭ=Ḃµ€ŒB

Pruébalo en línea!

-1 byte gracias a Erik the Outgolfer

Explicación

Ṭ=Ḃµ€Œ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
Hiperneutrino
fuente
Se puede reemplazar ¶Çcon el µde -1.
Erik the Outgolfer
@EriktheOutgolfer ooh gracias!
HyperNeutrino
4

Python 2 , 50 bytes

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

Pruébalo en línea!

Esto devuelve las filas como una lista de cadenas.

Python 2 , 67 65 63 bytes (formateado)

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

Pruébalo en línea!

Esto genera un espacio final en cada línea.

Sr. Xcoder
fuente
3

Jalea , 8 bytes

⁼€=ḂŒḄµ€

Pruébalo en línea!

-2 gracias a HyperNeutrino .

Erik el Outgolfer
fuente
Oh, en serio ... fracción de segundo ninjad: p
Jonathan Allan
@JonathanAllan Fue realmente un cambio de reglas ... por cierto, creo que esto también es golfable ...
Erik the Outgolfer
Sí, tenía una cuadrícula de 15 bytes y luego las listas de 10 bytes ...
Jonathan Allan
1
@JonathanAllan Hyper está siendo bueno ...
Erik the Outgolfer
¬^Ḃpuede ser =Ḃporque NOT (XOR (A B))es solo IFF (A B) editar, aparentemente jugué al golf más de lo que pensaba que tenía o_O lol
HyperNeutrino
3

Japt , 12 9 bytes

õÈÇ¥Y^uÃê

¡Pruébalo en línea!

Bastante triste en comparación con Jelly, pero Japt no tiene nada parecido, así que debo conformarme con lo que tengo ...

Explicación

 õÈ   Ç   ¥ 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
ETHproducciones
fuente
¡Hurra por los builtins!: P: P: P
HyperNeutrino
Yaay, alguien rompió la cadena Python-Jelly-Python-Jelly!
Sr. Xcoder
@ Mr.Xcoder Donde Jelly realmente se implementa en Python. : p
Erik the Outgolfer
3

Mathematica, 77 bytes

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

¡Ningún árbol lo ha reducido a 48 bytes!

Mathematica, 48 bytes

#&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&
J42161217
fuente
Huh, no pensé en considerarlo un autómata celular. ¡Agradable!
HyperNeutrino
2
Lo mismo pero más golfista: #&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&48 bytes
No es un árbol
3

Pyth , 14 bytes

¡Gracias a @Jakube por guardar 2 bytes!

ms_+Bm%d2d%hd2

Pruébalo aquí!

Pyth , 15 bytes

Muchas gracias a @Jakube por -1 byte

m++K*d]%d2%td2K

Pruébalo aquí

Pyth , 16 bytes

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

Pruébalo aquí

Sr. Xcoder
fuente
Elimine el segundo ]en el primer código.
Jakube
@Jakube Sí, gracias. Se olvidó de la lista automática para agregar elementos a las listas.
Sr. Xcoder
Y aquí hay una solución de 14 bytes:ms_+Bm%d2d%hd2
Jakube
@Jakube Sí, estaba pensando en la bifurcación en este momento, pero no pude hacerlo ya que estoy en el móvil. ¡Muchas gracias de nuevo!
Sr. Xcoder
3

R , 73 bytes

Gracias a Giuseppe! Buena atrapada.

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

Pruébalo en línea!

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

Pruébalo en línea!

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

Pruébalo en línea!

R , 110 bytes - salida a 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")

Pruébalo en línea!

R , 130 bytes: salida a un archivo

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)

Pruébalo en línea!

Escribir en un archivo ya que no sé cómo encajarlo en la consola si n==99(vea el resultado aquí ).

djhurio
fuente
2
No creo que deba preocuparse por la consola que lo envuelve para n más grandes. Personalmente, abandonaría el archivo = "a" ya que la salida a STDOUT es correcta.
MickyT
1
73 bytes
Giuseppe
1

Pascal , 181 154 bytes

27 bytes guardados gracias 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;

Pruébalo en línea!

Sin pelar

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
fuente
1
126 bytes
tsh
1

Retina , 25 bytes

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

Pruébalo en línea! Explicación: La primera etapa convierte la entrada en una cadena de ceros de esa longitud. La segunda etapa toma todos los prefijos de esa cadena (sin incluir la cadena en sí) y les asigna un 1 como prefijo. La tercera etapa alterna los bits en líneas alternas.

Neil
fuente
1

05AB1E , 24 21 18 bytes

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

Pruébalo en línea!


Editar: Bueno, es mi primer golf 05AB1E, así que no me sorprende que las cosas se puedan jugar al golf. Editar historial:

LarsW
fuente
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]])&,#]&
Sr. Xcoder
fuente
0

Carbón , 18 bytes

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

Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:

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

JavaScript, 140 132 bytes (con el formato adecuado)

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}

Pruébalo en línea

David Bailey
fuente
Si no lo sabía, puede usar A=Arraypara guardar 8 bytes.
Buen punto, no pensé en eso
David Bailey
Puede guardar al menos 3 bytes más: 1) En lugar de A=Array;que pueda iniciar la variable Aen la primera llamada de matriz (es decir for(x of(A=Array)(n))), que ahorra 1 byte, 2) Reemplace '\n'con una nueva línea literal (use acentos graves), 3) No necesita paréntesis (b+1)%2porque es 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)]:[]

Pruébalo en línea!

Función recursiva simple que genera las líneas una por una. Salidas como conjunto de conjunto de números.


Salidas como cadena formateada:

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"

Pruébalo en línea!

Birjolaxew
fuente
(n%2+(i==n))%2se puede simplificar a (n+(i==n))%2.
Neil
O 1&n^i==npodría funcionar, pero no lo he probado.
Neil
Intenta también n--?...:[]. (Y no necesita el ;código de golf.)
Neil
2*n+1podría ser n-~n, pero nunca puedo recordar con certeza.
Neil
@Neil ¡Gracias!
Agregué
0

J, 32 bytes

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

Pruébalo en línea!Esta es una función anónima que devuelve una lista de valores en recuadro.

Me gusta imaginar que la definición de función explícita ahorra bytes en virtud de eliminar mayúsculas y demás, pero probablemente agrega unos pocos bytes en comparación con una respuesta tácita.

Explicación

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
col
fuente
0

05AB1E , 11 bytes

FN°SRNF_}ûˆ

Pruébalo en línea!

Explicación

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

J , 17 bytes

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

Pruébalo en línea!

Emite una lista de matrices en caja.

Explicación

(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)
millas
fuente
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;}

Mi actual byte-score (101) también es una fila del triángulo binario. :)

Explicación:

Pruébalo aquí

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
fuente