Pirámide entera ascendente

18

Imprima el texto a continuación o una lista de listas de enteros (más detalles a continuación).

 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

Reglas

  • Si lo desea, puede "un índice" y reemplazar cada uno ncon n+1. En este caso, la salida contendrá los números del 1 al 100 inclusive.

Si la salida es texto

  • Los dígitos individuales están alineados a la derecha en cada columna del texto proporcionado, pero está bien si desea alinear a la izquierda. Además, no es necesario que la alineación sea coherente entre columnas.
  • Se permite el espacio en blanco inicial / final. Los espacios finales en cada línea también están permitidos.
  • Devolver una lista de líneas es aceptable.

Si la salida es numérica

  • La salida puede ser una lista de listas de enteros (o matriz 2D): [[1], [11, 2], [21...
  • Las carrozas están bien.
  • Si no es posible tener una matriz no rectangular en el lenguaje utilizado, entonces los elementos en la matriz que no están dentro del triángulo pueden tomar cualquier valor y serán ignorados.

Si prefiere otro formato, no dude en preguntar.

El código más corto gana.

dylnan
fuente
Sandbox
dylnan
Dado que los espacios en blanco iniciales / finales están permitidos en la salida de texto, ¿están permitidas las listas vacías iniciales / finales en la salida de la lista?
Jonathan Allan
@JonathanAllan Sure
dylnan
no puedo editarlo, pero esto debería tener la etiqueta de complejidad kolmogorov (no estoy seguro de haberlo escrito bien ...)
Brian H.
@BrianH. Según otros, dado que no hay una sola constante que se produzca, la etiqueta KC no se aplica aquí
dylnan

Respuestas:

10

Jalea ,  13 12 10  6 bytes

-4 gracias a Dennis, sí CUATRO! (uso de índices grupales y producto cartesiano)

⁵pḅ1ĠU

Utiliza la indexación 1 y la opción de lista para la salida.

Pruébalo en línea! (El pie de página formatea la salida en representación de Python)
... o vea una versión con formato 0 indexada .

¿Cómo?

⁵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
fuente
1
Agradable. Tenía 7 bytes
dylnan
¿ ĠQué demonios hace?
Urna mágica del pulpo
1
@MagicOctopusUrn agrupa los índices de una matriz por su valor correspondiente. Entonces [5,7,5,9]Ġvolvería [[1,3],[2],[4]]. Esto se debe a que los índices [1,3]corresponden al valor 5en la matriz original, [2]to 7y [4]to 9.
dylnan
5

Python 2 , 54 bytes

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

Pruébalo en línea!

(1 indexado, porque range(k,0,-9)es más corto que range(k,-1,-9)).

Lynn
fuente
4

Carbón , 29 20 bytes

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

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

 ¹⁹                     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
fuente
4

JavaScript (ES6), 61 bytes

Basado en 0. Devuelve una cadena.

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

Pruébalo en línea!

¿Cómo?

Comenzamos con k = n = 0 y nos detenemos cuando k = 99 . Restamos 9 de k en cada iteración.

El final de las filas se detecta con k % 10 <= 0. Esta condición se cumple si:

  • k es negativo (parte superior de la pirámide) porque el signo del módulo en JS es el del dividendo.

     0 (-9)
    10  1 (-8)
    20 11  2 (-7)
    
  • o k% 10 == 0 (parte inferior de la pirámide)

    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)
    

Al comienzo de la siguiente fila, agregamos 1 o 10 a n y reiniciamos desde allí.

Arnauld
fuente
3

J , 14 bytes

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

Pruébalo en línea!

Nota:

Esta solución utiliza resultados en caja: no estoy seguro de si está permitido (espero que sí, porque también se permiten listas de enteros)

Alternativa:

J , 10 bytes

|./.i.,~10

En esta solución, los números fuera del área triangular se muestran como 0

Pruébalo en línea!

Explicación:

i.,~10crea una matriz 10x10 de los números 0..99 ,~10es la abreviatura 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

/. encuentra las diagonales oblicuas (antidiagoniales) de la matriz

   ]/.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

