Escaleras de dígitos apilados

17

Dados enteros positivos, y generan columnas y filas de texto como se describe a continuación.ww hhwh

La primera fila comienza con 11 0s, la segunda fila con 10 1s, la tercera con nueve 2sy así sucesivamente hasta la décima fila con dos 9s. En cada una de estas primeras diez filas, siguiendo la ejecución inicial de dígitos consecutivos, el siguiente dígito más bajo aparece dos veces antes de que el segundo siguiente dígito más bajo aparezca dos veces, con este patrón que se repite para siempre. Si se 0produce una serie de s, los dígitos que siguen son siempre 9s.

Las filas debajo de la décima fila son las mismas que la fila inmediatamente superior, pero se desplazan a la derecha por una. El nuevo dígito que aparece es el mismo que el dígito anterior más a la izquierda si no estaba al lado de otra instancia de sí mismo. De lo contrario, es el siguiente dígito más alto (pasando de 9 a 0).

Los primeros elementos son los siguientes:11×10

00000000000
11111111110
22222222211
33333333221
44444443322
55555544332
66666554433
77776655443
88877665544
99887766554

Aquí hay una imagen con texto en color para que el patrón sea más claro.

texto fijo

Si necesita producir menos columnas / filas, simplemente debe recortar el texto anterior.

Si necesita producir más columnas / filas que esto, las escaleras existentes deben extenderse. Si más columnas / filas agregan nuevas escaleras de dígitos consecutivos, los dígitos deben elegirse cíclicamente entre los enteros. Por lo tanto, para la entrada la salida debe ser(15,13)

000000000009988
111111111100998
222222222110099
333333332211009
444444433221100
555555443322110
666665544332211
777766554433221
888776655443322
998877665544332
099887766554433
009988776655443
100998877665544

Aquí hay una imagen de este texto con color:

texto extendido

Reglas

  • La salida se puede dar por cualquier método conveniente .
  • Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
  • Puede devolver una lista de líneas si lo prefiere.
  • Puede devolver una matriz 2D de dígitos o una lista de listas de dígitos si lo prefiere.
  • Lagunas estándar no permitidas.

El código más corto gana.

Casos de prueba

La entrada se toma como para los casos de prueba.(w,h)

1,1
0

3,2 000 111

20,1 00000000000998877665

11,10 00000000000 11111111110 22222222211 33333333221 44444443322 55555544332 66666554433 77776655443 88877665544 99887766554

15,13 000000000009988 111111111100998 222222222110099 333333332211009 444444433221100 555555443322110 666665544332211 777766554433221 888776655443322 998877665544332 099887766554433 009988776655443 100998877665544

dylnan
fuente
8
Realmente no entiendo el patrón. ¿Podría explicar el patrón concretamente en lugar de esperar que se extrapole de los ejemplos? Algunas personas encuentran útiles los ejemplos, pero realmente no veo exactamente cómo se sigue el patrón de los ejemplos.
Post Rock Garf Hunter
@WW Gracias, agregué una explicación un poco más completa en la parte superior
dylnan
1
1234
@qwr oh bien, no sabía que podíamos hacer eso. ¿Con qué comando lo hiciste?
dylnan
\ color {rojo} {texto} Creo
qwr

Respuestas:

7

Python 3, 94 93 78 77 74 bytes

