Diberi dua angka positif N >= 2
dan N <= 100
buat matriks yang mengikuti aturan berikut:
- Nomor Pertama dimulai dari posisi
[0,0]
- Nomor Kedua dimulai dari posisi
[0,1]
- Angka ketiga berada di bawah Angka Pertama (posisi
[1,0]
) - Angka-angka berikut berjalan ke arah "garis miring"
- Rentang angka yang digunakan adalah
[1, N1 * N2]
. Jadi, bilangan beralih dari mulai 1 ke hasil dari perkalian kedua input.
Memasukkan
- Dua angka
N >= 2
danN <= 100
. Angka pertama adalah jumlah baris, angka kedua jumlah kolom.
Keluaran
- Matriks. (Dapat dihasilkan sebagai array multidimensi atau string dengan jeda baris)
Contoh:
3 and 5
Output angka yang diberikan :
1 2 4 7 10
3 5 8 11 13
6 9 12 14 15
Angka yang diberikan 2 and 2
1 2
3 4
Bilangan yang Diberikan 5 and 5
1 2 4 7 11
3 5 8 12 16
6 9 13 17 20
10 14 18 21 23
15 19 22 24 25
Kode terpendek dalam byte menang.
Jawaban:
Jelly ,
65 byteCobalah online!
Bagaimana itu bekerja
sumber
<atom><atom>¥þ
tetapi saya tidak dapat menemukan kombinasi yang tepat.oþ++þ
dekat tapi tidak cukup sampai di sana[1, 2, 3, 4, 5, 6]
.Ụ
macam array ini, menggunakan kunci yang memetakan1
ke[1, 1]
,2
ke[1, 2]
,3
untuk[2, 1]
, dll. Pada dasarnya, ini menemukan indeks dari setiap pasangan dari array diurutkan-oleh-jumlah dalam array diurutkan-leksikografisPython 3 , 91 byte
Cobalah online!
sumber
R ,
1016054 byteCobalah online!
Terima kasih kepada @nwellnhof untuk sarannya
rank
Jawaban Ports Dennis 'Jelly .
Jawaban lama, 101 byte:
Cobalah online!
split
melakukan sebagian besar pekerjaan di sini; mungkin ada algoritma pegolf tetapi ini pasti bekerja.Penjelasan:
Cobalah online! - Anda dapat menggunakan membungkus di
print
sekitar sisi kanan penugasan<-
untuk melihat hasil antara tanpa mengubah hasil akhir, karenaprint
mengembalikan inputnya.sumber
rank(x,1,"f")
lebih pendek 2 byte dariorder(order(x))
.rank(x,,"l")
akan menyingkirkan itut
juga.Java 10,
121120109105 byte-11 byte terima kasih kepada @ OlivierGrégoire .
-4 byte terima kasih kepada @ceilingcat .
Cobalah online.
Penjelasan:
sumber
x,y
/width,height
J , 15 byte
-4 byte lebih banyak untuk solusi ini dengan mil. Terima kasih!
Cobalah online!
J ,
2219 byte-3 byte terima kasih kepada FrownyFrog!
Cobalah online!
Implementasi solusi Jelly fantastis Dennis di J.
Penjelasan:
Kata kerja Dyadic, mengambil argumen kiri dan kanan (mfn)
+/&i.
membuat daftar 0..m-1 dan 0..n-1 dan membuat tabel tambahan untuk mereka:[:>:@/:@/:@,
meratakan tabel dan menilai daftar dua kali dan menambahkan 1 ke dalamnya:,$
membentuk kembali daftar kembali ke tabel mxn:sumber
-@],\
→,$
untuk −3 byte.$1(+/:@;)</.@i.
dengan input sebagai array[r, c]
/.
tetapi tidak dapat mencapai hasil Anda :)APL + WIN, 38 atau 22 byte
Anjuran untuk kolom masukan bilangan bulat lalu baris:
atau:
berdasarkan aplikasi ganda Dennis naik kelas. Ketinggalan :(
sumber
Bahasa Wolfram (Mathematica) ,
7367 byteHitung elemen dalam baris di atas:
Min[j+k,#2]~Sum~{k,i-1}
Hitung elemen pada baris saat ini dan di bawah ini:
Max[j-k+i-1,0]~Sum~{k,i,#}
Masukkan ke dalam tabel dan tambahkan 1. Voila:
Pembaruan: Saya menyadari ada cara yang lebih pendek untuk menghitung semua posisi di depan posisi yang biasanya ditentukan dalam matriks dengan hanya satu penjumlahan dari dua dimensi:
Cobalah online!
Cobalah online!
sumber
APL (Dyalog Unicode) ,
1412 byteCobalah online!
-2 Berkat ngn , karena penggunaannya yang pintar
↑⍳
.Didasarkan pada solusi Jelly 5-byte milik Dennis.
sumber
∘.+⌿⍳¨⍵
->+/↑⍳⍵
⍳
dipadukan dengan↑
.05AB1E , 23 byte
Cobalah online!
sumber
Python 3 , 164 byte
Cobalah online!
Ini jelas bukan solusi terpendek, tapi saya pikir itu solusi yang menyenangkan.
sumber
from numpy import*
dan menjatuhkan keduanyan.
sedikit lebih pendek. Anda juga dapat menjatuhkan ruang di) for
. Dan mengubah ke Python 2 memungkinkan Anda untuk mengubahreturn a
keprint a
(dalam Python 3 itu akan menjadi byte-count yang samaprint(a)
).import*
. Saya tidak akan pernah mengalahkan jawaban Dennis, jadi saya akan tetap berpegang pada Python 3.Python 2 , 93 byte
Cobalah online!
Versi Semi-Tidak Serigala:
sumber
Japt ,
2524 byteTidak anggun, tetapi menyelesaikan pekerjaan. Bekerja dengan data 2D di Japt itu rumit.
Saya menambahkan
-Q
bendera di TIO untuk visualisasi hasil yang lebih mudah, itu tidak mempengaruhi solusi.Bit satu byte terima kasih kepada Oliver .
Cobalah online!
sumber
×
, Anda dapat menggantinya*V
denganN×
.JavaScript (Node.js) , 103 byte
Cobalah online!
sumber
TI-Basic, 76 byte
Meminta input pengguna dan mengembalikan matriks dalam
Ans
dan mencetaknya.TI-Basic adalah bahasa tokenized ; semua token yang digunakan di sini adalah satu byte, selain
[A]
itu adalah 2 byte.Catatan: TI-Basic (setidaknya pada TI-84 Plus CE) hanya mendukung matriks hingga 99x99, dan begitu juga program ini.
Penjelasan:
sumber
Perl 6 ,
6159 byteCobalah online!
Port lain dari solusi Dennis 'Jelly.
sumber
Java (JDK 10) ,
142131 byteCobalah online!
Penjelasan:
Terima kasih banyak kepada Kevin Cruijssen karena saya tidak tahu cara menjalankan kode saya di tio .
Beberapa kode seperti header dan footer dicuri darinya. -> Jawabannya
sumber
PHP, 115 byte
pendekatan yang cukup malas; mungkin bukan yang sesingkat mungkin.
fungsi anonim, mengambil lebar dan tinggi sebagai parameter, mengembalikan matriks 2d
coba online
sumber
JavaScript (Node.js) ,
108105101100 byteCobalah online!
sumber
Attache , 45 byte
Cobalah online!
Lambda anonim, di mana paramaters diaktifkan. Ini bisa diperbaiki untuk +1 byte, dengan menambahkan terlebih dahulu
~
ke program. Test suite sudah melakukannya.Penjelasan
Pendekatan ini mirip dengan jawaban J dan jawaban Jelly .
Ide pertama adalah membuat tabel nilai:
Ini menghasilkan tabel tambahan menggunakan rentang kedua parameter input. Untuk input
[5, 3]
, ini memberi:Kemudian, kami meratakan ini dengan
Flat!
:Dengan menggunakan pendekatan dalam jawaban J, kita dapat menilai array (yaitu, mengembalikan indeks nilai yang diurutkan) dua kali, dengan
Grade//2
:Kemudian, kita perlu memotong nilainya dengan benar, seperti pada jawaban Jelly. Kita dapat memotong setiap
_
elemen untuk melakukan ini:Kemudian, kita hanya perlu mengompensasi Attache 0-indexing dengan
+1
:Dan dengan demikian kita mendapatkan hasilnya.
sumber
Python 3 , 259 byte
Jadi saya melakukan ini dengan cara yang aneh. Saya perhatikan bahwa ada dua pola dalam bentuk array.
Yang pertama adalah bagaimana pola baris atas memiliki perbedaan antara setiap suku yang meningkat dari 1 -> h di mana h adalah tinggi dan l adalah panjangnya. Jadi saya membuat baris teratas berdasarkan pola itu
Untuk matriks redup (3,4) memberi
max RoC = 3
Kita akan melihat baris atas formulirMisalkan saja redup (3,9) yang memberi
max RoC = 3
kita malah akan melihat baris atasPola kedua adalah bagaimana baris berubah dari satu sama lain. Jika kita mempertimbangkan matriks:
dan kurangi setiap baris dari baris di bawah ini (mengabaikan baris tambahan) yang kita dapatkan
Setelah melihat matriks ini, kita dapat melihat bahwa matriks ini adalah urutan di
2 3 4 5 5 4 3 2
mana oleh setiap baris adalah 5 istilah dari pola ini digeser oleh 1 untuk setiap baris. Lihat di bawah untuk visual.Jadi untuk mendapatkan matriks terakhir kita ambil baris pertama yang kita buat dan output baris yang ditambahkan dengan 5 syarat yang diperlukan dari pola ini.
Pola ini akan selalu memiliki karakteristik awal
2-> max value
dan akhir dimax value -> 2
manamax value = min(h+1, l)
dan berapa kali nilai maksimum akan muncul adalah diappearances of max = h + l -2*c -2
manac = min(h+1, l) - 2
Jadi secara keseluruhan metode saya membuat baris baru terlihat seperti
Kode yang relevan di bawah ini. Itu tidak berakhir pendek tapi saya masih suka metode.
Cobalah online!
sumber
Japt, 20 byte
Cobalah
sumber