Piramida bilangan bulat naik

18

Keluarkan teks di bawah ini, atau daftar daftar bilangan bulat (lebih detail di bawah).

 0
10  1
20 11  2
30 21 12  3
40 31 22 13  4
50 41 32 23 14  5
60 51 42 33 24 15  6
70 61 52 43 34 25 16  7
80 71 62 53 44 35 26 17  8
90 81 72 63 54 45 36 27 18  9
91 82 73 64 55 46 37 28 19
92 83 74 65 56 47 38 29
93 84 75 66 57 48 39
94 85 76 67 58 49
95 86 77 68 59
96 87 78 69
97 88 79
98 89
99

Aturan

  • Jika mau, Anda dapat "satu indeks" dan ganti masing n- masing dengan n+1. Dalam hal ini output akan berisi angka 1 hingga 100 inklusif.

Jika output berupa teks

  • Digit tunggal disejajarkan dengan benar di setiap kolom dalam teks yang disediakan, tetapi tidak apa-apa jika Anda ingin menyelaraskan ke kiri. Selain itu, perataan tidak harus konsisten antara kolom.
  • Ruang putih terkemuka / trailing diizinkan. Ruang tambahan di setiap baris juga diizinkan.
  • Mengembalikan daftar garis dapat diterima.

Jika output numerik

  • Output dapat berupa daftar bilangan bulat (atau array 2D): [[1], [11, 2], [21...
  • Mengapung baik-baik saja.
  • Jika tidak mungkin untuk memiliki array nonrectangular dalam bahasa yang digunakan, maka elemen-elemen dalam array yang tidak berada dalam segitiga dapat mengambil nilai apa pun dan akan diabaikan.

Jika Anda lebih suka format lain, jangan ragu untuk bertanya.

Kode terpendek menang.

dylnan
sumber
Sandbox
dylnan
Karena ruang putih memimpin / tertinggal diizinkan dalam output tekstual, apakah memimpin / mengekor daftar kosong diizinkan dalam output daftar?
Jonathan Allan
@JonathanAllan Sure
dylnan
saya tidak dapat mengeditnya, tetapi ini harus memiliki tag kompleksitas kolmogorov (tidak yakin saya mengeja dengan benar ...)
Brian H.
@BrianH. Menurut yang lain, karena sebenarnya tidak ada satu konstanta tunggal yang dimaksudkan untuk diproduksi, tag KC tidak berlaku di sini
dylnan

Jawaban:

10

Jelly ,  13 12 10  6 byte

-4 Terima kasih pada Dennis, ya EMPAT! (penggunaan indeks grup dan produk Cartesian)

⁵pḅ1ĠU

Menggunakan pengindeksan 1 dan opsi daftar untuk output.

Cobalah online! (Footer memformat output dalam representasi Python)
... atau melihat versi terindeks, diformat .

Bagaimana?

⁵pḅ1ĠU - Main link: no arguments
⁵      - literal 10
 p     - Cartesian product (with the leading constant of 10 and implicit ranges)
       -       = [[1,1],[1,2],[1,3],...,[10,8],[10,9],[10,10]]
  ḅ1   - to base one (proxy for sum each without the monad)
       -       = [2,3,4,5,6,7,8,9,10,11,3,4,5,6,7,8,9,10,11,12,4,...,18,19,20]
    Ġ  - group indices by value
       -       = [[1],[2,11],[3,12,21],...,[90,99],[100]]
     U - upend = [[1],[11,2],[21,12,3],...,[99,90],[100]] 
Jonathan Allan
sumber
1
Bagus. Saya punya 7 byte
dylnan
Apa yang Ġbahkan dilakukan dunia ?!
Magic Gurita Guci
1
@MagicOctopusUrn mengelompokkan indeks array dengan nilai yang sesuai. Jadi [5,7,5,9]Ġakan kembali [[1,3],[2],[4]]. Ini karena indeks [1,3]sesuai dengan nilai 5dalam array asli, [2]ke 7dan [4]ke 9.
dylnan
5

Python 2 , 54 byte

k=1
exec"print range(k,0,-9)[:101-k];k+=10-k/91*9;"*19

Cobalah online!

(1-diindeks, karena range(k,0,-9)lebih pendek dari range(k,-1,-9).)

Lynn
sumber
4

Arang , 29 20 byte

E¹⁹⪫I⮌Φ¹⁰⁰⁼ι⁺÷λχ﹪λχ 

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

 ¹⁹                     Literal 19
E                       Map over implicit range
       ¹⁰⁰              Literal 100
      Φ                 Filter over implicit range
              λ  λ      Inner index
               χ  χ     Predefined variable 10
                ﹪       Modulo
             ÷          Integer divide
            ⁺           Sum
           ι            Outer index
          ⁼             Equals
     ⮌                  Reverse
    I                   Cast to string
   ⪫                    Join with spaces
                        Implicitly print each string on its own line
Neil
sumber
4

JavaScript (ES6), 61 byte

Berbasis 0. Mengembalikan string.

f=(k=n=0)=>k>98?k:k+((k-=9)%10>0?' '+f(k):`
`+f(n+=n>89||10))

Cobalah online!

Bagaimana?

Kita mulai dengan k = n = 0 dan berhenti ketika k = 99 . Kami mengurangi 9 dari k pada setiap iterasi.

Akhir baris terdeteksi dengan k % 10 <= 0. Kondisi ini terpenuhi jika:

  • k adalah negatif (bagian atas piramida) karena tanda modulo di JS adalah dividen.

     0 (-9)
    10  1 (-8)
    20 11  2 (-7)
    
  • atau k% 10 == 0 (bagian bawah piramida)

    90 81 72 63 54 45 36 27 18  9 (0)
    91 82 73 64 55 46 37 28 19 (10)
    92 83 74 65 56 47 38 29 (20)
    

Di awal baris berikutnya, kita tambahkan 1 atau 10 ke n dan mulai lagi dari sana.

Arnauld
sumber
3

J , 14 byte

,.<@|./.i.,~10

Cobalah online!

catatan:

Solusi ini menggunakan keluaran kotak - Saya tidak yakin apakah itu diizinkan (saya harap demikian, karena daftar bilangan bulat juga diperbolehkan)

Alternatif:

J , 10 byte

|./.i.,~10

Dalam solusi ini angka-angka di luar area segitiga ditampilkan sebagai 0

Cobalah online!

Penjelasan:

i.,~10menciptakan matriks 10x10 dari angka 0..99 ,~10adalah kependekan dari10 10

   i.,~10
 0  1  2  3  4  5  6  7  8  9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99

/. menemukan diagonal miring (antidiagonals) dari matriks

   ]/.i.,~10
 0  0  0  0  0  0  0  0  0  0
 1 10  0  0  0  0  0  0  0  0
 2 11 20  0  0  0  0  0  0  0
 3 12 21 30  0  0  0  0  0  0
 4 13 22 31 40  0  0  0  0  0
 5 14 23 32 41 50  0  0  0  0
 6 15 24 33 42 51 60  0  0  0
 7 16 25 34 43 52 61 70  0  0
 8 17 26 35 44 53 62 71 80  0
 9 18 27 36 45 54 63 72 81 90
19 28 37 46 55 64 73 82 91  0
29 38 47 56 65 74 83 92  0  0
39 48 57 66 75 84 93  0  0  0
49 58 67 76 85 94  0  0  0  0
59 68 77 86 95  0  0  0  0  0
69 78 87 96  0  0  0  0  0  0
79 88 97  0  0  0  0  0  0  0
89 98  0  0  0  0  0  0  0  0
99  0  0  0  0  0  0  0  0  0

Menggunakan ](sama) pad semua garis dengan 0s. Setiap baris dibalik. Untuk menghilangkan angka nol, saya mengotak-atik garis <setelah dibalik|.

   <@|./.i.,~10