Usando ](mismo) rellena todas las líneas con 0s. Cada línea se invierte. Para deshacerme de los ceros, recuadro las líneas <después de que se invierten|.

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

El boxeo hace que la lista de listas sea plana. Finalmente descifro ,.la lista para que las líneas estén ordenadas en una columna.

  ,.<@|./.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
fuente
2

Pure Bash (sin utilidades externas), 66

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

Pruébalo en línea!

Trauma digital
fuente
2

Gol> <> , 24 bytes

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

Pruébalo en línea!

El resultado se ve así:

[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]

Cómo funciona

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

R , 50 48 bytes

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

Pruébalo en línea!

1 indexado. Sigue la misma lógica que la respuesta de Jonathan Allan's Jelly , así que asegúrate de votarlo.

Como beneficio adicional, aquí también hay una implementación del enfoque de bucle estándar (indexado a 0). Aquí, al menos intenté hacer que la salida sea más bonita (por lo tanto, ni siquiera guardé bytes para en printlugar de cat(...,"\n")deshacerme de los molestos [1]s en la consola.

R , 66 59 bytes

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

Pruébalo en línea!

Editar: -2 y -7 ambos gracias a Giuseppe.

Kirill L.
fuente
1
Logré reducir el segundo a 59 bytes y el primero a 48 bytes
Giuseppe
Ah si, gracias.
Kirill L.
@ KirillL. Siempre es muy elegante para usar en exteriores. Además, en este caso es más corto!
JayCe
2

R , 137 86 73 69 bytes

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

Pruébalo en línea!

Versión anterior de golf,% 100 créditos para 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)))

Pruébalo en línea!

Debajo de mi primer intento de Codegolf manteniéndolo solo para el registro

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

Pruébalo en línea!

JayCe
fuente
1
¡Buena respuesta! Como usted dice, puede eliminar bastantes bytes; He logrado encontrar una solución de 86 bytes eliminando algunos espacios en blanco innecesarios y reemplazándolos seq_lencon 1:en la mayoría de los lugares; También usé en y:1lugar de rev.
Giuseppe
@Giuseppe muchas gracias por la respuesta mejorada: muestra que no he codificado en años.
JayCe
1

Octava , 67 66 65 64 bytes

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

Pruébalo en línea!

¡Esos puntos y comas me duelen los ojos!

Stewie Griffin
fuente
1

05AB1E , 22 bytes

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

Pruébalo en línea!


Enfoque súper ingenuo: ¡ Pruébelo en línea! puede ser una mejor solución, pero no puedo entender cómo ir de A a B.

Urna de pulpo mágico
fuente
¿Existe un comando "ordenar a basado en valores de b"?
dylnan
0

PowerShell , 77 bytes

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

Pruébalo en línea!

Salidas como ASCII-art con los dígitos individuales alineados a la izquierda. Explota el hecho de que encadenar una matriz inserta espacios entre elementos de forma predeterminada.

Muy similar a la respuesta Python de Rod, aparentemente, pero desarrollada independientemente.

AdmBorkBork
fuente
0

JavaScript, 69 bytes

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

Pruébalo en línea!

JavaScript REPL, 77 bytes

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

Rojo , 105, 95 91 bytes

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

Pruébalo en línea!

Explicación:

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

JavaScript , 112 bytes

No es tan óptimo, pero quería probar un enfoque diferente.

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

Pruébalo en línea!

Antigua solución:

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

Pruébalo en línea!

Oliver
fuente
0

05AB1E , 16 bytes

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

Pruébalo en línea!

Explicación

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

Perl 6 , 43 40 bytes

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

Pruébalo en línea!

-3 bytes gracias a Brad Gilbert b2gills.

nwellnhof
fuente
1
[R,] LISTes más corto quereverse LIST
Brad Gilbert b2gills
@ BradGilbertb2gills Bien, gracias!
nwellnhof