Escaliers à chiffres empilés

17

Étant donné des entiers positifs, et h produisent w colonnes et h lignes de texte comme décrit ci-dessous.whwh

La première rangée commence avec 11 0s, la deuxième rangée avec 10 1s, la troisième avec neuf 2s et ainsi de suite la dixième rangée avec deux 9s. Sur chacune de ces dix premières lignes, après l'exécution initiale des chiffres consécutifs, le chiffre le plus bas suivant apparaît deux fois avant que le deuxième chiffre le plus bas suivant n'apparaisse deux fois, ce modèle se répétant indéfiniment. Si une série de 0s se produit, les chiffres qui suivent sont toujours 9s.

Les rangées en dessous de la dixième rangée sont les mêmes que la rangée immédiatement au-dessus, mais décalées d'une droite vers la droite. Le nouveau chiffre qui apparaît est le même que le chiffre le plus à gauche précédent s'il n'était pas à côté d'une autre instance de lui-même. Sinon, c'est le chiffre le plus élevé suivant (passant de 9 à 0).

Les premiers éléments sont les suivants:11×dix

00000000000
11111111110
22222222211
33333333221
44444443322
55555544332
66666554433
77776655443
88877665544
99887766554

Voici une image avec du texte en couleur pour rendre le motif plus clair.

texte fixe

Si vous devez produire moins de colonnes / lignes, vous devez simplement recadrer le texte ci-dessus.

Si vous devez produire plus de colonnes / lignes que cela, les escaliers existants doivent être prolongés. Si plusieurs colonnes / lignes ajoutent de nouveaux escaliers de chiffres consécutifs, les chiffres doivent être choisis cycliquement parmi les entiers. Ainsi, pour l'entrée la sortie doit être(15,13)

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

Voici une image de ce texte en couleur:

texte étendu

Règles

  • La sortie peut être donnée par n'importe quelle méthode pratique .
  • Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
  • Vous pouvez renvoyer une liste de lignes si vous préférez.
  • Vous pouvez renvoyer un tableau 2D de chiffres ou une liste de listes de chiffres si vous préférez.
  • Failles standard interdites.

Le code le plus court gagne.

Cas de test

(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
la source
8
Je ne comprends pas vraiment le schéma. Pourriez-vous expliquer le modèle concrètement plutôt que de vous attendre à ce qu'il soit extrapolé à partir d'exemples. Certaines personnes trouvent des exemples utiles, mais je ne vois pas vraiment exactement comment le modèle découle des exemples.
Post Rock Garf Hunter
@WW Merci, j'ai ajouté une explication un peu plus approfondie en haut
dylnan
1
1234
@qwr oh nice, je ne savais pas que nous pouvions faire ça. Avec quelle commande l'avez-vous fait?
dylnan
\ color {red} {text} Je crois
qwr

Réponses:

7

Python 3, 94 93 78 77 74 octets

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

-1 octet de dylnan

-15 octets en retournant une liste de listes au lieu d'imprimer à partir de xnor

-1 octet en changeant l'ordre du (j-i+10)//2%10et des jparties du if-else

-3 octets de Jo King en remplaçant le if- elsepar une liste.

Essayez-le en ligne!

pizzapants184
la source
L'utilisation d'une fonction lambda enregistre un octet: TIO
dylnan
@dylnan Merci!
pizzapants184
1
Le défi permet de sortir des listes de listes de chiffres, il semble donc que vous n'ayez pas besoin d'imprimer ou de joindre.
xnor
7

C (gcc) , 101 100 99 octets

  • Enregistré un octet grâce aux pizzapants184 .
  • Enregistré un octet.
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));}

Essayez-le en ligne!

Jonathan Frech
la source
-1 octet Essayez-le en ligne! printf("%d",->putchar(48+
pizzapants184
@ pizzapants184 Merci beaucoup.
Jonathan Frech
@ceilingcat Malheureusement non .
Jonathan Frech
2

Toile, 14 octets

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

Essayez-le ici!

En faisant cela, j'ai remarqué à plusieurs endroits que j'avais des modules négatifs dans Canvas (ici, cela signifiait que »- étage div 2 - arrondi vers 0). La réponse précédente de 18 octets qui fonctionnait sans correctifs ne fonctionne plus (car je sauvegarde uniquement main.jsentre les versions) mais TIO a toujours l'ancienne version

Explication:

[            ]  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
la source
2

Fusain , 20 17 octets

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

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

 η                  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

Edit: enregistré 3 octets en passant à l'algorithme de @ dzaima.

Neil
la source
2

Gelée , 14 octets

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

wh

Essayez-le en ligne! Ou consultez une suite de tests (post-formatée).

Comment?

_@þ: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
la source
2

Kotlin , 78 octets

{w:Int,h:Int->List(h){r->List(w){c->if(c<11-r)r%10
else(r+9*((c-9+r)/2))%10}}}

Essayez-le en ligne!

JohnWells
la source
2

Gelée , 19 octets

Utilise une approche très similaire à celle des pizzapants et de Neil . Enregistré 1 octet grâce à Jonathan Allan .

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

Essayez-le en ligne!


Le lien d'aide

_/HḞ+5

Il s'agit d'un lien monadique (l'équivalent Jelly d'une fonction d'argument unique), qui peut être invoqué à partir du lien suivant à l'aide du quick Ç. Il prend une liste de deux entiers et effectue les opérations suivantes:

_/

Réduisez par soustraction.

HḞ+5%⁵

Fixez sa moitié à un entier et ajoutez 5, puis prenez-le modulo 10.

Le maillon principal

p’ḢÇS<9Ɗ?€s

çXy

p’

Produit cartésien de leurs plages, puis soustrayez 1([0,X)Z)×([0,y)Z)

S<9Ɗ?€

Et pour chacune des paires du produit cartésien, si leur somme est inférieure à 9, alors:

Récupérez la tête de la paire (premier élément). Autrement,

Ç

Appelez le lien d'assistance (expliqué ci-dessus) sur la paire.

s%⁵

y

M. Xcoder
la source
Vous pouvez déplacer le mod 10 à la fin puis en ligne l'assistant pour enregistrer un octet - soit en tant que dyade avec p’Ḣ_/HḞ+ʋS<9Ɗ?€5s%⁵ou p’Ḣ_/:2+ʋS<9Ɗ?€5s%⁵, soit en tant que monade avecp’Ḣ_/:2+5ƲS<9Ɗ?€s%⁵
Jonathan Allan