┌─┬────┬───────┬──────────┬─────────────┬────────────────┬
│0│10 1│20 11 2│30 21 12 3│40 31 22 13 4│50 41 32 23 14 5│. . .
└─┴────┴───────┴──────────┴─────────────┴────────────────┴

Boxing membuat daftar daftar menjadi rata. Saya akhirnya mencabut ,.daftar sehingga garis-garisnya diatur dalam kolom.

  ,.<@|./.i.,~10
┌────────────────────────────┐
│0                           │
├────────────────────────────┤
│10 1                        │
├────────────────────────────┤
│20 11 2                     │
├────────────────────────────┤
│30 21 12 3                  │
├────────────────────────────┤
│40 31 22 13 4               │
├────────────────────────────┤
│50 41 32 23 14 5            │
├────────────────────────────┤
│60 51 42 33 24 15 6         │
├────────────────────────────┤
│70 61 52 43 34 25 16 7      │
├────────────────────────────┤
│80 71 62 53 44 35 26 17 8   │
├────────────────────────────┤
│90 81 72 63 54 45 36 27 18 9│
├────────────────────────────┤
│91 82 73 64 55 46 37 28 19  │
├────────────────────────────┤
│92 83 74 65 56 47 38 29     │
├────────────────────────────┤
│93 84 75 66 57 48 39        │
├────────────────────────────┤
│94 85 76 67 58 49           │
├────────────────────────────┤
│95 86 77 68 59              │
├────────────────────────────┤
│96 87 78 69                 │
├────────────────────────────┤
│97 88 79                    │
├────────────────────────────┤
│98 89                       │
├────────────────────────────┤
│99                          │
└────────────────────────────┘
Galen Ivanov
sumber
2

