Pyramide entière ascendante

18

Sortez soit le texte ci-dessous, soit une liste de listes d'entiers (plus de détails ci-dessous).

 0
10  1
20 11  2
30 21 12  3
40 31 22 13  4
50 41 32 23 14  5
60 51 42 33 24 15  6
70 61 52 43 34 25 16  7
80 71 62 53 44 35 26 17  8
90 81 72 63 54 45 36 27 18  9
91 82 73 64 55 46 37 28 19
92 83 74 65 56 47 38 29
93 84 75 66 57 48 39
94 85 76 67 58 49
95 86 77 68 59
96 87 78 69
97 88 79
98 89
99

Règles

  • Si vous le souhaitez, vous pouvez "un index" et les remplacer npar n+1. Dans ce cas, la sortie contiendra les chiffres de 1 à 100 inclus.

Si la sortie est du texte

  • Les chiffres simples sont alignés à droite dans chaque colonne du texte fourni, mais c'est bien si vous souhaitez aligner à gauche. En outre, l'alignement n'est pas nécessaire pour être cohérent entre les colonnes.
  • Les espaces blancs avant / arrière sont autorisés. Les espaces de fin sur chaque ligne sont également autorisés.
  • Le retour d'une liste de lignes est acceptable.

Si la sortie est numérique

  • La sortie peut être une liste de listes d'entiers (ou tableau 2D): [[1], [11, 2], [21...
  • Les flotteurs vont bien.
  • S'il n'est pas possible d'avoir un tableau non rectangulaire dans le langage utilisé, les éléments du tableau qui ne sont pas dans le triangle peuvent prendre n'importe quelle valeur et seront ignorés.

Si vous préférez un autre format, n'hésitez pas à demander.

Le code le plus court gagne.

