Apakah matriksnya centrosymmetric… dan begitu juga kodenya?

37

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 ,SEBUAHn×nA i ,saya,j([1,n]Z)

SEBUAHsaya,j=SEBUAHn+1-saya,n+1-j

Contoh dari matriks seperti itu

Berikut ini adalah ilustrasi simetri dari matriks seperti ini (dipinjam dari artikel Wikipedia yang disebutkan sebelumnya):

Matriks Centrosymmetric 5 by 5 diilustrasikan dengan cara yang sangat bagus

Matriks centrosymmetric genap-sisi-panjang ( ):4×4

(1234567887654321)

Dan panjang sisi-aneh ( ) satu:3×3

(123565321)

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.2

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.nn nn

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).nn2

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]]
Tuan Xcoder
sumber
1
Hmm, ini masih terlihat cukup sulit untuk bahasa non-golf karena memecah tanda kurung dan tanda kurung tanpa komentar. Pendekatan naif adalah mengakhiri setiap baris dengan karakter komentar (seperti Python #), sehingga bagian bawah kode semua akan menjadi komentar.
JungHwan Min
@JungHwanMin Dalam kasus khusus ini Python #tidak akan bekerja karena komentar yang didahului #hanya sebaris: P
Mr. Xcoder
1
Kemungkinan duplikat aku seorang palindrom. Apakah kamu?
Pavel
6
Saya kira saya hanya akan memohon berbeda, karena pembatasan pada sumber mengubah banyak hal dan kriteria yang menang berbeda. Menurut pendapat saya, perbedaan-perbedaan ini sudah cukup. Selain itu, ada beberapa teknik lain (dalam banyak bahasa yang lebih pendek - misalnya Mathematica) yang dapat digunakan sebagai ganti pemeriksaan + rata palindrome.
Tn. Xcoder
1
@WW Singkatnya, untuk menjaga tantangan tetap sederhana dan menghindari segala bentuk tepi yang tidak diinginkan. Selain itu, menjaganya agar tetap persegi lebih intuitif bagi saya.
Tn. Xcoder

Jawaban:

21

JavaScript (ES6), ukuran 12 11 9

Semua 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.

w=>a=> //
a.some //
(v=>v- //
a[--w])//
/////////
//)]w--[a
// -v>=v(
// emos.a
// >=a>=w

Cobalah online!


Matriks + lebar, ukuran 11 (131 byte)

Mengambil input dalam sintaks currying (width)(matrix).

/**/w=>a=>a
.some(r=>r.
some(v=>v-a
[y][w-++x],
x=!y--),y=w
);'*/'/*';)
w=y,)--y!=x
,]x++-w[]y[
a-v>=v(emos
.r>=r(emos.
a>=a>=w/**/

Cobalah online!

Muatan

w => a => a.some(r => r.some(v => v - a[y][w - ++x], x = !y--), y = w)

Wadah

/**/CODE;'*/'/*';EDOC/**/

Matriks saja, ukuran 12 (155 byte)

Ini adalah solusi asli saya, yang menghitung lebar matriks dengan sendirinya.

/**/a=>a[w=a
.length-1,s=
'some']((r,y
)=>r[s]((v,x
)=>v-a[w-y][
w-x]))////*/
/*////))]x-w
[]y-w[a-v>=)
x,v((]s[r>=)
y,r((]'emos'
=s,1-htgnel.
a=w[a>=a/**/

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:

a => a[w = a.length - 1, s = 'some']((r, y) => r[s]((v, x) => v - a[w - y][w - x]))

dan dibungkus di dalam struktur berikut:

/**/CODE////*/

yang, setelah dibalik, menjadi komentar blok yang valid:

/*////EDOC/**/
Arnauld
sumber
18

Jelly , skor 2

⁼Ṛ
Ṛ⁼

Cobalah online!

Mengambil input sebagai matriks persegi yang diratakan (vektor ukuran ).n2

Erik the Outgolfer
sumber
15

Befunge-93 , ukuran 24

   &:00p110p920p::*:v   
vp01:+1g01-1pg02g01&_v#<
>00g`#v_>:           1$^
v2p011<  v:g00p029p01< @
>0g1+20p^>*:#v_1# .#<@ .
v+1g00gg02g01<$ >1+10pv0
>:10g-\88++20g -g-     |
vg02p011_v#`g00g01-1  <1
>1+20p   >:   ^ ^      <
                        
                        
                        
                        
                        
                        
<      ^ ^   :>   p02+1>
1<  1-10g00g`#v_110p20gv
|     -g- g02++88\-g01:>
0vp01+1> $<10g20gg00g1+v
. @<#. #1_v#:*>^p02+1g0>
@ <10p920p00g:v  <110p2v
^$1           :>_v#`g00>
<#v_&10g20gp1-10g1+:10pv
   v:*::p029p011p00:&   

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:

   &:00p110p920p::*:v   
vp01:+1g01-1pg02g01&_v#<
>00g`#v_>:           1$^

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:

                     v 
                     1
v2p011<  v:g00p029p01< @
>0g1+20p^>*:#v_1# .#<@ .
v+1g00gg02g01<$ >1+10pv0
>:10g-\88++20g -g-     |
vg02p011_v#`g00g01-1  <1
>1+20p   >:   ^ ^      <

saya,jSEBUAHsaya,j=SEBUAHn+1-saya,n+1-jj8

saya=(n+1)-saya

j=n+1-(j-8)+8=(n+1)+(8+8)-j

Bagian lain dari kode adalah sampah yang belum dibaca untuk membuatnya centrosymmetric.

Zacharý
sumber
15

n=8

Tidak ada komentar!

Mengambil input sebagai daftar 1-D

s a b=  
    a/=b
f =s<*> 
 reverse
esrever 
 >*<s= f
b=/a     
  =b a s

Cobalah online!

n=10

Mengambil input sebagai matriks 2-D

r =reverse
s a b=a/=b
f   =s<*>r
c  =concat
g =  f<$>c
c>$<f  = g
tacnoc=  c
r>*<s=   f
b=/a=b a s
esrever= r

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 concatdaftar dan membandingkannya dengan itu terbalik. Namun karena kami ingin menjadi centrosymmetric, kami harus melangkah dengan hati-hati. Pertama kita menulis kode seperti biasa:

g=((==)<*>reverse).concat

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.

s a b=a==b
f=s<*>reverse
g=f.concat

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 punya

s a b=a/=b
f=s<*>reverse
g=f<$>concat

Untuk memangkas panjang garis kami, kami alias concatdan reverse.

r=reverse
s a b=a/=b
f=s<*>r
c=concat
g=f<$>c

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 concatkita dapat menyimpan dua baris dengan menghapusnya.

Wisaya Gandum
sumber
Bagaimana dengan ini untuk n = 10?
Lynn
@ Lynn, terima kasih! Di kepalaku kebalikan dari <$>juga <$>.
Wheat Wizard
9

Python 2 , ukuran 10 (109 byte)

def f(a):#
 return(a#
==[r[::-1#
]for r in#
a[::-1]])#
#)]]1-::[a
#ni r rof]
#1-::[r[==
#a(nruter 
#:)a(f fed

Cobalah online!

Sebelumnya Python 2 , ukuran 14 (209 bytes)

lambda a:all(#
a[i][j]==a[-i#
-1][-j-1]for #
i in range(  #
len(a))for j #
in range(len(#
a)))         #
#         )))a
#(nel(egnar ni
# j rof))a(nel
#  (egnar ni i
# rof]1-j-[]1-
#i-[a==]j[]i[a
#(lla:a adbmal

Cobalah online!

Chas Brown
sumber
1
Tidak yakin apakah itu akan cukup untuk penataan ulang tetapi FYI -i-1dan -j-1bisa saja ~idan~j
Tn. Xcoder
@Bapak. Xcoder: Saya sedikit mengotak-atik itu, tetapi tidak mengubah hasilnya.
Chas Brown
Bekerja di python3.6 juga, tetapi mungkin tidak optimal.
SIGSTACKFAULT
8

Pyth, ukuran 6 (41 byte)

q_M_QQ
q.q   


   q.q
QQ_M_q

Coba di sini

Penjelasan

Baris pertama membalikkan input dan setiap baris, dan memeriksa apakah kita memiliki salinan input.
Baris .qkedua keluar dari program, jadi semuanya setelah itu, dan juga qsebelumnya, adalah no-op.

Mnemonik
sumber
8

APL (Dyalog Unicode) , skor 7 6 5 4

Program lengkap. Anjuran untuk ekspresi matriks dari stdin. Mencetak 1 atau 0 dan kemudian melempar kesalahan yang konsisten. Tidak ada komentar!

r←,⎕
r≡⌽r
r⌽≡r
⎕,←r

Cobalah online!

 meminta ekspresi dan mengevaluasinya
, ravel (meratakan) itu
r← menyimpan hasilnya di r(untuk r avelled)

⌽r mirror r
r≡ secara implisit mencetak apakah ridentik dengan itu

 kedalaman r(memberi 1)
r⌽ gunakan runtuk memutar itu
 (ini akan selalu menyebabkan a RANK ERRORdan berhenti karena matriks tidak diizinkan sebagai argumen kiri ke )

Adm
sumber
7

Perl 6 , ukuran 9 8 7

{.flat#
#}talf.
#  ],R[
eq # qe
[R,]  #
.flat}#
#talf.{

Cobalah online!

reverseadalah hambatan di sini. Saya telah mengubahnya menjadi lebih lama secara teknis, tetapi jauh lebih mudah dipecah [*-1 X-^*]. Oke, saya sudah mengubahnya [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 ...

{@_#}_@
eq#<<|
[R,] #
# ],R[
|<<#qe
@_}#_@{

:(

Meskipun jika kita menganggapnya sebagai array satu dimensi, mudah untuk memasangnya dalam ukuran 6.

{$_# }
eq #_$
[R,] #
# ],R[
$_# qe
} #_${

Cobalah online!

Jo King
sumber
6

Bahasa Wolfram (Mathematica) (hanya REPL), ukuran 8 (71 byte)

f=#[[c=-
1;;1;;-1
,c]]==#&
(*      
      *(
&#==]]c,
1-;;1;;1
-=c[[#=f

Pengembalian Trueuntuk input centrosymmetric, dan Falsesebaliknya.

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 PalindromeQterlalu lama.

JungHwan Min
sumber
6

Pyt , ukuran 1

Cobalah online!

Cek apakah input (dalam bentuk baris bersambung) adalah palindrom.

Lynn
sumber
n> =2
6
n2
Aduh, lupakan itu.
Zacharý
5

Japt , ukuran 9 4 (11 byte)

UªSê


êSªU

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:

W=U  I
Wz2;II
Vc)eUc
cUe)cV
II;2zW
I  U=W

Cobalah online!

Nit
sumber
1
Bagus! Saya pikir saya punya angka 6 dan saya mencoba untuk mengalahkan 4 yang tidak kooperatif juga, tetapi mereka berdua jauh lebih sepele daripada ini.
Shaggy
@ Shaggy Saya berhasil mendapatkan solusi yang sama hingga enam setelah memberikannya tampilan baru, empat akan sangat mengesankan.
Nit
Mengingat bahwa input dapat (sekarang) menjadi array 1 dimensi, ini dapat dilakukan dengan skor 2.
Shaggy
@ Shaggy Saya tidak yakin jika saya melihat caranya, sumbernya harus NxN.
Nit
seperti itu
Shaggy
4

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.

Laikoni
sumber
3

MATL , skor 4

t,!P
]=%?
?%=]
P!,t

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: ...):

    octave: X11 DISPLAY environment variable not set
    octave: disabling GUI features
    Python 2.7.15 (default, May 16 2018, 17:50:09) 
    [GCC 8.1.1 20180502 (Red Hat 8.1.1-1)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> >>> /usr/include/c++/8/bits/basic_string.h:1048: std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::reference std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator[](std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::reference = char&; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]: Assertion '__pos <= size()' failed.
    panic: Aborted -- stopping myself...
    

    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

    octave: X11 DISPLAY environment variable not set
    octave: disabling GUI features
    Python 2.7.15 (default, May 16 2018, 17:50:09) 
    [GCC 8.1.1 20180502 (Red Hat 8.1.1-1)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> >>> 
    

Cobalah online! Atau verifikasi semua kasus uji:

  • Sentrosimetri: 1 , 2 , 3 , 4 , 5 , 6 .
  • Non-sentrosimetri: 1 , 2 , 3 , 4 , 5 , 6 .

Periksa apakah programnya adalah centrosymmetric.

Penjelasan

%adalah simbol komentar, yang menyebabkan sisa baris o diabaikan. Baris baru juga diabaikan. Jadi kodenya adil

t,!P]=?P!,t

yang melakukan hal berikut:

t       % Input, implicit. Duplicate
,       % Do twice
  !     %   Transpose
  P     %   Flip vertically
]       % End
=       % Compare element-wise
?       % If all comparisons gave true
  P     %   Implicit input. Transpose. Actually, since there is no more input, an
        %   error is prand the program exits. The rest of the code is not executed, 
        %   and will be described in parentheses
  !     %   (Transpose)
  ,     %   (Do twice)
    t   %     (Duplicate)
        %   (End, implicit)
        % (End, implicit)