Bash Murni (tanpa utilitas eksternal), 66

eval a={{9..1},}\;b={9..0}';c[a+b]+=$a$b\ '
printf %s\\n "${c[@]}"

Cobalah online!

Trauma Digital
sumber
2

Gol> <> , 24 byte

0D9FlF{a+|lD|9F~lF{P|D|;

Cobalah online!

Outputnya terlihat seperti ini:

[0]
[10 1]
[20 11 2]
[30 21 12 3]
[40 31 22 13 4]
[50 41 32 23 14 5]
[60 51 42 33 24 15 6]
[70 61 52 43 34 25 16 7]
[80 71 62 53 44 35 26 17 8]
[90 81 72 63 54 45 36 27 18 9]
[91 82 73 64 55 46 37 28 19]
[92 83 74 65 56 47 38 29]
[93 84 75 66 57 48 39]
[94 85 76 67 58 49]
[95 86 77 68 59]
[96 87 78 69]
[97 88 79]
[98 89]
[99]

Bagaimana itu bekerja

0D9FlF{a+|lD|9F~lF{P|D|;

0D                       Push 0 and print stack
  9F        |            Repeat 9 times...
    lF{a+|                 Add 10 to all numbers on the stack
          l                Push stack length (the last one-digit number)
           D               Print stack
             9F       |  Repeat 9 times...
               ~           Discard the top
                lF{P|      Increment all numbers on the stack
                     D     Print stack
                       ; Halt
Bubbler
sumber
2

R , 50 48 byte

split(y<-rev(order(x<-outer(0:9,0:9,"+"))),x[y])

Cobalah online!

1-diindeks. Mengikuti logika yang sama dengan jawaban Jelly Jonathan Allan , jadi pastikan untuk membatalkannya.

Sebagai bonus, berikut ini juga merupakan implementasi dari pendekatan perulangan standar (0-diindeks). Di sini, saya setidaknya mencoba untuk membuat output yang lebih cantik (dengan demikian, bahkan tidak menyimpan byte untuk printbukannya cat(...,"\n")menghilangkan gangguan[1] s yang di konsol.

R , 66 59 byte

for(i in c(0:8*10,90:99))cat(seq(i,i/10+i%%10*10-1,-9),"
")

Cobalah online!

Sunting: -2 dan -7 keduanya berkat Giuseppe.

Kirill L.
sumber
1
Saya berhasil menurunkan yang kedua menjadi 59 byte dan yang pertama menjadi 48 byte
Giuseppe
Ah, ya, terima kasih.
Kirill L.
@ KirillL. Selalu benar-benar elegan untuk menggunakan luar. ditambah dalam hal ini lebih pendek!
JayCe
2

R , 137 86 73 69 byte

for(u in 0:18)cat("if"(u>9,seq(81+u,10*u-81,-9),seq(10*u,u,-9)),"\n")

Cobalah online!

Versi golf sebelumnya,% 100 kredit ke Giuseppe .

S=sapply
c(S(1:10,function(u)1:u-1+10*(u-1:u)),S(9:1,function(y)1:y+9-y+10*(y:1+9-y)))

Cobalah online!

Di bawah upaya pertama saya di Codegolf menyimpannya hanya untuk dicatat.

x<-c(1:10)
z<- c(9:1)
c(sapply(x,function(u) seq_len(u)-1+10*(u-seq_len(u))),sapply(z,function(y) seq_len(y)+9-y+10*rev(seq_len(y)+9-y)))

Cobalah online!

JayCe
sumber
1
Jawaban bagus! Seperti yang Anda katakan, Anda dapat menghapus beberapa byte; Saya telah berhasil menemukan solusi 86 byte dengan menghapus beberapa ruang putih yang tidak perlu, dan menggantinya seq_lendengan 1:di sebagian besar tempat; Saya juga menggunakan y:1bukan rev.
Giuseppe
@ Giuseppe banyak terima kasih atas jawaban yang ditingkatkan - ini menunjukkan bahwa saya belum kode tahun.
JayCe
1

Oktaf , 67 66 65 64 byte

for i=0:8disp(10*i:-9:0)end,for i=0:9disp(90+i:-9:11*i+(i<1))end

Cobalah online!

Titik koma yang hilang itu menyakiti mataku!

Stewie Griffin
sumber
1

05AB1E , 22 byte

TLûvTLD>T*«NèyGD9+})R,

Cobalah online!


Pendekatan Super Naif: Cobalah secara online! mungkin merupakan solusi yang lebih baik, tetapi saya tidak tahu bagaimana cara mendapatkan dari A ke B.

Guci Gurita Ajaib
sumber
Apakah ada perintah "sort a berdasarkan nilai-nilai b"?
dylnan
0

PowerShell , 77 byte

(0..90|?{!($_%10)})+91..99|%{"$(for($i=$_;$i-gt$_/10+$_%10*10-1;$i-=9){$i})"}

Cobalah online!

Keluaran sebagai ASCII-art dengan digit tunggal selaras kiri. Mengeksploitasi fakta bahwa merender array memasukkan ruang antara elemen secara default.

Sangat mirip dengan jawaban Rod's Python, tampaknya, tetapi dikembangkan secara mandiri.

AdmBorkBork
sumber
0

JavaScript, 69 byte

f=(i=e=[])=>e[i<19&&(e[+i]=[]),i/10+i%10|0].unshift(+i)*i++-99?f(i):e

Cobalah online!

JavaScript REPL, 77 byte

[...Array(100)].map((_,i)=>e[i<19&&(e[i]=[]),i/10+i%10|0].unshift(i),e=[])&&e
l4m2
sumber
0

Perl 5 , 62 byte

$,=$";say@,=map$_+=10,@,,$_ for-9..0;say map++$_,@,while pop@,

Cobalah online!

1-diindeks untuk menyimpan beberapa byte

Xcali
sumber
0

Merah , 105, 95 91 byte

v: make vector! 0
loop 10[alter v + 10 length? v print v]loop 9[alter v last v print 1 + v]

Cobalah online!

Penjelasan:

v: make vector!   0                           ; start with a vector with one element: -10
loop 10[alter v + 10 length? v print v]       ; Ten times print the vector after adding 10
                                              ; to its elements and appending the length   
loop 9[alter v last v print 1 + v]            ; Nine times print the vector after adding 1 
                                              ; to its elements and removing the last one
                                              ; `alter` appends the item if it's not
                                              ; in the list, otherwise removes it
Galen Ivanov
sumber
0

JavaScript , 112 byte

Tidak begitu optimal, tetapi saya ingin mencoba pendekatan yang berbeda.

[...Array(19)].map((x,y)=>y>9?81+y:y?y+'0':y).map(x=>(f=(n,a=[n])=>!n|a[n+='']|n[1]>8?a:f(n-=9,a.concat(n)))(x))

Cobalah online!

Solusi lama:

[...Array(19)].map((x,y)=>y>9?y-9+'9':y).map((x,y)=>(f=(n,a=[n])=>a[n/10]|!n?a.reverse():a.push(n+=9)&&f(n,a))(x*1).slice(y-19))

Cobalah online!

Oliver
sumber
0

05AB1E , 16 byte

тL<ΣTLãOsè}TLû£í

Cobalah online!

Penjelasan

тL<Σ      }       # sort the values in [0 ... 99] by
        sè        # the value at that index in
       O          # the sum of
      ã           # the cartesian product of
    TL            # the range [1 ... 10]
              £   # split the result into pieces of sizes
           TLû    # [1,2,...,9,10,9,...2,1]
               í  # and reverse each
Emigna
sumber
0

Perl 6 , 43 40 byte

{map {[R,] grep :k,$_,(^10 X+ ^10)},^19}

Cobalah online!

-3 byte berkat b2gills Brad Gilbert.

nwellnhof
sumber
1
[R,] LISTlebih pendek darireverse LIST
Brad Gilbert b2gills
@ BradGilbertb2gills Bagus, terima kasih!
nwellnhof