Triangle binaire facile

18

Étant donné en entrée un entier positif n>=1, sortez les premières nlignes du triangle suivant:

                  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

Les lignes alternent entre tous les zéros et tous les uns, sauf que la colonne centrale est inversée.

Cas de test

  • Entrée :3

  • Sortie :

        1
      1 0 1
    0 0 1 0 0
    
  • Entrée :10

  • Sortie :

                      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
    

Votre code doit fonctionner pour tout n<100. C'est le , donc le code le plus court en octets gagne!

Les espaces de fin / les nouvelles lignes et les nouvelles lignes de début sont autorisés!

xnor
la source
L'excès d'espace blanc est-il acceptable et si oui, lequel (lignes d'attaque / lignes d'attaque / de fuite / d'entraînement)?
Jonathan Allan
1
Pouvons-nous retourner une liste de listes de numéros?
Erik the Outgolfer
8
La liste de listes @EriktheOutgolfer est très bien!
1
Puisqu'une liste de listes est très bien, je suppose que l'alignement centré n'est pas requis, n'est-ce pas?
Luis Mendo
1
C'est votre défi, mais à mon avis, si vous êtes suffisamment flexible pour autoriser une liste de listes, cela n'a aucun sens d'être strict avec le formatage
Luis Mendo

Réponses:

7

Gelée , 7 octets

Ṭ=Ḃµ€ŒB

Essayez-le en ligne!

-1 octet grâce à Erik l'Outgolfer

Explication

Ṭ=Ḃµ€Œ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
la source
Vous pouvez remplacer ¶Çpar µpour -1.
Erik the Outgolfer
@EriktheOutgolfer ooh merci!
HyperNeutrino
4

Python 2 , 50 octets

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

Essayez-le en ligne!

Cela renvoie les lignes sous forme de liste de chaînes.

Python 2 , 67 65 63 octets (formaté)

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

Essayez-le en ligne!

Cela génère un espace de fin sur chaque ligne.

M. Xcoder
la source
3

Gelée , 8 octets

⁼€=ḂŒḄµ€

Essayez-le en ligne!

-2 grâce à HyperNeutrino .

Erik le Outgolfer
la source
Oh sérieusement .... split second ninjad: p
Jonathan Allan
@JonathanAllan C'était vraiment un changement de règle ... btw Je pense que c'est aussi jouable au golf ...
Erik the Outgolfer
ouais j'avais une grille de 15 octets puis les listes de 10 octets ...
Jonathan Allan
1
@JonathanAllan Hyper va bien ...
Erik the Outgolfer
¬^Ḃpeut devenir =Ḃparce qu'il NOT (XOR (A B))suffit de IFF (A B) modifier apparemment j'ai joué plus que je ne pensais en avoir o_O lol
HyperNeutrino
3

Japt , 12 9 octets

õÈÇ¥Y^uÃê

Testez-le en ligne!

Assez légèrement triste par rapport à Jelly, mais Japt n'a rien de tel, donc je dois faire avec ce que j'ai ...

Explication

 õÈ   Ç   ¥ 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
la source
Hourra pour les builtins: P: P: P
HyperNeutrino
Yaay, quelqu'un a cassé la chaîne Python-Jelly-Python-Jelly!
M. Xcoder
@ Mr.Xcoder Où Jelly est vraiment implémenté en Python. : p
Erik the Outgolfer
3

Mathematica, 77 octets

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

@Not a tree golfed it down to 48 bytes!

Mathematica, 48 octets

#&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&
J42161217
la source
Huh, je n'ai pas pensé à le considérer comme un automate cellulaire. Agréable!
HyperNeutrino
2
La même chose mais golfier:, #&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&48 octets
Pas un arbre
3

Pyth , 14 octets

Merci à @Jakube pour avoir économisé 2 octets!

ms_+Bm%d2d%hd2

Essayez-le ici!

Pyth , 15 octets

Merci beaucoup à @Jakube pour -1 octet

m++K*d]%d2%td2K

Essayez-le ici.

Pyth , 16 octets

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

Essayez-le ici.

M. Xcoder
la source
Supprimez le second ]dans le premier code.
Jakube
@Jakube Ouais, merci. Oublié l'auto-listification pour ajouter des éléments aux listes.
M. Xcoder
Et voici une solution de 14 octets:ms_+Bm%d2d%hd2
Jakube
@Jakube Oui, je pensais à la bifurcation en ce moment, mais je ne pouvais pas le faire puisque je suis sur mobile. Merci encore beaucoup!
M. Xcoder
3

