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!


¿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

Se puede reemplazar ¶Çcon el µde -1.
Erik the Outgolfer

@EriktheOutgolfer ooh gracias!
HyperNeutrino


3

Jalea , 8 bytes

⁼€=ḂŒḄµ€

Pruébalo en línea!

-2 gracias a HyperNeutrino .


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

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

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í


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í ).


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

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;


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.


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:



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]])&,#]&


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

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


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!


(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

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

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)

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.