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]]

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


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/**/


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.


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.


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!


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.


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 )


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!


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.



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!


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


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.


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)

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

Bug: Kedua <*>seharusnya >*<. Dalam 2D, ada bagian yang hilang -dan terbalik tidak memiliki ruang di tempat yang tepat.
Ø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.


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!


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;
}

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
}

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!


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.



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!


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


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

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!


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


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.