Triangolo binario facile


18

Dato come input un numero intero positivo n>=1, genera le prime nrighe del seguente triangolo:

                  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

Le righe si alternano tra tutti gli zero e tutti, tranne che la colonna centrale è invertita.

Casi test

  • Input :3

  • Uscita :

        1
      1 0 1
    0 0 1 0 0
    
  • Input :10

  • Uscita :

                      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
    

Il tuo codice deve funzionare per qualsiasi n<100. Questo è , quindi vince il codice più breve in byte!

Sono ammessi spazi finali / newline e newline principali!


Lo spazio bianco in eccesso è accettabile e, in caso affermativo, quale (linee guida / linee guida / trailing / formazione)?
Jonathan Allan,

1
Possiamo restituire un elenco di elenchi di numeri?
Erik the Outgolfer,

8
@EriktheOutgolfer elenco di elenchi va bene!

1
Dato che un elenco di elenchi va bene, suppongo che l'allineamento centrato non sia necessario, vero?
Luis Mendo,

1
È la tua sfida, ma secondo me se sei abbastanza flessibile da consentire un elenco di elenchi non ha senso essere rigoroso con la formattazione
Luis Mendo

Risposte:


7

Gelatina , 7 byte

Ṭ=Ḃµ€ŒB

Provalo online!

-1 byte grazie a Erik the Outgolfer

Spiegazione

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

È possibile sostituire ¶Çcon µper -1.
Erik the Outgolfer,

@EriktheOutgolfer ooh grazie!
HyperNeutrino,

4

Python 2 , 50 byte

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

Provalo online!

Ciò restituisce le righe come un elenco di stringhe.

Python 2 , 67 65 63 byte (formattato)

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

Provalo online!

Ciò genera uno spazio finale su ogni riga.


3

Gelatina , 8 byte

⁼€=ḂŒḄµ€

Provalo online!

-2 grazie a HyperNeutrino .


Oh seriamente .... split second ninjad: p
Jonathan Allan

@JonathanAllan È stato davvero un cambio di regola ... a proposito penso che anche questo sia giocabile a golf ...
Erik the Outgolfer

sì, avevo una griglia di 15 byte, quindi gli elenchi di 10 byte ...
Jonathan Allan,

1
@JonathanAllan Hyper sta andando bene ...
Erik the Outgolfer

¬^Ḃpuò diventare =Ḃperché NOT (XOR (A B))è solo una IFF (A B) modifica apparentemente ho giocato a golf più di quanto pensassi di avere o_O lol
HyperNeutrino


3

Japt , 12 9 byte

õÈÇ¥Y^uÃê

Provalo online!

Abbastanza triste rispetto a Jelly, ma Japt non ha niente del genere, quindi devo accontentarmi di quello che ho ...

Spiegazione

 õÈ   Ç   ¥ 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

Evviva per i builtin: P: P: P
HyperNeutrino

Yaay, qualcuno ha rotto la catena Python-Jelly-Python-Jelly!
Mr. Xcoder,

@ Mr.Xcoder Dove Jelly è davvero implementato in Python. : p
Erik the Outgolfer

3

Mathematica, 77 byte

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

@Non un albero lo ha golfato fino a 48 byte!

Mathematica, 48 byte

#&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&

Eh, non pensavo di considerarlo un automa cellulare. Bello!
HyperNeutrino,

2
La stessa cosa ma più golfista: #&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&48 byte
Non un albero il

3

Pyth , 14 byte

Grazie a @Jakube per aver salvato 2 byte!

ms_+Bm%d2d%hd2

Provalo qui!

Pyth , 15 byte

Grazie mille a @Jakube per -1 byte

m++K*d]%d2%td2K

Provalo qui.

Pyth , 16 byte

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

Provalo qui.


Rimuovi il secondo ]dal primo codice.
Jakube,

@Jakube Sì, grazie. Dimenticato l'elenco automatico per aggiungere elementi agli elenchi.
Mr. Xcoder,

Ed ecco una soluzione di 14 byte:ms_+Bm%d2d%hd2
Jakube

@Jakube Sì, stavo pensando alla biforcazione in questo momento, ma non potevo farlo da quando sono sul cellulare. Grazie ancora!
Mr. Xcoder,

3

R , 73 byte

Grazie a Giuseppe! Bella presa.

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

Provalo online!

R , 78 byte

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

Provalo online!

R , 82 byte

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

Provalo online!

R , 110 byte - output su 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")

Provalo online!

R , 130 byte - output in un file

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)

Provalo online!

Scrivere su un file perché non so come inserirlo nella console se n==99(vedi il risultato qui ).


2
Non penso che tu debba preoccuparti della console che lo avvolge per n più grandi. Personalmente vorrei abbandonare il file = "a" poiché l'output su STDOUT è corretto.
MickyT,


1

Pascal , 181 154 byte

27 byte salvati grazie 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;

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


1

Retina , 25 byte

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

Provalo online! Spiegazione: Il primo stadio converte l'input in una stringa di zeri di quella lunghezza. Il secondo stadio prende quindi tutti i prefissi di quella stringa (esclusa la stringa stessa) e li prefigge un 1. Il terzo stadio quindi attiva / disattiva i bit su linee alternate.


1

05AB1E , 24 21 18 byte

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

Provalo online!


Modifica: Beh, è ​​il mio primo golf 05AB1E, quindi non mi sorprende che le cose possano essere giocate a golf. Modifica cronologia:



1

Mathematica, 90 byte

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


0

Carbone , 18 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:

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 byte (con una formattazione corretta)

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}

Provalo online


Se non lo sapevi, puoi usare A=Arrayper salvare 8 byte.

Bene, non ci avevo pensato
David Bailey,

È possibile salvare almeno altri 3 byte per: 1) Invece di A=Array;inizializzare la variabile Aalla prima chiamata di array (es. for(x of(A=Array)(n))) Che salva 1 byte, 2) Sostituire '\n'con una nuova linea letterale (usare accenti gravi), 3) Non bisogno di parentesi (b+1)%2perché è equivalente a b+1&1.

0

JavaScript (ES6) , 74 73 71 68 64 byte

-7 byte di @Neil

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

Provalo online!

Semplice funzione ricorsiva che genera le linee una per una. Output come array di array di numeri.


Output come stringa formattata:

JavaScript (ES6) , 122 119 118 byte

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"

Provalo online!


(n%2+(i==n))%2può essere semplificato a (n+(i==n))%2.
Neil,

O 1&n^i==npotrebbe funzionare, ma non l'ho provato.
Neil,

Prova anche n--?...:[]. (E non hai bisogno del ;codice nel golf.)
Neil

2*n+1potrebbe essere n-~n, ma non ricordo mai di sicuro.
Neil,

@Neil Grazie! Aggiunti quelli su cui potevo lavorare
Birjolaxew,


0

J, 32 byte

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

Provalo online!Questa è una funzione anonima che restituisce un elenco inscatolato di valori.

Mi piace immaginare che la definizione di funzione esplicita salvi i byte in virtù della rimozione di maiuscole e simili, ma probabilmente aggiunge alcuni byte rispetto a una risposta tacita.

Spiegazione

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 byte

FN°SRNF_}ûˆ

Provalo online!

Spiegazione

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 byte

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

Provalo online!

Emette un elenco di array inscatolati.

Spiegazione

(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 101 byte

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

Il mio attuale byte-score (101) è anche una riga del triangolo binario. :)

Spiegazione:

Provalo qui.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.