Luis Mendo
sumber
3

Haskell, ukuran 11 , 10 , 9 , 8

Mengambil input sebagai daftar 2D! (Kredit ke Ørjan Johansen)

r= --r}-
 reverse
(==)<*> 
 r.map{-
-{pam.r 
 >*<)==(
esrever 
-}r-- =r
Program man
sumber
Bug: Kedua <*>seharusnya >*<. Dalam 2D, ada bagian yang hilang -dan terbalik tidak memiliki ruang di tempat yang tepat.
Ørjan Johansen
Mendapat 2D ke 8
Ørjan Johansen
2

Python 2 , ukuran 8

i=input#
a=i()###
a[::-1##
]!=a<_##
##_<a=!]
##1-::[a
###)(i=a
#tupni=i

Cobalah online!

n2

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.

Lynn
sumber
2

R , ukuran 9

   #)x-))
#(nacs-<x
#(ver(yna
#       #
#       #
#       #
any(rev(#
x<-scan(#
))-x)#   

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.

any(rev(x<-scan())-x)

R + pryr, ukuran 9

pryr::f(#
any(rev(#
x)-x))#  



  #))x-)x
#(ver(yna
#(f::ryrp

Cobalah online!

JayCe
sumber
2

C # (.NET Core) , skor 13 11 10

l=>a=>a.//
Where((e//
,i)=>e!=//
a[l-i-1]//
).Any()///
///()ynA.)
//]1-i-l[a
//=!e>=)i,
//e((erehW
//.a>=a>=l

Cobalah online!

Mengambil input sebagai array 1D dan n 2 sebagai panjang; pengembalian falseuntuk centrosymmetric dan trueuntuk non-centrosymmetric. Versi ini menggunakan System.Linqtetapi saya tidak tahu bagaimana memasangnya dalam pengiriman kode karena persyaratan khusus dari tantangan. Kode terbuka:

l => a => a.Where((e,i) => e != a[l-i-1]).Any()

Berikut ini adalah kiriman saya sebelumnya yang tidak menggunakan LINQ:

C # (.NET Core) , skor 16 15 13

l=>a=>{/////*
var r=1<2;for
(int i=0;i<l;
)r&=a[i]==a[l
-i++-1];
return r;}
     /*/
   };r nruter
     ;]1-++i-
l[a==]i[a=&r)
;l<i;0=i tni(
rof;2<1=r rav
*/////{>=a>=l

Cobalah online!

Kode terbuka:

l => a =>
{
    var r = 1<2;
    for (int i = 0; i < l;)
        r &= a[i] == a[l-i++-1];
    return r;
}
Charlie
sumber
Jika Anda berubah int ke var(demikian juga tnike rav), pengiriman kedua juga berfungsi dalam JavaScript.
Zacharý
2

Ruby , skor 9 8

->z{z==#
z.######
reverse#
}#######
#######}
#esrever
######.z
#==z{z>-

Cobalah online!

Seorang lambda mengambil matriks yang diratakan sebagai input. Mengembalikan nilai true untuk centrosymmetric, false jika tidak.

-1 terima kasih kepada Mr.XCoder,

Dibongkar:

->z{
  z == z.reverse
}
benj2240
sumber
2

Bersih , ukuran 9

Terima kasih kepada Ørjan Johansen !

import //
 StdEnv//
r=reverse
?m=m==r//
    m    
//r==m=m?
esrever=r
//vnEdtS 
// tropmi

Cobalah online!

Bersih , ukuran 10

import/*//
*/StdEnv//
r =reverse
?m      //
 =m==r m//
//m r==m= 
//      m?
esrever= r
//vnEdtS/*
//*/tropmi

Cobalah online!

Suram
sumber
1
Ini bukan karena baris baru, ini bekerja dengan indentasi. 9 baris
Ørjan Johansen
@ ØrjanJohansen Tidak percaya saya lupa Anda bisa membuat indentasi. Terima kasih!
Οurous
Sama-sama, dan saya mengedit garis tengah setelah saya memposting, itu hanya perlu m.
Ørjan Johansen
@ ØrjanJohansen Saya telah memperbarui jawaban untuk mencerminkan itu. Terlihat sangat elegan juga.
Surous
2

05AB1E , ukuran 3 (11 byte )

ÂQq

qQÂ

Masukan sebagai daftar tunggal.
Cobalah online.

Saya kira yang ini tidak masuk hitungan ..; hlm

ÂQ
qâ

Masukan sebagai daftar tunggal.
Cobalah online.

Penjelasan:

         # Bifurcate this list (short for DR: Duplicate & Reverse copy)
 Q        # Check if the input-list and the reversed list are equal
  q       # Terminate the program
   qQâ    # No-ops

Beberapa ukuran 3 (11 byte ) alternatif:

R€R
QqQ
R€R

Matriks sebagai input.
Cobalah online.

RQ 
 q  
 QR

Daftar tunggal sebagai input.
Cobalah online.

Kevin Cruijssen
sumber
1

C (gcc) , 12 x 12

C(e,n,t,r)//
int*e;{for//
(r=t=0;e[t//
];r|=e[t]^//
e[~t+++n])//
;n=!!!!r;}//
//};r!!!!=n;
//)]n+++t~[e
//^]t[e=|r;]
//t[e;0=t=r(
//rof{;e*tni
//)r,t,n,e(C

Cobalah online!

Jonathan Frech
sumber
1

> <>, Ukuran 6

!/l2(\
s\?\ ?
/{=/ ;
: /={/
? \?\s
\(2l/!

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.

l2(    Checks if the length of the stack is less than 2
?;     Exits cleanly if so

{=     Checks if the first and last elements are equal
?\s    Causes an error ('s' is not a valid instruction) if not

Saya tidak sepenuhnya senang dengan format output ini, jadi inilah ukuran 7 yang menghasilkan 1 untuk true, dan 0 untuk false.

!/l2(\\
 ?   ?0
 =;n1/n
;{   {;
n/1n;= 
0?   ? 
\\(2l/!

Cobalah online!

Sasha
sumber
Pekerjaan yang baik! > <> bisa menjadi bahasa yang menyenangkan untuk dikerjakan, kecuali itu adalah program yang rumit, maka itu menyusahkan.
mbomb007
1
jika Anda menukar nilai truey dan falsey, Anda bisa turun ke 4 dengan{-?;
Jo King
1

Stax , n = 3

$cr
=q=
rc$

Jalankan dan debug itu

Penjelasan:

$cr =q= rc$ Full program, implicit input
$           Flatten
 cr         Copy and reverse
    =       Compare to original
     q      Print result
      =     Silently error because there is only one item on stack
        rc$ Not executed

3 adalah yang terbaik karena saya membutuhkan setidaknya tiga perintah: Salin, balikkan, dan bandingkan

Stax , n = 4

Mrxr
M=qX
Xq=M
rxrM

Jalankan dan debug itu

Penjelasan:

Mrxr M=qX Xq=M rxrM Full program, implicit input
Mr                  Transpose and reverse
  x                 Push input again
   r M              Reverse and transpose
      =             Compare
       qX Xq        Print result twice and save to X
            =       Silently error because there is only one item on stack
             M rxrM Not executed
wastl
sumber
1

Java 10, ukuran 13 (181 byte)

a->{var r///*
=1>0;for(int 
l=a.length,i=
0;i<l;)r&=a[i
]==a[l-++i]; 
return r;}   
     /*/     
   };r nruter
 ;]i++-l[a==]
i[a=&r);l<i;0
=i,htgnel.a=l
 tni(rof;0>1=
*///r rav{>-a

Cobalah online.

Terinspirasi oleh @Charlie C # .

Penjelasan golf:

a->{var r=1>0;for(int l=a.length,i=0;i<l;)r&=a[i]==a[l-++i];return r;}

a->{                    //  Method with byte-array parameter and boolean return-type
  var r=1>0;            //  Result-boolean, starting at true
  for(int l=a.length,   //  The length of the input-array
      i=0;i<l;)         //  Loop `i` in the range [0, length)
    r&=                 //   Bitwise-AND the result-boolean with:
       a[i]             //    Whether the current item
           ==a[l-++i];  //    equals the opposite item
  return r;}            //  Return the result
Kevin Cruijssen
sumber
1

C (gcc) , skor 11

Mengambil daftar int dan n sebagai argumen. Mengembalikan n sebagai nilai kebenaran, 0 sebagai salah.

/*//};n=l;k
--*==++l*=*
n);l>k;n*n+
l=k(rof{;l*
tni)n,l(f;k
*/*/////*/*
k;f(l,n)int
*l;{for(k=l
+n*n;k>l;)n
*=*l++==*--
k;l=n;}//*/

Cobalah online!

gastropner
sumber
0

Javascript ES6, ukuran 8:

/***/a=>
""+a==a.
reverse(
)/////*/
/*/////)
(esrever
.a==a+""
>=a/***/

Javascript ES6, ukuran 7 (apakah ini valid?):

a=>""+a
==a.//=
reverse
`     `
esrever
=//.a==
a+"">=a

Uji:

<script>
f=

a=>""+a
==a.//=
reverse
`     `
esrever
=//.a==
a+"">=a
</script>

<script>
console.log([
  [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],
].every(f))

console.log([
  [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],
].every(x=>!f(x)))
</script>

atau dengan lambda disimpan ke variabel bernama a:

a=

a=>""+a
==a.//=
reverse
`     `
esrever
=//.a==
a+"">=a

console.log([
  [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],
].every(a))

console.log([
  [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],
].every(x=>!a(x)))

Qwertiy
sumber
0

Clojure, Ukuran 9

#(= %(;;;
reverse;;
(map;;;;;
reverse;;
%)));)))%
;;esrever
;;;;;pam(
;;esrever
;;;(% =(#

Cobalah online!

Lispy Louie
sumber