Tantangannya sangat sederhana. Diberikan input integer n
, output n x n
matriks identitas. Matriks identitas adalah matriks yang 1
membentang dari kiri atas ke kanan bawah. Anda akan menulis program atau fungsi yang akan mengembalikan atau menampilkan matriks identitas yang Anda buat. Output Anda mungkin berupa array 2D, atau angka yang dipisahkan oleh spasi / tab dan baris baru.
Contoh input dan output
1: [[1]]
2: [[1, 0], [0, 1]]
3: [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
4: [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]
5: [[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]]
1
===
1
2
===
1 0
0 1
3
===
1 0 0
0 1 0
0 0 1
etc.
Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
code-golf
math
matrix
linear-algebra
binary-matrix
code-challenge
polyglot
code-golf
restricted-source
programming-puzzle
expression-building
apl
code-challenge
image-processing
compression
code-golf
puzzle-solver
code-golf
grid
code-golf
number
number-theory
code-golf
array-manipulation
sorting
code-golf
string
balanced-string
code-golf
puzzle-solver
code-golf
string
decision-problem
code-golf
path-finding
puzzle-solver
graph-theory
code-golf
string
encode
networking
code-golf
code-golf
string
chemistry
code-golf
date
code-golf
decision-problem
graph-theory
code-golf
ascii-art
graph-theory
code-golf
string
Seadrus
sumber
sumber
Jawaban:
MATL, 2 byte
Terjemahan dari jawaban Oktaf saya.
Cobalah online.
Versi 4 byte tanpa built-in (terima kasih kepada Luis Mendo):
sumber
:t!=
TI-BASIC, 2 byte
Fakta menyenangkan: Cara terpendek untuk mendapatkan daftar
{N,N}
adalahdim(identity(N
.Inilah cara terpendek tanpa builtin, dalam 8 byte:
randM(
membuat matriks acak dengan entri semua bilangan bulat antara -9 dan 9 inklusif (yang terdengar aneh karena itu). Kami kemudian mengambil matriks ini ke kekuatan 0.sumber
{N,N}
, umm{N,N}
,?dim(
danidentity(
masing-masing satu byte karena TI-BASIC adalah tokenized.Julia,
93 byteIni hanya fungsi bawaan yang menerima integer
n
dan mengembalikannxn Array{Float64,2}
(yaitu array 2D). Sebut saja sepertieye(n)
.Perhatikan bahwa pengiriman formulir ini dapat diterima sesuai kebijakan ini .
sumber
APL, 5 byte
Ini adalah kereta fungsi monadik yang menerima integer di sebelah kanan dan mengembalikan matriks identitas.
Coba di sini
sumber
Oktaf,
104 byteMengembalikan fungsi anonim yang mengambil angka
n
dan mengembalikan matriks identitas.sumber
@eye
Cukup.eye
menghasilkan matriks identitas dalam banyak / beberapa bahasa yang berorientasi numerik.@
dilakukan?@
adalah "operator fungsi pegangan", berfungsi sepertilambda
dan juga sebagai referensi ke fungsi tertentu, jadi misalnya,@(x)x.^2
adalah fungsi kuadrat dan@sqrt
merupakan referensi ke fungsi akar kuadrat. Anda dapat membaca lebih lanjut tentang itu di siniR, 4 byte
Ketika diberi matriks,
diag
mengembalikan diagonal matriks. Namun, ketika diberi bilangan bulatn
,diag(n)
mengembalikan matriks identitas.Cobalah online
sumber
Python 2, 42 byte
Fungsi anonim, menghasilkan keluaran seperti
[(1, 0, 0), (0, 1, 0), (0, 0, 1)]
,Pertama, buat daftar
([1]+[0]*n)*n
, yangn=3
terlihat sepertiMenggunakan trik zip / iter
zip(*[iter(_)]*n
untuk membuat kelompokn
memberiPerhatikan bahwa
1
muncul satu indeks nanti setiap kali, memberikan matriks identitas. Tapi, ada baris ekstra semua nol, yang dihapus dengan[:n]
.sumber
Jelly, 4 byte
Tidak menggunakan built-in. Cobalah online!
Bagaimana itu bekerja
sumber
=þ
dua byte, dan mengolok-olok jawaban yang lebih panjang.J, 4 byte
Ini adalah fungsi yang mengambil integer dan mengembalikan matriks.
sumber
=i.
(=i.) 10
=>0 0 0 0 0 0 0 0 0 0
Haskell,
4337 byteCukup mudah, meskipun saya pikir seseorang dapat melakukan lebih baik (tanpa bahasa yang sudah memiliki fungsi ini built in, seperti yang telah dilakukan banyak orang).
Sunting: turun beberapa byte berkat Ørjan Johansen
sumber
fromEnum
assum[1|x==y]
.fromEnum (y==x)
0^abs(x-y)
.0^(x-y)^2
jawaban lain, bahkan lebih pendek.Pyth, 7 byte
Cobalah online: Demonstrasi
Membuat matriks nol dan mengganti elemen diagonal dengan yang satu.
sumber
Q
JavaScript ES6,
686252 byteDisimpan 10 byte berkat trik yang rapi dari @Neil
Mencoba pendekatan yang berbeda dari @ Cᴏɴᴏʀ O'Bʀɪᴇɴ. Mungkin bisa ditingkatkan.
sumber
x=>[...Array(x)].map((_,y,x)=>x.map((_,z)=>+(y==z)))
untuk menghemat 10 byte.x=>[...Array(x)].map((_,y,x)=>x.map(_=>+!y--))
Retina , 25
Kredit ke @randomra dan @Martin untuk golf ekstra.
Cobalah online.
Catatan ini mengambil input sebagai unary. Jika ini tidak dapat diterima, maka input desimal dapat diberikan sebagai berikut:
Retina, 34
Cobalah online.
sumber
$*0
untuk mengganti nomor n dengan n0
s.Haskell, 54 byte
f
mengembalikan matriks identitas untuk input n. Jauh dari optimal.sumber
map
panggilan.Lua,
77 7565 byteYah, aku tidak yakin apakah lua adalah bahasa terbaik untuk ini dengan penggabungan dua periode ... Tapi, hei, ada kesempatan untuk itu. Saya akan melihat apakah ada perbaikan yang harus dilakukan.
EDIT:
Saya menemukan sesuatu pada kecelakaan yang menurut saya agak aneh, tetapi berhasil.
Di Lua, semua orang tahu Anda memiliki kemampuan untuk menetapkan fungsi ke variabel. Ini adalah salah satu fitur CodeGolf yang lebih berguna.
Ini berarti bukannya:
Kamu bisa melakukan ini:
Tapi tunggu, Lua memungkinkan sejumlah OOP. Jadi, Anda bahkan berpotensi melakukan:
Itu akan bekerja juga dan memotong karakter.
Sekarang inilah bagian yang aneh. Anda bahkan tidak perlu menetapkan string di titik mana pun. Cukup melakukan:
Akan bekerja.
Agar Anda dapat melihat perbedaannya secara visual, lihat hasil golf ini:
Menggunakan string.sub (88 karakter)
Menetapkan string.sub ke variabel (65 karakter)
Menetapkan string.sub menggunakan pendekatan OOP (64 karakter)
Menetapkan string.sub menggunakan pendekatan .. nil? (60 karakter)
Jika seseorang tahu mengapa ini berhasil, saya akan tertarik.
sumber
Python 3, 48
Disimpan 1 byte berkat sp3000.
Saya suka tantangan yang bisa saya selesaikan dalam satu baris. Cukup sederhana, buat garis dari 1 dan 0 sama dengan panjang int yang dilewatkan. Output sebagai array 2d. Jika Anda membungkus bagian setelah: di
'\n'.join()
, itu akan cukup mencetaknya.sumber
x-i-1 -> x+~i
C,
59 atau 5956 atau 56Dua versi dengan panjang yang identik.
3 byte disimpan karena saran dari anatolyg:
(n+1)
->~n
Berganti
i
darin*n-1
nol. Mencetak 1 jika i% (n + 1) adalah nol, jika tidak, maka 0. Mencetak baris baru jikai%n
= 0 jika tidak spasi.sumber
n+1
terlalu membosankan. Gunakan~n
sebagai gantinya!i;
?i;
hanya mendeklarasikan variabeli
. Dalam C Anda selalu harus mendeklarasikan variabel sebelum menggunakannya, menunjukkan tipe sehingga kompiler tahu berapa banyak memori yang dialokasikan. Dengan kompiler GCC, jika Anda tidak menentukan tipe yang diasumsikanint
.Mata, 4 byte
Keluaran
Mata adalah bahasa pemrograman matriks yang tersedia dalam paket statistik Stata. I (n) membuat matriks identitas dengan ukuran n * n
sumber
I
dan 3 byte lainnya hanya memanggil fungsi. Itu akan membuat jawaban Anda salah satu yang terendah pada tantangan ini! :-)K6 , 1 byte
=
persis seperti iniCobalah online!
sumber
Pyth, 8 byte
Coba di sini .
sumber
qRRQQ
yang tampaknya berfungsi kecuali Anda dapatkanTrue
danFalse
bukannya1
dan0
, namun memperbaiki afaik ini membutuhkan menggunakan tiga bytesMM
yang tidak membantu ...Python 3.5 dengan NumPy -
574930 byteNumPy.identity mengambil integer, n, dan mengembalikan sebuah matriks identitas n. Jawaban ini diizinkan melalui kebijakan ini .
sumber
import numpy\nnumpy.identity
adalah jawaban yang sah .import numpy\nnumpy.identity()
30 byte?from numpy import identity
. 26 byte.from numpy import identidy\nidentity
(dalam hal ini akan lebih pendek untuk digunakan*
daripada builtin spesifik)Mathematica, 35 Bytes
tanpa menggunakan IdentityMatrix
sumber
Javascript, 40
sumber
Japt,
141210 byteUji secara online! Catatan: versi ini memiliki beberapa byte tambahan untuk mencetak keluaran dengan cantik.
sumber
Brain-Flak ,
206170162 byteCobalah online!
sumber
K, 7 byte
Ambil produk persamaan silang dari dua vektor yang mengandung [0, n).
Beraksi:
sumber
Java, 60 byte
Membuat array 2D dan menggantikan elemen dengan baris dan kolom yang sama dengan
1
.sumber
CJam, 7 byte
Ini adalah blok kode yang mengeluarkan bilangan bulat dari tumpukan dan mendorong array 2D sebagai imbalannya.
Cobalah online!
sumber
Mathematica, 14 byte
Kasus cobaan
sumber
Perl,
3933 byteTerima kasih kepada Ton Hospel untuk menghemat 6 byte
Berlari dengan
-E
perlrun:sumber
/$/,say map$`==$_|0,@%for@%=1..<>
atau bahkan lebih baik//,say map$'==$_|0,@%for@%=1..<>
tetapi Anda tidak bisa lagi menuliskannya dalam satu tanda kutipprint
alih-alih mengatakan, karena-E
hanya gratis di baris perintah.