Tangga angka susun

17

Diberikan bilangan bulat positif dan h output w kolom dan h baris teks seperti yang dijelaskan di bawah ini.whwh

Baris pertama dimulai dengan 11 0detik, baris kedua dengan 10 1detik, ketiga dengan sembilan 2detik dan seterusnya menuruni baris kesepuluh dengan dua 9detik. Pada masing-masing dari sepuluh baris pertama ini, setelah menjalankan awal dari digit berturut-turut, digit terendah berikutnya muncul dua kali sebelum digit terendah kedua berikutnya muncul dua kali, dengan pola ini berulang selamanya. Jika dijalankan 0s, digit setelahnya selalu 9s.

Baris di bawah baris kesepuluh sama dengan baris tepat di atasnya tetapi bergeser ke kanan satu per satu. Digit baru yang muncul sama dengan digit paling kiri sebelumnya jika bukan di sebelah instance yang lain. Kalau tidak, itu adalah digit tertinggi berikutnya (bersepeda dari 9 kembali ke 0).

Elemen pertama adalah sebagai berikut:11×10

00000000000
11111111110
22222222211
33333333221
44444443322
55555544332
66666554433
77776655443
88877665544
99887766554

Ini adalah gambar dengan teks berwarna untuk membuat polanya lebih jelas.

teks tetap

Jika Anda perlu menghasilkan lebih sedikit kolom / baris maka Anda cukup memotong teks di atas.

Jika Anda perlu menghasilkan lebih banyak kolom / baris dari ini, tangga yang ada harus diperpanjang. Jika lebih banyak kolom / baris menambahkan tangga baru dengan angka berurutan, digit harus dipilih secara siklik dari bilangan bulat. Jadi untuk input output harus(15,13)

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

Berikut ini adalah gambar dari teks ini dengan warna:

teks diperpanjang

Aturan

  • Keluaran dapat diberikan dengan metode apa pun yang mudah .
  • Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
  • Anda dapat mengembalikan daftar garis jika Anda mau.
  • Anda dapat mengembalikan array angka 2D atau daftar daftar digit jika Anda inginkan.
  • Celah standar tidak diijinkan.

Kode terpendek menang.

Uji kasus

Input diambil sebagai untuk kasus uji.(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
sumber
8
Saya tidak begitu mengerti polanya. Bisakah Anda menjelaskan pola secara konkret daripada mengharapkannya diekstrapolasi dari contoh-contoh. Beberapa orang menemukan contoh yang membantu, tetapi saya tidak benar-benar melihat persis bagaimana polanya mengikuti dari contoh.
Posting Rock Garf Hunter
@WW Terima kasih, saya menambahkan sedikit penjelasan lebih menyeluruh di bagian atas
dylnan
1
1234
@ qw oh, bagus, tidak tahu kita bisa melakukan itu. Dengan perintah apa Anda melakukannya?
dylnan
\ color {red} {text} Saya percaya
qwr

Jawaban:

7

Python 3, 94 93 78 77 74 byte

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

-1 byte dari dylnan

-15 byte dengan mengembalikan daftar daftar alih-alih mencetak dari xnor

-1 byte dengan mengganti urutan (j-i+10)//2%10dan jbagian if-else

-3 byte dari Jo King dengan mengubah if- elseke daftar.

Cobalah online!

pizzapants184
sumber
Menggunakan fungsi lambda menyimpan byte: TIO
dylnan
@dylnan Terima kasih!
pizzapants184
1
Tantangannya memungkinkan mengeluarkan daftar daftar digit, jadi sepertinya Anda tidak perlu melakukan pencetakan atau bergabung.
xnor
7

C (gcc) , 101 100 99 byte

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

Cobalah online!

Jonathan Frech
sumber
-1 byte Cobalah secara online! printf("%d",->putchar(48+
pizzapants184
@ pizzapants184 Terima kasih banyak.
Jonathan Frech
@ceilingcat Sayangnya tidak .
Jonathan Frech
2

Kanvas, 14 byte

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

Coba di sini!

Sambil membuat ini saya perhatikan di beberapa tempat saya punya modulos negatif di Canvas (di sini, itu berarti bahwa »- lantai div 2 - dibulatkan ke 0). Jawaban 18 byte sebelumnya yang bekerja tanpa perbaikan tidak berfungsi lagi (karena saya hanya menyimpan main.jsantar versi) tetapi TIO masih memiliki versi yang lama

Penjelasan:

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

Arang , 20 17 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

 η                  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

Sunting: Disimpan 3 byte dengan beralih ke algoritma @ dzaima.

Neil
sumber
2

Jelly , 14 byte

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

wh di sebelah kanan yang menghasilkan daftar daftar digit.

Cobalah online!Atau lihat suite tes (setelah diformat) .

Bagaimana?

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

Kotlin , 78 byte

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

Cobalah online!

JohnWells
sumber
2

Jeli , 19 byte

Menggunakan pendekatan yang sangat mirip dengan pizza dan Neil . Disimpan 1 byte berkat Jonathan Allan .

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

Cobalah online!


Tautan pembantu

_/HḞ+5

Ini adalah tautan monadik (setara dengan Jelly dari fungsi argumen tunggal), yang dapat dipanggil dari tautan berikutnya menggunakan quick Ç . Dibutuhkan daftar dua bilangan bulat dan melakukan hal berikut di atasnya:

_/

Kurangi dengan pengurangan.

HḞ+5%⁵

Lantai setengahnya menjadi integer dan tambahkan 5, lalu bawa modulo 10.

Tautan utama

p’ḢÇS<9Ɗ?€s

çxy

p’

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

S<9Ɗ?€

Dan untuk masing-masing pasangan dalam produk Cartesian, jika jumlahnya kurang dari 9, maka:

Ambil kembali kepala pasangan (elemen pertama). Jika tidak,

Ç

Panggil tautan bantuan (dijelaskan di atas) pada pasangan tersebut.

s%⁵

y

Tuan Xcoder
sumber
Anda dapat memindahkan mod 10 ke akhir dan kemudian in-line helper untuk menyimpan byte - baik sebagai angka dua dengan p’Ḣ_/HḞ+ʋS<9Ɗ?€5s%⁵atau p’Ḣ_/:2+ʋS<9Ɗ?€5s%⁵, atau sebagai monad denganp’Ḣ_/:2+5ƲS<9Ɗ?€s%⁵
Jonathan Allan