Gestapelte Zifferntreppen

17

Wenn positive ganze Zahlen und werden Spalten und Textzeilen ausgegeben, wie unten beschrieben.h w hwhwh

Die erste Reihe beginnt mit 11 0s, die zweite Reihe mit 10 1s, die dritte mit 9 2s und so weiter die zehnte Reihe mit 2 9s. In jeder dieser ersten zehn Zeilen wird nach dem ersten Durchlauf aufeinanderfolgender Ziffern die nächstniedrigere Ziffer zweimal angezeigt, bevor die zweitniedrigere Ziffer zweimal angezeigt wird, wobei sich dieses Muster für immer wiederholt. Wenn ein Lauf von 0s auftritt, sind die Ziffern danach immer 9s.

Zeilen unterhalb der zehnten Zeile entsprechen der Zeile unmittelbar darüber, sind jedoch um eins nach rechts verschoben. Die neue Ziffer, die angezeigt wird, ist dieselbe wie die vorherige Ziffer ganz links, wenn sie nicht neben einer anderen Instanz von sich selbst war. Ansonsten ist es die nächsthöhere Ziffer (zwischen 9 und 0 wechseln).

Die ersten Elemente lauten wie folgt:11×10

00000000000
11111111110
22222222211
33333333221
44444443322
55555544332
66666554433
77776655443
88877665544
99887766554

Hier ist ein Bild mit farbigem Text, um das Muster deutlicher zu machen.

fester Text

Wenn Sie weniger Spalten / Zeilen erstellen müssen, sollten Sie den obigen Text einfach zuschneiden.

Wenn Sie mehr Spalten / Zeilen erzeugen müssen, sollten vorhandene Treppen erweitert werden. Wenn mehrere Spalten / Zeilen neue Treppen mit aufeinanderfolgenden Ziffern hinzufügen, sollten die Ziffern zyklisch aus den ganzen Zahlen ausgewählt werden. Für den Eingang sollte also der Ausgang sein(15,13)

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

Hier ist ein Bild dieses Textes mit Farbe:

erweiterter Text

Regeln

  • Die Ausgabe kann auf jede bequeme Weise erfolgen .
  • Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
  • Sie können eine Liste von Zeilen zurückgeben, wenn Sie möchten.
  • Sie können ein 2D-Array von Ziffern oder eine Liste von Ziffern zurückgeben, wenn Sie dies vorziehen.
  • Standardlücken sind nicht erlaubt.

Kürzester Code gewinnt.

Testfälle

(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
quelle
8
Ich verstehe das Muster nicht wirklich. Könnten Sie das Muster konkret erläutern, anstatt zu erwarten, dass es anhand von Beispielen extrapoliert wird? Einige Leute finden Beispiele hilfreich, aber ich sehe nicht genau, wie das Muster aus den Beispielen folgt.
Weizen-Assistent
@WW Danke, ich habe oben eine etwas ausführlichere Erklärung hinzugefügt
dylnan
1
1234
@qwr oh schön, ich wusste nicht, dass wir das tun können. Mit welchem ​​Befehl haben Sie es gemacht?
Dylnan
\ color {red} {text} Ich glaube
qwr

Antworten:

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 von Dylnan

-15 Bytes, indem eine Liste von Listen zurückgegeben wird, anstatt von xnor aus zu drucken

-1 Byte durch Umschalten der Reihenfolge der (j-i+10)//2%10und jTeile der if-else

-3 Bytes von Jo King durch Ändern der if- elsein eine Liste.

Probieren Sie es online!

Pizzapants184
quelle
Bei Verwendung einer Lambda-Funktion wird ein Byte
gespeichert
@ Dylnan Danke!
Pizzapants184
1
Die Herausforderung ermöglicht die Ausgabe von Listen mit Ziffernlisten, sodass Sie anscheinend nicht drucken oder beitreten müssen.
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));}

Probieren Sie es online!

Jonathan Frech
quelle
-1 Byte Online testen! printf("%d",->putchar(48+
pizzapants184
@ pizzapants184 Vielen Dank.
Jonathan Frech
@ceilingcat Leider nein .
Jonathan Frech
2

Canvas, 14 Bytes

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

Probieren Sie es hier aus!

Während ich dies machte, bemerkte ich an mehreren Stellen, dass ich negative Module in Canvas hatte (hier bedeutete es, dass »- Floor Div 2 - gegen 0 gerundet wurde). Die vorherige 18-Byte-Antwort, die ohne Korrekturen funktioniert hat, funktioniert nicht mehr (da ich nur main.jszwischen Versionen speichere ), aber TIO hat immer noch die alte Version

Erläuterung:

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

Kohle , 20 17 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:

 η                  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

Bearbeiten: 3 Bytes durch Umschalten auf den @ dzaima-Algorithmus gespeichert.

Neil
quelle
2

Jelly , 14 Bytes

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

wh

Probieren Sie es online! Oder sehen Sie sich eine (nachformatierte) Testsuite an .

Wie?

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

Kotlin , 78 Bytes

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

Probieren Sie es online!

JohnWells
quelle
2

Jelly , 19 Bytes

Verwendet einen sehr ähnlichen Ansatz wie bei Pizzapants und Neils . Dank Jonathan Allan 1 Byte gespeichert .

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

Probieren Sie es online!


Der Hilfslink

_/HḞ+5

Dies ist ein monadischer Link (das Jelly-Äquivalent einer einzelnen Argumentfunktion), der vom nächsten Link mit dem Quick aufgerufen werden kann Ç. Es nimmt eine Liste mit zwei ganzen Zahlen und führt die folgenden Schritte aus:

_/

Reduzieren Sie durch Subtraktion.

HḞ+5%⁵

Setze die Hälfte auf eine ganze Zahl und addiere 5, dann nimm modulo 10.

Der Hauptlink

p’ḢÇS<9Ɗ?€s

çxy

p’

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

S<9Ɗ?€

Und für jedes Paar im kartesischen Produkt gilt:

Holen Sie sich den Kopf des Paares (erstes Element). Andernfalls,

Ç

Rufen Sie den oben erläuterten Helper-Link für das Paar an.

s%⁵

y

Mr. Xcoder
quelle
Sie können die mod 10 bis zum Ende bewegen und dann die Helfer in-line ein Byte zu speichern - entweder als Dyade mit p’Ḣ_/HḞ+ʋS<9Ɗ?€5s%⁵oder p’Ḣ_/:2+ʋS<9Ɗ?€5s%⁵oder als Monade mitp’Ḣ_/:2+5ƲS<9Ɗ?€s%⁵
Jonathan Allan