R , 73 octets

Merci à Giuseppe! Belle prise.

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

Essayez-le en ligne!

R , 78 octets

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

Essayez-le en ligne!

R , 82 octets

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

Essayez-le en ligne!

R , 110 octets - sortie vers sortie standard

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

Essayez-le en ligne!

R , 130 octets - sortie dans un fichier

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)

Essayez-le en ligne!

Écriture dans un fichier car je ne sais pas comment l'adapter à la console si n==99(voir le résultat ici ).

djhurio
la source
2
Je ne pense pas que vous ayez à vous soucier de la console qui l'enveloppe pour des n plus grands. Personnellement, j'abandonnerais le fichier = "a" car la sortie vers STDOUT est correcte.
MickyT
1
73 octets
Giuseppe
1

Pascal , 181 154 octets

27 octets enregistrés grâce à @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;

Essayez-le en ligne!

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
la source
1
126 octets
tsh
1

Rétine , 25 octets

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

Essayez-le en ligne! Explication: La première étape convertit l'entrée en une chaîne de zéros de cette longueur. La deuxième étape prend alors tous les préfixes de cette chaîne (sans inclure la chaîne elle-même) et leur préfixe un 1. La troisième étape bascule ensuite les bits sur des lignes alternées.

Neil
la source
1

05AB1E , 24 21 18 octets

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

Essayez-le en ligne!


Edit: Eh bien, c'est mon premier golf 05AB1E, donc je ne suis pas surpris que des choses puissent être jouées. Modifier l'historique:

LarsW
la source
1

Mathematica, 90 octets

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

Fusain , 18 octets

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

Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:

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
la source
0

JavaScript, 140 132 octets (avec un formatage approprié)

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}

Essayez-le en ligne

David Bailey
la source
Si vous ne le saviez pas, vous pouvez utiliser A=Arraypour économiser 8 octets.
Bon point, je n'y ai pas pensé
David Bailey
Vous pouvez enregistrer au moins 3 octets supplémentaires par: 1) Au lieu de A=Array;vous, vous pouvez initier une variable Alors du premier appel de tableau (c.-à-d. for(x of(A=Array)(n))) Qui enregistre 1 octet, 2) Remplacer '\n'par une nouvelle ligne littérale (utiliser des accents graves), 3) Vous ne le faites pas besoin de parenthèses (b+1)%2car il est équivalent à b+1&1.
0

JavaScript (ES6) , 74 73 71 68 64 octets

-7 octets par @Neil

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

Essayez-le en ligne!

Fonction récursive simple qui génère les lignes une par une. Sorties sous forme de tableau de tableau de nombres.


Sorties sous forme de chaîne formatée:

JavaScript (ES6) , 122 119 118 118 octets

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"

Essayez-le en ligne!

Birjolaxew
la source
(n%2+(i==n))%2peut être simplifié en (n+(i==n))%2.
Neil
Ou 1&n^i==npourrait fonctionner, mais je ne l'ai pas testé.
Neil
Essayez aussi n--?...:[]. (Et vous n'avez pas besoin du ;golf en code.)
Neil
2*n+1peut-être n-~n, mais je ne me souviens jamais avec certitude.
Neil
@Neil Merci! Ajout de ceux que je pourrais travailler
Birjolaxew
0

Haskell , 54 octets

Compréhension simple de la liste:

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

Essayez-le en ligne!

ბიმო
la source
0

J, 32 octets

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

Essayez-le en ligne!Il s'agit d'une fonction anonyme qui renvoie une liste encadrée de valeurs.

J'aime imaginer que la définition de fonction explicite économise des octets en vertu de la suppression des majuscules et autres, mais elle ajoute probablement quelques octets par rapport à une réponse tacite.

Explication

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
la source
0

05AB1E , 11 octets

FN°SRNF_}ûˆ

Essayez-le en ligne!

Explication

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
la source
0

J , 17 octets

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

Essayez-le en ligne!

Génère une liste de tableaux encadrés.

Explication

(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)
miles
la source
0

Java 8, 121 111 109 101 101 octets

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

Mon octet-score actuel (101) est également une ligne du triangle binaire. :)

Explication:

Essayez-le ici.

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
la source