lambda x,y:[[[(j-i+10)//2%10,j][j+i<9]for i in range(x)]for j in range(y)]

-1 byte de dylnan

-15 bytes devolviendo una lista de listas en lugar de imprimir desde xnor

-1 byte cambiando el orden de las partes (j-i+10)//2%10y jde if-else

-3 bytes de Jo King cambiando el if- elsea una lista.

Pruébalo en línea!

pizzapants184
fuente
El uso de una función lambda guarda un byte: TIO
dylnan
@dylnan Gracias!
pizzapants184
1
El desafío permite generar listas de listas de dígitos, por lo que parece que no necesita imprimir ni unir.
xnor
7

C (gcc) , 101 100 99 bytes

s,t;a(i,r){for(t=~0;++t<r;puts(""))for(s=0;s<i;putchar(48+(t+(s>10-t)*(10*s+9-(s+++t-11)/2))%10));}

Pruébalo en línea!

Jonathan Frech
fuente
-1 byte ¡ Pruébelo en línea! printf("%d",->putchar(48+
pizzapants184
@ pizzapants184 Muchas gracias.
Jonathan Frech
@ceilingcat Lamentablemente no .
Jonathan Frech
2

Lienzo, 14 bytes.

[⁷{¹∔⁶+»¹m◂@]]

Pruébalo aquí!

Al hacer esto, noté que en varios lugares tenía módulos negativos en Canvas (aquí, significaba que »- floor div 2 - redondeado hacia 0). La respuesta anterior de 18 bytes que funcionó sin correcciones ya no funciona (porque solo guardo main.jsentre versiones) pero TIO todavía tiene la versión anterior

Explicación:

[            ]  for 1..input
 ⁷{         ]     for 1..2nd input
   ¹∔               subtract from this loop counter the outer loops one
     ⁶+             add 12
       »            divide by 2, rounded to -∞
        ¹m          minimum of that & the outer loops counter
          ◂@        in the string "0123456789", get the xth char, 1-indexed
dzaima
fuente
2

Carbón , 20 17 bytes

Eη⭆θ﹪⌊⟦ι÷⁺⁻ιλχ²⟧χ

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

 η                  Height
E                   Map over implicit range
   θ                Width
  ⭆                 Map over implicit range and join
          ⁻ιλ       Subtract column from row
         ⁺   χ      Add 10
        ÷     ²     Integer divide by 2
       ι            Current row
     ⌊⟦        ⟧    Take the minimum
    ﹪           χ   Modulo by 10
                    Implicitly print each row on its own line

Editar: se guardaron 3 bytes cambiando al algoritmo de @ dzaima.

Neil
fuente
2

Gelatina , 14 bytes

_@þ:2+6«"J$’%⁵

Un enlace diádico que toma a la izquierda y hwh a la derecha que produce una lista de listas de dígitos.

Pruébalo en línea!O vea un conjunto de pruebas (con formato posterior) .

¿Cómo?

_@þ:2+6«"J$’%⁵ - Link: integer w, integer h
  þ            - outer product using (i.e. [[f(i,j) for i in 1..w] for j in 1..h]):
_@             -   subtraction with swapped arguments (i.e. f(i,j): j-i)
               -   e.g. the 4th row is [3, 2, 1, 0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,...]
   :2          - integer divide by two (vectorises)
               -                       [1, 1, 0, 0,-1,-1,-2,-2,-3,-3,-4,-4,-5,-5,-6,...]
     +6        - add six (vectorises)
               -                       [7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,...]
          $    - last two links as a monad:
         J     -   range of length -> [1,2,3,...,h]
        "      -   zip with:
       «       -     minimum (vectorises)
               -                       [4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 2, 1, 1, 0,...]
           ’   - decrement (vectorises)
               -                       [3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 0, 0,-1,...]
             ⁵ - literal ten
            %  - modulo (vectorises)
               -                       [3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 0, 0, 9,...]
Jonathan Allan
fuente
2

Jalea , 19 bytes

Utiliza un enfoque muy similar a pizzapants ' y Neil's . Guardado 1 byte gracias a Jonathan Allan .

p’Ḣ_/HḞ+ʋS<9Ɗ?€5s%⁵

Pruébalo en línea!


El enlace de ayuda

_/HḞ+5

Este es un enlace monádico (el equivalente Jelly de una función de argumento único), que se puede invocar desde el siguiente enlace usando el rápido Ç. Toma una lista de dos enteros y hace lo siguiente:

_/

Reducir por sustracción.

HḞ+5%⁵

Coloca su mitad en un entero y suma 5, luego toma el módulo 10.

El enlace principal

p’ḢÇS<9Ɗ?€s

çXy

p’

1([0 0,X)Z)×([0 0,y)Z)

S<9Ɗ?€

Y para cada uno de los pares en el producto cartesiano, si su suma es menor que 9, entonces:

Recupera la cabeza del par (primer elemento). De otra manera,

Ç

Llame al enlace auxiliar (explicado anteriormente) en el par.

s%⁵

y

Sr. Xcoder
fuente
Puede mover el mod 10 hasta el final y luego en línea el ayudante para guardar un byte, ya sea como una diada con p’Ḣ_/HḞ+ʋS<9Ɗ?€5s%⁵o p’Ḣ_/:2+ʋS<9Ɗ?€5s%⁵, o como una mónada conp’Ḣ_/:2+5ƲS<9Ɗ?€s%⁵
Jonathan Allan