Diberikan bilangan bulat positif n
, mengeluarkan N
"matriks" identitas -dimensi, yang merupakan N^N
larik dengan 1
semua komponen indeks sama dan 0
tidak. N^N
berarti N-oleh-N-oleh-N-oleh -...
1 -> [1]
2 -> [[1,0],[0,1]]
3 -> [[[1,0,0],[0,0,0],[0,0,0]],[[0,0,0],[0,1,0],[0,0,0]],[[0,0,0],[0,0,0],[0,0,1]]]
4 -> [[[[1,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]],[[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,1,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]],[[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,1,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]],[[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,1]]]]
Sebagai contoh, jika a
adalah 4
berdimensi identitas "matrix", maka satu-satunya entri dengan 1
akan a[0][0][0][0]
, a[1][1][1][1]
, a[2][2][2][2]
, dan a[3][3][3][3]
.
Ini adalah kode-golf . Jawaban terpendek dalam byte menang. Celah standar berlaku.
code-golf
math
array-manipulation
integer
generation
Biarawati Bocor
sumber
sumber
Jawaban:
Oktaf, 29 byte
Cobalah online!
sumber
Jelly , 8 byte
Cobalah online!
Ooh, sepertinya saya bisa mengalahkan @Dennis dalam bahasanya sendiri lagi :-)
Ini adalah fungsi 1-argumen (karena format output default Jelly untuk daftar bersarang sedikit ambigu, artinya bisa dikatakan tidak memenuhi spesifikasi sebagai program lengkap).
Penjelasan
Untuk memahami ini, ada baiknya untuk melihat langkah-langkah perantara. Untuk input 3, kami mendapatkan langkah perantara berikut:
[1,2,3]
(input, dibuat menjadi rentang yang secara implisit olehþ
)[[1,0,0],[0,2,0],[0,0,3]]
(buat tabel dengan[1,2,3]
, bandingkan untuk mendapatkan persamaan[[1,0,0],[0,1,0],[0,0,1]]
, lalu kalikan dengan salah satu nilai yang kami bandingkan)[[[1,0,0],[0,0,0],[0,0,0]],[[0,0,0],[0,2,0],[0,0,0]],[[0,0,0],[0,0,0],[0,0,3]]]
(ide yang sama lagi)[[[1,0,0],[0,0,0],[0,0,0]],[[0,0,0],[0,1,0],[0,0,0]],[[0,0,0],[0,0,0],[0,0,1]]]
(ganti setiap elemen dengan tandanya menggunakanṠ
)Perhatikan fakta bahwa input mulai 1-dimensi berarti kita harus mengulang (input-1) kali untuk menambahkan (input-1) dimensi, menghasilkan daftar dimensi-input.
Fakta menyenangkan: program ini berisi lima quicks berturut-turut
¥þ’¡`
,. (Quick adalah pengubah "tautan", atau bawaan, digunakan untuk mengubah perilakunya atau menggabungkannya dengan tautan lain.)sumber
Mathematica, 30 byte
sumber
Table
adalah tambahan baru-baru ini. Matematika masih membutuhkan daftar tunggal di sana: tio.run/##y00sychMLv7/P83WsagosTLaKT8/…Array[Boole@*Equal,#~Table~{#}]&
dapat bekerja di Matematika. Versi lama Mathematica tidak mendukung integer sebagai argumen keduaTable
, dan saya kira Matematika didasarkan pada hal itu.APL (Dyalog) , 10 byte
Cobalah online!
1=
1 adalah sama dengan≢
nomor∘
dari∪
elemen unik¨
di masing-masing⍳
indeks dalam array dengan dimensi⍴⍨
yang membentuk kembali diri ( N salinan N ) dari⎕
input ( N ) [?]sumber
Jelly , 9 byte
Cobalah online!
Bagaimana itu bekerja
Mencapai tugas secara langsung tampaknya sulit (saya belum menemukan cara), tetapi menyusun array dengan nomor yang sama dan array dengan bentuk yang sama cukup mudah.
ð
membuat diad rantai, dan input integer n berfungsi sebagai argumen kiri dan kanan untuk rantai. Dimungkinkan untuk menggunakan rantai monadik sebagai gantinya, tetapi aturan parsing untuk yang diad menyimpan tiga byte di sini (dua setelah accouting forð
).The listrik Cartesian atom
ṗ
, dengan argumen kiri dan kanan sama untuk n , konstruksi array semua vektor dengan panjang n yang terdiri dari unsur [1, ..., n] , diurutkan leksikografi.Ketika n = 3 , ini menghasilkan
The sama setiap Quicklink
E€
menguji unsur semua vektor dibangun untuk kesetaraan.Ketika n = 3 , kita dapatkan
yang merupakan elemen dari matriks identitas 3 dimensi, dalam susunan datar.
Dilink cepat
+þ’¡
disebut dengan argumen kiri dan argumen kanan n . Quick¡
memanggil atom decrement’
, yang menghasilkan n-1 , lalu memanggil quicklink tabel tambahkan+þ
n-1 kali.Awalnya, argumen
+þ
keduanya n . Setelah setiap panggilan, argumen kanan digantikan oleh yang kiri, dan yang kiri digantikan oleh nilai balik dari panggilan.The meja cepat memanggil add atom
+
untuk setiap elemen argumen kiri dan setiap elemen argumen kanan, membangun tabel / matriks nilai kembali. Argumen integer awal n dipromosikan ke rentang [1, ... n] .Ketika n = 3 , setelah promosi tetapi sebelum iterasi pertama, kedua argumen tersebut
Menambahkan setiap integer dalam array ini ke setiap integer dalam array ini menghasilkan
Dalam doa berikutnya, kami menambahkan masing-masing array ini ke integer di [1, 2, 3] . Addition vectorizes (menambahkan integer ke array menambahkannya ke setiap elemen), jadi kita dapatkan
Array ini memiliki bentuk yang sama dengan matriks identitas 3 dimensi, tetapi bukan elemen yang benar.
Akhirnya, atom cetakan
ṁ
membuang entri bilangan bulat dari hasil ke kanan dan menggantinya sesuai dengan unsur-unsur dalam hasil di sebelah kiri.sumber
Python , 70 byte
Cobalah online!
Solusi rekursif. Memikirkan matriks sebagai daftar matriks satu dimensi lebih kecil, itu beralih ke daftar itu untuk turun pohon. Itu mengingat indeks yang dipilih
l
, dan ketikan
indeks telah diambil, kami menetapkan1
atau0
tergantung pada apakah semuanya sama.Python 2 , 73 byte
Cobalah online!
Peningkatan pada metode benar-benar manusiawi membuat matriks nol dan kemudian menetapkan yang ke diagonal.
Python 2 , 88 byte
Cobalah online!
Beberapa omong kosong dengan
eval
, menghasilkan daftar bersarang, dan substitusi format string. String yang akan dievaluasi terlihat seperti:sumber
Python 2 + NumPy ,
807270 byteSekarang diikat dengan jawaban Python teratas!
Cobalah online
Disimpan 8 byte berkat Andras Deak, dan 2 oleh officialaimm
sumber
a[[range(n)]*n]=1
alih-alih eksekutif Anda.fill_diagonal(a,1)
untuk tujuan ini, tapi itu satu byte lebih lama)i
, yang seharusnya menghemat 2 byte.Python 2 ,
999390 byteTerima kasih kepada Rod untuk
beberapabantuan lebih banyak lagi yang mendapatkannya bekerja dan juga mencukur 6 byte off! -3 byte terima kasih kepada xnor.Cobalah online!
sumber
def/return
tidak pernah lebih baik daripadainput/print
(dalam skenario terbaik sama dengan), Anda juga dapat menurunkan()
dalam('[%d]'%i)
pengurangan hingga 93 byte'[%d]'%i
kebetulan adalah string rep dari[i]
.JavaScript (ES6), 67 byte
Penjelasan:
i
digunakan untuk melacak apakah sel berada di diagonal utama atau tidak. Awalnya itu tidak terdefinisi, jadi pada panggilan rekursif pertama kami selalu melewati dimensi pertama, sementara pada panggilan rekursif berikutnya kami hanya meneruskannya jika indeks dimensi saat ini sama dengan semua dimensi sebelumnya, jika tidak kami melewati indeksn
yang menunjukkan bahwa semua sel rekursif harus nol.sumber
Brainfuck , 61 byte
Tidak disatukan
Angka-angka setelah tanda kurung siku menunjukkan sel kepala berakhir.
Cobalah online!
Input adalah nomor biner. Output adalah matriks yang disimpan dalam urutan baris-utama.
sumber
R ,
6449 byte-15 byte berkat Jarko Dubbeldam
Membaca dari stdin dan mengembalikan array, mencetak sebagai matriks.
seq
menghasilkan urutan merata spasi dari1
ken^n
dengan panjangl=n
, yang melakukan trik dengan cukup baik untuk mengindeks ke mana 1s pergi.Cobalah online!
versi lama:
Baca
n
dari stdin; mengembalikan array, mencetak hasilnya sebagai matriks. Saya berjuang dengan ini untuk sementara waktu sampai saya membaca dokumen untuk[
, yang menunjukkan bahwa matriks dapat digunakan untuk mengindeks array, di mana setiap baris matriks mewakili set indeks. Rapi!Cobalah online!
sumber
array(0, rep(n,n)
bekerja, jadi Anda tidak perlu melakukannyarep
. Anda kemudian dapat juga mengambiln
melaluiarray(0, rep(n<-scan(),n))
.x[seq(1,n^n,l=n)]=1
1 byte lebih pendek.J ,
1615 byteCobalah online!
sumber
Python 3 + numpy,
8177 byteSaya tidak sepenuhnya yakin bahwa di atas cocok dengan semua pedoman: ini mengembalikan ndarray dengan properti yang diberikan. Saya tahu fungsi anonim biasanya baik-baik saja, tetapi shell interaktif sebenarnya akan dicetak
Jika array bulu membuat di atas tidak valid, saya harus melempar
print()
untuk sesuatu seperti 7 byte tambahan.Cobalah online!
sumber
Pyth, 14 byte
Suite uji
Penjelasan:,
^U
yang secara implisit^UQQ
, di manaQ
input, menghitung semua daftar elemen Q yang mungkin dari rentang0 ... n-1
.ms!t{d
memetakan yang dengan semua elemen sama dengan 1, dan sisanya ke 0. Ini memberikan hasil yang rataucGQtQ
jalankan yang berikut ini, Q - 1 kali: Potong input ke daftar ukuran Q.sumber
C # (.NET Core) , 166 byte
Cobalah online!
Awalnya saya pikir itu tidak bisa dilakukan dengan ekspresi lambda di C # ... ^ __ ^ U
sumber
Common Lisp,
147133 byteCobalah online!
Cadel super-panjang biasa. Berkurang 12 byte, terima kasih kepada @ceilingcat!
Penjelasan:
sumber
SOGL V0.12 , 22 byte
Coba Di Sini!
Meninggalkan output di tumpukan , dapat dilihat di konsol. Jika angka-angka dalam output dibiarkan berupa string, maka angka
r
tersebut dapat dihapus.Seperti halnya tes menyenangkan tentang bagaimana SOGL dalam tantangan, itu sama sekali tidak dibuat untuk: p
sumber
Clojure, 92 byte
Bagus bahwa assoc-in berfungsi juga dengan vektor, tidak hanya dengan hash-maps.
sumber