Definisi
Sebuah matriks centrosymmetric adalah persegi matriks yang simetris sekitar pusatnya. Lebih tepatnya, matriks ukuran adalah centrosymmetric jika, untuk apa pun hubungan berikut ini terpenuhi: n × n i ,A i ,
Contoh dari matriks seperti itu
Berikut ini adalah ilustrasi simetri dari matriks seperti ini (dipinjam dari artikel Wikipedia yang disebutkan sebelumnya):
Matriks centrosymmetric genap-sisi-panjang ( ):
Dan panjang sisi-aneh ( ) satu:
Tugas dan Spesifikasi
Dengan ukuran matriks kuadrat minimal , output salah satu dari dua nilai yang berbeda dan konsisten, memutuskan apakah matriksnya centrosymmetric atau tidak. Anda dapat mengasumsikan bahwa matriks akan terdiri dari bilangan bulat positif.
Namun, kode Anda juga harus centrosymmetric. Artinya, harus berupa program / fungsi (atau yang setara) yang terdiri dari baris, yang masing-masing berisi byte dalam pengkodean bahasa Anda, dan harus memenuhi definisi yang diberikan di atas, tetapi dengan byte alih-alih bilangan bulat positif. Skor kiriman Anda adalah nilai , dengan lebih rendah lebih baik.
Anda dapat mengambil input dan memberikan output melalui metode standar dan dalam format apa pun yang masuk akal, sambil memperhatikan bahwa celah ini dilarang secara default. Anda dapat (secara opsional) memilih untuk mengambil ukuran, , sebagai input juga (kecuali jika Anda mengambil input sebagai daftar 1D, dalam hal ini Anda hanya dapat mengambil sebagai input tambahan).
Uji kasus
Benar:
[[1, 2], [2, 1]]
[[1, 2, 3], [5, 6, 5], [3, 2, 1]]
[[10, 5, 30], [2, 6, 2], [30, 5, 10]]
[[100, 100, 100], [100, 50, 100], [100, 100, 100]]
[[1, 2, 3, 4], [5, 6, 7, 8], [8, 7, 6, 5], [4, 3, 2, 1]]
[[3, 4, 5, 6, 7], [5, 6, 7, 8, 9], [3, 2, 10, 2, 3], [9, 8, 7, 6, 5], [7, 6, 5, 4, 3]]
Falsy:
[[1, 2], [1, 2]]
[[1, 2, 10], [5, 6, 5], [11, 2, 1]]
[[14, 5, 32], [2, 6, 2], [30, 5, 16]]
[[19, 19, 19], [40, 50, 4], [19, 19, 19]]
[[1, 2, 20, 4], [7, 6, 7, 8], [8, 7, 6, 6], [3, 3, 2, 1]]
[[3, 4, 5, 6, 7], [5, 6, 7, 8, 9], [4, 5, 10, 4, 5], [5, 6, 7, 8, 9], [3, 4, 5, 6, 7]]
#
), sehingga bagian bawah kode semua akan menjadi komentar.#
tidak akan bekerja karena komentar yang didahului#
hanya sebaris: PJawaban:
JavaScript (ES6), ukuran
12119Semua versi mengembalikan false untuk centrosymmetric atau true untuk non-centrosymmetric.
1 dimensi array + panjang, ukuran 9 (89 byte)
Mengambil input dalam sintaks currying
(length)(array)
, di mana array adalah 1-dimensi.Cobalah online!
Matriks + lebar, ukuran 11 (131 byte)
Mengambil input dalam sintaks currying
(width)(matrix)
.Cobalah online!
Muatan
Wadah
Matriks saja, ukuran 12 (155 byte)
Ini adalah solusi asli saya, yang menghitung lebar matriks dengan sendirinya.
Cobalah online!
Bagaimana?
Kami membutuhkan beberapa token penting yang tidak dapat dibagi:
some
length
)=>
Umpan baris dapat dimasukkan hampir di tempat lain.
Kode payroll yang belum dibaca dibaca sebagai:
dan dibungkus di dalam struktur berikut:
yang, setelah dibalik, menjadi komentar blok yang valid:
sumber
Jelly , skor 2
Cobalah online!
Mengambil input sebagai matriks persegi yang diratakan (vektor ukuran ).n2
sumber
Befunge-93 , ukuran 24
Cobalah online!
Input:,
n
diikuti oleh elemen-elemen array, semua dipisahkan oleh spasi. CATATAN: Anda mungkin perlu menggunakan juru bahasa lain jika Anda memiliki input yang cukup besar.Saya yakin ada cara yang lebih baik untuk melakukan ini, saya hanya ingin mencoba ini di Befunge. Bagian kode aktual adalah bagian atas.
Bagaimana?
Kode ini dibagi menjadi dua bagian utama, inisialisasi dan verifikasi .
Inisialisasi:
Bagian kode ini menulis matriks input tepat di bawah kode sebagai karakter ASCII. Baik ini dan bagian berikutnya menggunakan tiga sel di kiri atas kode sebagai data. Mereka disimpan sebagai
n, i, j
.Verifikasi:
Bagian lain dari kode adalah sampah yang belum dibaca untuk membuatnya centrosymmetric.
sumber
Tidak ada komentar!
Mengambil input sebagai daftar 1-D
Cobalah online!
Mengambil input sebagai matriks 2-D
Cobalah online!
Terima kasih kepada potato44 untuk semua bantuan mereka dalam obrolan. Dan Lynn untuk bermain golf berturut-turut.
Penjelasan
Ide umum di sini adalah yang sederhana, kita
concat
daftar dan membandingkannya dengan itu terbalik. Namun karena kami ingin menjadi centrosymmetric, kami harus melangkah dengan hati-hati. Pertama kita menulis kode seperti biasa:Sekarang agar garis terbalik kita menjadi Haskell yang valid, kita perlu sisi kiri persamaan kita agar terlihat seperti definisi fungsi yang
tacnoc.)esrever>*<)==((
tidak.Langkah pertama untuk memperbaikinya adalah membuang tanda kurung.
Namun kami memiliki beberapa masalah baru sekarang. Keduanya
.
dan==
ketika terbalik adalah sama, sehingga garis terbalik kami berusaha untuk mendefinisikan kembali operator (<*>
terbalik adalah>*<
kami baik-baik saja di depan itu)..
dapat diganti dengan<$>
karena fungsi adalah fungsi. Dan kita bisa menggantinya==
dengan/=
, yang meniadakan output kita, tetapi itu masih dalam spesifikasi. Sekarang kita punyaUntuk memangkas panjang garis kami, kami alias
concat
danreverse
.Sekarang kita hanya menyelesaikan ini dengan membuat semuanya centrosymmetric dan persegi.
Versi 1-D yang lebih pendek bekerja dengan cara yang sama kecuali karena tidak perlu
concat
kita dapat menyimpan dua baris dengan menghapusnya.sumber
<$>
juga<$>
.Python 2 , ukuran 10 (109 byte)
Cobalah online!
Sebelumnya Python 2 , ukuran 14 (209 bytes)
Cobalah online!
sumber
-i-1
dan-j-1
bisa saja~i
dan~j
Pyth, ukuran 6 (41 byte)
Coba di sini
Penjelasan
Baris pertama membalikkan input dan setiap baris, dan memeriksa apakah kita memiliki salinan input.
Baris
.q
kedua keluar dari program, jadi semuanya setelah itu, dan jugaq
sebelumnya, adalah no-op.sumber
APL (Dyalog Unicode) , skor
7654Program lengkap. Anjuran untuk ekspresi matriks dari stdin. Mencetak 1 atau 0 dan kemudian melempar kesalahan yang konsisten. Tidak ada komentar!
Cobalah online!
⎕
meminta ekspresi dan mengevaluasinya,
ravel (meratakan) itur←
menyimpan hasilnya dir
(untuk r avelled)⌽r
mirrorr
r≡
secara implisit mencetak apakahr
identik dengan itu≡
kedalamanr
(memberi 1)r⌽
gunakanr
untuk memutar itu(ini akan selalu menyebabkan a
RANK ERROR
dan berhenti karena matriks tidak diizinkan sebagai argumen kiri ke⌽
)sumber
Perl 6 , ukuran
9 87Cobalah online!
Oke, saya sudah mengubahnyareverse
adalah hambatan di sini. Saya telah mengubahnya menjadi lebih lama secara teknis, tetapi jauh lebih mudah dipecah[*-1 X-^*]
.[R,]
setelah melihat jawaban Brad Gilbert untuk pertanyaan lain.Kode yang diratakan adalah
{.flat eq [R,] .flat}
.Sunting: Sial, saya sadar saya bahkan tidak perlu meratakan daftar pertama, tetapi upaya mempersingkatnya menjadi ukuran 6 telah gagal dengan hanya satu byte yang terlalu banyak untuk masuk ...
:(
Meskipun jika kita menganggapnya sebagai array satu dimensi, mudah untuk memasangnya dalam ukuran 6.
Cobalah online!
sumber
Bahasa Wolfram (Mathematica) (hanya REPL), ukuran 8 (71 byte)
Pengembalian
True
untuk input centrosymmetric, danFalse
sebaliknya.Pada Mathematica REPL, garis dengan kesalahan sintaks diabaikan (dengan bilah merah tebal muncul di sisi layar). Di sini, hanya tiga baris pertama
f=#[[c=-1;;1;;-1,c]]==#&
,, dieksekusi.Kode ini menangkap fungsi dalam nama
f
.Sayangnya, built-in
PalindromeQ
terlalu lama.sumber
Pyt , ukuran 1
Cobalah online!
Cek apakah input (dalam bentuk baris bersambung) adalah palindrom.
sumber
Japt , ukuran
94 (11 byte)Cobalah online!
Mengambil input satu dimensi, memeriksa apakah itu palindrom. Jika mau, Anda dapat mengisi dua baris kosong untuk beberapa ascii art.
Versi dua dimensi yang lama, memutar input dua kali dan memeriksa apakah itu sama dengan aslinya:
Cobalah online!
sumber
Sekam , ukuran 3
Cobalah online! Masukan sebagai Daftar 1D. Setiap baris mendefinisikan fungsi, tetapi hanya yang di baris pertama yang dipanggil.
Ṡ=↔
adalah tes palindrome yang memeriksa apakah input sama dengan (=
) kebalikannya (↔
).Sekam , ukuran 4
Cobalah online! Untuk input sebagai matriks-2D, kami menggabungkan (
Σ
) daftar daftar sebelum memeriksa apakah itu palindrom.sumber
MATL , skor 4
Input memiliki format
[1 2; 2 1]
, menggunakan;
sebagai pemisah baris.Output melalui STDERR ( diizinkan secara default):
Untuk input centrosymmetric dihasilkan kesalahan kesalahan yang konsisten. Dengan versi Linux dan Oktaf saat ini di TIO, output STDERR berikut dihasilkan (mengabaikan garis akhir yang dimulai dengan
Real time: ...
):Kesalahan mungkin berbeda tergantung pada versi Linux dan Oktaf, tetapi akan konsisten di seluruh input.
Untuk input non-sentrosimetri tidak ada kesalahan yang dihasilkan, dan output STDERR pada TIO adalah
Cobalah online! Atau verifikasi semua kasus uji:
Periksa apakah programnya adalah centrosymmetric.
Penjelasan
%
adalah simbol komentar, yang menyebabkan sisa baris o diabaikan. Baris baru juga diabaikan. Jadi kodenya adilyang melakukan hal berikut:
sumber
Haskell, ukuran
11,10,9, 8Mengambil input sebagai daftar 2D! (Kredit ke Ørjan Johansen)
sumber
<*>
seharusnya>*<
. Dalam 2D, ada bagian yang hilang-
dan terbalik tidak memiliki ruang di tempat yang tepat.Python 2 , ukuran 8
Cobalah online!
Daftar ini hanya diperiksa sebagai palindrome. Jika ya, rantai perbandingan
a[::-1]!=a<_
gagal pada!=
langkah dan hubungan pendek; jika tidak, variabel yang tidak diketahui_
akan dievaluasi, menabrak program.sumber
R , ukuran 9
Cobalah online!
Tiga baris terakhir adalah program aktual yang mengambil array 1D sebagai input dan memeriksa apakah itu sama dengan kebalikannya. Nilai sebenarnya: FALSE, Nilai Falsy: TRUE.
R + pryr, ukuran 9
Cobalah online!
sumber
C # (.NET Core) , skor
13 1110Cobalah online!
Mengambil input sebagai array 1D dan n 2 sebagai panjang; pengembalian
false
untuk centrosymmetric dantrue
untuk non-centrosymmetric. Versi ini menggunakanSystem.Linq
tetapi saya tidak tahu bagaimana memasangnya dalam pengiriman kode karena persyaratan khusus dari tantangan. Kode terbuka:Berikut ini adalah kiriman saya sebelumnya yang tidak menggunakan LINQ:
C # (.NET Core) , skor
16 1513Cobalah online!
Kode terbuka:
sumber
int
kevar
(demikian jugatni
kerav
), pengiriman kedua juga berfungsi dalam JavaScript.Ruby , skor
98Cobalah online!
Seorang lambda mengambil matriks yang diratakan sebagai input. Mengembalikan nilai true untuk centrosymmetric, false jika tidak.
-1 terima kasih kepada Mr.XCoder,
Dibongkar:
sumber
Bersih , ukuran 9
Terima kasih kepada Ørjan Johansen !
Cobalah online!
Bersih , ukuran 10
Cobalah online!
sumber
m
.05AB1E , ukuran 3 (11 byte )
Masukan sebagai daftar tunggal.
Cobalah online.
Saya kira yang ini tidak masuk hitungan ..; hlm
Masukan sebagai daftar tunggal.
Cobalah online.
Penjelasan:
Beberapa ukuran 3 (11 byte ) alternatif:
Matriks sebagai input.
Cobalah online.
Daftar tunggal sebagai input.
Cobalah online.
sumber
C (gcc) , 12 x 12
Cobalah online!
sumber
> <>, Ukuran 6
Cobalah online!
(Ternyata itu sakit melewati beberapa nilai ke -v di tio)
Input diambil sebagai array satu dimensi sebagai kondisi tumpukan awal dengan -v. Keluar tanpa keluaran jika matriksnya centrosymmetric, keluar dengan kesalahan (mencetak "Sesuatu berbau amis ...") jika tidak.
Saya tidak sepenuhnya senang dengan format output ini, jadi inilah ukuran 7 yang menghasilkan 1 untuk true, dan 0 untuk false.
Cobalah online!
sumber
{-?;
Stax , n = 3
Jalankan dan debug itu
Penjelasan:
3 adalah yang terbaik karena saya membutuhkan setidaknya tiga perintah: Salin, balikkan, dan bandingkan
Stax , n = 4
Jalankan dan debug itu
Penjelasan:
sumber
Japt , ukuran 2 (5 byte)
Cobalah
sumber
Java 10, ukuran 13 (181 byte)
Cobalah online.
Terinspirasi oleh @Charlie C # .
Penjelasan golf:
sumber
C (gcc) , skor 11
Mengambil daftar int dan n sebagai argumen. Mengembalikan n sebagai nilai kebenaran, 0 sebagai salah.
Cobalah online!
sumber
Javascript ES6, ukuran 8:
Javascript ES6, ukuran 7 (apakah ini valid?):
Uji:
atau dengan lambda disimpan ke variabel bernama
a
:sumber
Clojure, Ukuran 9
Cobalah online!
sumber