Ułożone schody cyfrowe

17

Biorąc pod uwagę całkowite dodatnie i wyjście kolumnach i wierszy tekstu w sposób opisany poniżej.whwh

Pierwszy rząd zaczyna się od 11 0s, drugi rząd przez 10 1s, trzeci przez dziewięć 2s i tak dalej w dół do dziesiątego rzędu dwoma 9s. W każdym z tych pierwszych dziesięciu wierszy, po początkowym przebiegu kolejnych cyfr, następna najniższa cyfra pojawia się dwa razy, zanim druga następna najniższa cyfra pojawia się dwa razy, przy czym ten wzór powtarza się na zawsze. Jeśli wystąpi ciąg 0s, cyfry po nim są zawsze 9s.

Rzędy poniżej dziesiątego rzędu są takie same jak rząd bezpośrednio nad nim, ale są przesunięte w prawo o jeden. Nowa cyfra, która się pojawi, jest taka sama jak poprzednia cyfra skrajnie lewa, jeśli nie znajdowała się obok innego wystąpienia. W przeciwnym razie jest to kolejna najwyższa cyfra (cyklicznie od 9 z powrotem do 0).

Pierwsze elementów są następujące:11×10

00000000000
11111111110
22222222211
33333333221
44444443322
55555544332
66666554433
77776655443
88877665544
99887766554

Oto obraz z kolorowym tekstem, aby wzór był bardziej wyraźny.

naprawiony tekst

Jeśli chcesz utworzyć mniej kolumn / wierszy, powinieneś po prostu przyciąć powyższy tekst.

Jeśli chcesz wyprodukować więcej kolumn / rzędów niż to, istniejące schody powinny zostać przedłużone. Jeśli więcej kolumn / wierszy dodaje nowe schody kolejnych cyfr, cyfry należy cyklicznie wybierać spośród liczb całkowitych. Zatem dla danych wejściowych wynik powinien wynosić(15,13)

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

Oto obraz tego tekstu w kolorze:

tekst rozszerzony

Zasady

  • Dane wyjściowe można podać dowolną dogodną metodą .
  • Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
  • Jeśli chcesz, możesz zwrócić listę linii.
  • Jeśli chcesz, możesz zwrócić tablicę cyfr 2D lub listę list cyfr.
  • Standardowe luki zabronione.

Najkrótszy kod wygrywa.

Przypadki testowe

(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
źródło
8
Naprawdę nie rozumiem tego wzoru. Czy możesz wyjaśnić konkretny wzorzec zamiast oczekiwać, że zostanie ekstrapolowany z przykładów? Niektóre osoby uważają przykłady za pomocne, ale tak naprawdę nie widzę dokładnie, w jaki sposób wzorzec pochodzi z przykładów.
Post Rock Garf Hunter
@WW Dzięki, dodałem nieco dokładniejsze wyjaśnienie na górze
dylnan
1
1234
@qwr oh nice, nie wiedziałem, że możemy to zrobić. Z jakim poleceniem to zrobiłeś?
dylnan
\ color {red} {text} Wierzę
qwr

Odpowiedzi:

7

Python 3, 94 93 78 77 74 bajtów

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

-1 bajt z Dylnan

-15 bajtów, zwracając listę list zamiast drukowania z xnor

-1 bajt, zmieniając kolejność (j-i+10)//2%10i jczęści if-else

-3 bajty od Jo Kinga , zmieniając if- elsena listę.

Wypróbuj online!

pizzapanty184
źródło
Użycie funkcji lambda oszczędza bajt: TIO
dylnan
@dylnan Thanks!
pizzapants184
1
Wyzwanie umożliwia generowanie list list cyfr, więc wygląda na to, że nie musisz drukować ani dołączać.
xnor 14.07.18
7

C (gcc) , 101 100 99 bajtów

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

Wypróbuj online!

Jonathan Frech
źródło
-1 bajt Wypróbuj online! printf("%d",->putchar(48+
pizzapants184
@ pizzapants184 Wielkie dzięki.
Jonathan Frech,
@ceilingcat Niestety nie .
Jonathan Frech,
2

Płótno, 14 bajtów

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

Wypróbuj tutaj!

Robiąc to zauważyłem w kilku miejscach, że miałem ujemne moduły w Canvas (tutaj oznaczało to, że »- floor div 2 - zaokrąglony w kierunku 0). Poprzednia 18-bajtowa odpowiedź, która działała bez poprawek, już nie działa (ponieważ zapisuję tylko main.jsmiędzy wersjami), ale TIO wciąż ma starą wersję

Wyjaśnienie:

[            ]  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
źródło
2

Węgiel drzewny , 20 17 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

 η                  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

Edycja: Zapisano 3 bajty, przechodząc do algorytmu @ dzaima.

Neil
źródło
2

Galaretka , 14 bajtów

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

wh

Wypróbuj online! Lub zobacz (sformatowany) zestaw testów .

W jaki sposób?

_@þ: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
źródło
2

Kotlin , 78 bajtów

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

Wypróbuj online!

JohnWells
źródło
2

Galaretka , 19 bajtów

Stosuje bardzo podobne podejście do pizzapantów i Neila . Oszczędność 1 bajtu dzięki Jonathanowi Allanowi .

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

Wypróbuj online!


Link pomocnika

_/HḞ+5

Jest to łącze monadyczne (galaretowy odpowiednik funkcji pojedynczego argumentu), które można wywołać z następnego łącza za pomocą szybkiego Ç. Pobiera listę dwóch liczb całkowitych i wykonuje następujące czynności:

_/

Zmniejsz przez odjęcie.

HḞ+5%⁵

Połóż jego połowę na liczbie całkowitej i dodaj 5, a następnie weź ją modulo 10.

Główny link

p’ḢÇS<9Ɗ?€s

Jest to łącze diadadowe (galaretowy odpowiednik funkcji dwóch argumentów), które można wywołać z następnego łącza za pomocą çszybkiego. Zajmuje dwie liczby całkowitex i y i wykonuje następujące czynności:

p’

Iloczyn kartezjański ich zakresów, a następnie odejmij 1z każdej liczby całkowitej na tej liście. Jest to równoważne z([0,x)Z)×([0,y)Z).

S<9Ɗ?€

A dla każdej pary w produkcie kartezjańskim, jeśli ich suma jest mniejsza niż 9, to:

Odzyskaj głowę pary (pierwszy element). Inaczej,

Ç

Zadzwoń na link pomocnika (wyjaśniony powyżej) na parze.

s%⁵

Na koniec podziel wynikową listę na kawałki długości y i weź każdy mod 10.

Pan Xcoder
źródło
Możesz przesunąć mod 10 na koniec, a następnie umieścić pomocnika w linii, aby zapisać bajt - albo jako diada z p’Ḣ_/HḞ+ʋS<9Ɗ?€5s%⁵lub p’Ḣ_/:2+ʋS<9Ɗ?€5s%⁵, albo jako monada zp’Ḣ_/:2+5ƲS<9Ɗ?€s%⁵
Jonathan Allan