dylnan
la source
Sandbox
dylnan
Étant donné que les espaces blancs de début / fin sont autorisés dans la sortie textuelle, les listes vides de début / fin sont-elles autorisées dans la sortie de liste?
Jonathan Allan
@JonathanAllan Sure
dylnan
je ne peux pas le modifier, mais cela devrait avoir la balise de complexité kolmogorov (je ne suis pas sûr d'avoir épelé cela correctement ...)
Brian H.
@BrianH. Selon d'autres, puisqu'il n'y a pas vraiment une seule constante destinée à être produite, la balise KC ne s'applique pas ici
dylnan

Réponses:

10

Gelée ,  13 12 10  6 octets

-4 merci à Dennis, oui QUATRE! (utilisation d'indices de groupe et de produit cartésien)

⁵pḅ1ĠU

Utilise l'indexation 1 et l'option de liste pour la sortie.

Essayez-le en ligne! (Le pied de page formate la sortie en représentation Python)
... ou consultez une version formatée indexée 0 .

Comment?

⁵pḅ1ĠU - Main link: no arguments
⁵      - literal 10
 p     - Cartesian product (with the leading constant of 10 and implicit ranges)
       -       = [[1,1],[1,2],[1,3],...,[10,8],[10,9],[10,10]]
  ḅ1   - to base one (proxy for sum each without the monad)
       -       = [2,3,4,5,6,7,8,9,10,11,3,4,5,6,7,8,9,10,11,12,4,...,18,19,20]
    Ġ  - group indices by value
       -       = [[1],[2,11],[3,12,21],...,[90,99],[100]]
     U - upend = [[1],[11,2],[21,12,3],...,[99,90],[100]] 
Jonathan Allan
la source
1
Agréable. J'avais 7 octets
dylnan
Que fait le monde Ġ?!
Urne de poulpe magique
1
@MagicOctopusUrn il regroupe les indices d'un tableau par leur valeur correspondante. Ainsi [5,7,5,9]Ġreviendrait [[1,3],[2],[4]]. En effet, les indices [1,3]correspondent à la valeur 5du tableau d'origine, [2]to 7et [4]to 9.
dylnan
5

Python 2 , 54 octets

k=1
exec"print range(k,0,-9)[:101-k];k+=10-k/91*9;"*19

Essayez-le en ligne!

(1 indexé, car range(k,0,-9)est plus court que range(k,-1,-9).)

Lynn
la source
4

Fusain , 29 20 octets

E¹⁹⪫I⮌Φ¹⁰⁰⁼ι⁺÷λχ﹪λχ 

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

 ¹⁹                     Literal 19
E                       Map over implicit range
       ¹⁰⁰              Literal 100
      Φ                 Filter over implicit range
              λ  λ      Inner index
               χ  χ     Predefined variable 10
                ﹪       Modulo
             ÷          Integer divide
            ⁺           Sum
           ι            Outer index
          ⁼             Equals
     ⮌                  Reverse
    I                   Cast to string
   ⪫                    Join with spaces
                        Implicitly print each string on its own line
Neil
la source
4

JavaScript (ES6), 61 octets

Basé sur 0. Renvoie une chaîne.

f=(k=n=0)=>k>98?k:k+((k-=9)%10>0?' '+f(k):`
`+f(n+=n>89||10))

Essayez-le en ligne!

Comment?

Nous commençons avec k = n = 0 et arrêtons lorsque k = 99 . Nous soustrayons 9 de k à chaque itération.

La fin des lignes est détectée avec k % 10 <= 0. Cette condition est remplie si:

  • k est négatif (partie supérieure de la pyramide) car le signe du modulo en JS est celui du dividende.

     0 (-9)
    10  1 (-8)
    20 11  2 (-7)
    
  • ou k% 10 == 0 (partie inférieure de la pyramide)

    90 81 72 63 54 45 36 27 18  9 (0)
    91 82 73 64 55 46 37 28 19 (10)
    92 83 74 65 56 47 38 29 (20)
    

Au début de la ligne suivante, nous ajoutons 1 ou 10 à n et recommençons à partir de là.

Arnauld
la source
3

J , 14 octets

,.<@|./.i.,~10

Essayez-le en ligne!

Remarque:

Cette solution utilise une sortie encadrée - je ne sais pas si elle est autorisée (j'espère que oui, car les listes d'entiers sont également autorisées)

Alternative:

J , 10 octets

|./.i.,~10

Dans cette solution, les nombres en dehors de la zone triangulaire sont affichés comme 0

Essayez-le en ligne!

Explication:

i.,~10crée une matrice 10x10 des nombres 0..99 ,~10est l'abréviation de10 10

   i.,~10
 0  1  2  3  4  5  6  7  8  9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99

/. trouve les diagonales obliques (antidiagonales) de la matrice

   ]/.i.,~10
 0  0  0  0  0  0  0  0  0  0
 1 10  0  0  0  0  0  0  0  0
 2 11 20  0  0  0  0  0  0  0
 3 12 21 30  0  0  0  0  0  0
 4 13 22 31 40  0  0  0  0  0
 5 14 23 32 41 50  0  0  0  0
 6 15 24 33 42 51 60  0  0  0
 7 16 25 34 43 52 61 70  0  0
 8 17 26 35 44 53 62 71 80  0
 9 18 27 36 45 54 63 72 81 90
19 28 37 46 55 64 73 82 91  0
29 38 47 56 65 74 83 92  0  0
39 48 57 66 75 84 93  0  0  0
49 58 67 76 85 94  0  0  0  0
59 68 77 86 95  0  0  0  0  0
69 78 87 96  0  0  0  0  0  0
79 88 97  0  0  0  0  0  0  0
89 98  0  0  0  0  0  0  0  0
99  0  0  0  0  0  0  0  0  0

L'utilisation de ](mêmes) tampons toutes les lignes avec 0s. Chaque ligne est inversée. Afin de me débarrasser des zéros, j'encadre les lignes <après les avoir inversées|.

   <@|./.i.,~10
┌─┬────┬───────┬──────────┬─────────────┬────────────────┬
│0│10 1│20 11 2│30 21 12 3│40 31 22 13 4│50 41 32 23 14 5│. . .
└─┴────┴───────┴──────────┴─────────────┴────────────────┴

La boxe rend la liste des listes à aplatir. Je défile enfin ,.la liste pour que les lignes soient ordonnées dans une colonne.

  ,.<@|./.i.,~10
┌────────────────────────────┐
│0                           │
├────────────────────────────┤
│10 1                        │
├────────────────────────────┤
│20 11 2                     │
├────────────────────────────┤
│30 21 12 3                  │
├────────────────────────────┤
│40 31 22 13 4               │
├────────────────────────────┤
│50 41 32 23 14 5            │
├────────────────────────────┤
│60 51 42 33 24 15 6         │
├────────────────────────────┤
│70 61 52 43 34 25 16 7      │
├────────────────────────────┤
│80 71 62 53 44 35 26 17 8   │
├────────────────────────────┤
│90 81 72 63 54 45 36 27 18 9│
├────────────────────────────┤
│91 82 73 64 55 46 37 28 19  │
├────────────────────────────┤
│92 83 74 65 56 47 38 29     │
├────────────────────────────┤
│93 84 75 66 57 48 39        │
├────────────────────────────┤
│94 85 76 67 58 49           │
├────────────────────────────┤
│95 86 77 68 59              │
├────────────────────────────┤
│96 87 78 69                 │
├────────────────────────────┤
│97 88 79                    │
├────────────────────────────┤
│98 89                       │
├────────────────────────────┤
│99                          │
└────────────────────────────┘
Galen Ivanov
la source
2

Pure Bash (pas d'utilitaires externes), 66

eval a={{9..1},}\;b={9..0}';c[a+b]+=$a$b\ '
printf %s\\n "${c[@]}"

Essayez-le en ligne!

Traumatisme numérique
la source
2

Gol> <> , 24 octets

0D9FlF{a+|lD|9F~lF{P|D|;

Essayez-le en ligne!

La sortie ressemble à ceci:

[0]
[10 1]
[20 11 2]
[30 21 12 3]
[40 31 22 13 4]
[50 41 32 23 14 5]
[60 51 42 33 24 15 6]
[70 61 52 43 34 25 16 7]
[80 71 62 53 44 35 26 17 8]
[90 81 72 63 54 45 36 27 18 9]
[91 82 73 64 55 46 37 28 19]
[92 83 74 65 56 47 38 29]
[93 84 75 66 57 48 39]
[94 85 76 67 58 49]
[95 86 77 68 59]
[96 87 78 69]
[97 88 79]
[98 89]
[99]

Comment ça fonctionne

0D9FlF{a+|lD|9F~lF{P|D|;

0D                       Push 0 and print stack
  9F        |            Repeat 9 times...
    lF{a+|                 Add 10 to all numbers on the stack
          l                Push stack length (the last one-digit number)
           D               Print stack
             9F       |  Repeat 9 times...
               ~           Discard the top
                lF{P|      Increment all numbers on the stack
                     D     Print stack
                       ; Halt
Bubbler
la source
2

R , 50 48 octets

split(y<-rev(order(x<-outer(0:9,0:9,"+"))),x[y])

Essayez-le en ligne!

1 indexé. Suit la même logique que la réponse Jelly de Jonathan Allan , alors assurez-vous de lui donner un vote positif.

En prime, voici également une implémentation de l'approche en boucle standard (indexée 0). Ici, j'ai au moins essayé de rendre la sortie plus jolie (donc, je n'ai même pas enregistré d'octets pourprint au lieu de cat(...,"\n")me débarrasser des [1]s agaçants dans la console.

R , 66 59 octets

for(i in c(0:8*10,90:99))cat(seq(i,i/10+i%%10*10-1,-9),"
")

Essayez-le en ligne!

Edit: -2 et -7 grâce à Giuseppe.

Kirill L.
la source
1
J'ai réussi à faire descendre le deuxième à 59 octets et le premier à 48 octets
Giuseppe
Ah, oui, merci.
Kirill L.
@ KirillL.Il est toujours très élégant d'utiliser l'extérieur. en plus dans ce cas c'est plus court!
JayCe
2

R , 137 86 73 69 octets

for(u in 0:18)cat("if"(u>9,seq(81+u,10*u-81,-9),seq(10*u,u,-9)),"\n")

Essayez-le en ligne!

Version golfée précédente,% 100 crédits à Giuseppe .

S=sapply
c(S(1:10,function(u)1:u-1+10*(u-1:u)),S(9:1,function(y)1:y+9-y+10*(y:1+9-y)))

Essayez-le en ligne!

Ci-dessous ma première tentative de Codegolf en le gardant juste pour mémoire.

x<-c(1:10)
z<- c(9:1)
c(sapply(x,function(u) seq_len(u)-1+10*(u-seq_len(u))),sapply(z,function(y) seq_len(y)+9-y+10*rev(seq_len(y)+9-y)))

Essayez-le en ligne!

JayCe
la source
1
Bonne réponse! Comme vous le dites, vous pouvez supprimer plusieurs octets; J'ai réussi à trouver une solution de 86 octets en supprimant certains espaces blancs inutiles, et en remplaçant seq_lenavec 1:dans la plupart des endroits; J'ai également utilisé y:1au lieu de rev.
Giuseppe
@Giuseppe merci beaucoup pour la réponse améliorée - cela montre que je n'ai pas codé depuis des années.
JayCe
1

Octave , 67 66 65 64 octets

for i=0:8disp(10*i:-9:0)end,for i=0:9disp(90+i:-9:11*i+(i<1))end

Essayez-le en ligne!

Ces points-virgules manquants me font mal aux yeux!

Stewie Griffin
la source
1

05AB1E , 22 octets

TLûvTLD>T*«NèyGD9+})R,

Essayez-le en ligne!


Approche super naïve: essayez-la en ligne! peut être une meilleure solution mais je ne sais pas comment aller de A à B.

Urne de poulpe magique
la source
Existe-t-il une commande "trier a en fonction des valeurs de b"?
dylnan
0

PowerShell , 77 octets

(0..90|?{!($_%10)})+91..99|%{"$(for($i=$_;$i-gt$_/10+$_%10*10-1;$i-=9){$i})"}

Essayez-le en ligne!

Sorties au format ASCII avec les chiffres à gauche alignés. Exploite le fait que la chaîne d'un tableau insère des espaces entre les éléments par défaut.

Très similaire à la réponse de Rod en Python, apparemment, mais développé indépendamment.

AdmBorkBork
la source
0

JavaScript, 69 octets

f=(i=e=[])=>e[i<19&&(e[+i]=[]),i/10+i%10|0].unshift(+i)*i++-99?f(i):e

Essayez-le en ligne!

JavaScript REPL, 77 octets

[...Array(100)].map((_,i)=>e[i<19&&(e[i]=[]),i/10+i%10|0].unshift(i),e=[])&&e
l4m2
la source
0

Perl 5 , 62 octets

$,=$";say@,=map$_+=10,@,,$_ for-9..0;say map++$_,@,while pop@,

Essayez-le en ligne!

1 indexé pour économiser quelques octets

Xcali
la source
0

Rouge , 105, 95 91 octets

v: make vector! 0
loop 10[alter v + 10 length? v print v]loop 9[alter v last v print 1 + v]

Essayez-le en ligne!

Explication:

v: make vector!   0                           ; start with a vector with one element: -10
loop 10[alter v + 10 length? v print v]       ; Ten times print the vector after adding 10
                                              ; to its elements and appending the length   
loop 9[alter v last v print 1 + v]            ; Nine times print the vector after adding 1 
                                              ; to its elements and removing the last one
                                              ; `alter` appends the item if it's not
                                              ; in the list, otherwise removes it
Galen Ivanov
la source
0

JavaScript , 112 octets

Pas optimal, mais je voulais essayer une approche différente.

[...Array(19)].map((x,y)=>y>9?81+y:y?y+'0':y).map(x=>(f=(n,a=[n])=>!n|a[n+='']|n[1]>8?a:f(n-=9,a.concat(n)))(x))

Essayez-le en ligne!

Ancienne solution:

[...Array(19)].map((x,y)=>y>9?y-9+'9':y).map((x,y)=>(f=(n,a=[n])=>a[n/10]|!n?a.reverse():a.push(n+=9)&&f(n,a))(x*1).slice(y-19))

Essayez-le en ligne!

Oliver
la source
0

05AB1E , 16 octets

тL<ΣTLãOsè}TLû£í

Essayez-le en ligne!

Explication

тL<Σ      }       # sort the values in [0 ... 99] by
        sè        # the value at that index in
       O          # the sum of
      ã           # the cartesian product of
    TL            # the range [1 ... 10]
              £   # split the result into pieces of sizes
           TLû    # [1,2,...,9,10,9,...2,1]
               í  # and reverse each
Emigna
la source
0

Perl 6 , 43 40 octets

{map {[R,] grep :k,$_,(^10 X+ ^10)},^19}

Essayez-le en ligne!

-3 octets grâce à Brad Gilbert b2gills.

nwellnhof
la source
1
[R,] LISTest plus court quereverse LIST
Brad Gilbert b2gills
@ BradGilbertb2gills Nice, merci!
nwellnhof