เมทริกซ์ศูนย์กลางแบบสมมาตรเป็น ... และรหัสนั้นเป็นอย่างไร


37

defintion

เมทริกซ์สมมาตรศูนย์กลางเป็นตารางเมทริกซ์ที่มีความสมมาตรเกี่ยวกับศูนย์ แม่นยำกว่าเมทริกซ์ขนาดคือ centrosymmetric ถ้าสำหรับความสัมพันธ์ต่อไปนี้เป็นที่น่าพอใจ: n × n ฉัน,An×nฉัน,i,j([1,n]Z)

Ai,j=An+1i,n+1j

ตัวอย่างของเมทริกซ์ดังกล่าว

นี่คือภาพประกอบของสมมาตรของเมทริกซ์เช่นนี้ (ยืมมาจากบทความ Wikipedia ดังกล่าว):

Centrosymmetric 5 by 5 matrix แสดงในวิธีที่ดีจริงๆ

เมทริกซ์ศูนย์กลางแบบสมมาตรแบบยาวด้านข้าง ( ):4×4

(1234567887654321)

และหนึ่งด้านยาวคี่ ( ) หนึ่ง:3×3

(123565321)

งานและรายละเอียด

ด้วยเมทริกซ์จตุรัสที่มีขนาดอย่างน้อยส่งออกหนึ่งในสองค่าที่แตกต่างและสอดคล้องกันโดยตัดสินว่าเมทริกซ์นั้นมีความเป็นศูนย์กลางแบบสมมาตรหรือไม่ คุณสามารถสันนิษฐานได้ว่าเมทริกซ์จะประกอบด้วยจำนวนเต็มบวกทั้งหมด2

อย่างไรก็ตามรหัสของคุณจะต้องเป็นศูนย์กลางแบบสมมาตร นั่นคือมันจะต้องเป็นโปรแกรม / ฟังก์ชั่น (หรือเทียบเท่า) ซึ่งประกอบด้วยบรรทัดซึ่งแต่ละอันมีไบต์ในการเข้ารหัสภาษาของคุณและต้องเป็นไปตามคำนิยามที่ระบุข้างต้น แต่มีไบต์แทนจำนวนเต็มบวก คะแนนของการส่งของคุณจะเป็นค่าของโดยที่ต่ำกว่านั้นจะดีกว่าn n nnn nn

คุณสามารถนำเข้าและส่งออกผ่านวิธีการมาตรฐานและในรูปแบบที่เหมาะสมใด ๆ ในขณะที่ทราบว่าช่องโหว่เหล่านี้เป็นสิ่งต้องห้ามโดยค่าเริ่มต้น คุณ (อาจเลือก) เลือกที่จะใช้ขนาด, , เป็นอินพุตด้วย (เว้นแต่คุณจะป้อนเป็นรายการ 1D ซึ่งในกรณีนี้คุณอาจใช้เพียงเป็นอินพุตเพิ่มเติม)n 2nn2

กรณีทดสอบ

Truthy:

[[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
อืมนี่ยังดูยากสำหรับภาษาที่ไม่ใช่นักเล่นกอล์ฟเพราะมันแบ่งวงเล็บและวงเล็บโดยไม่มีความคิดเห็น วิธีการที่ไร้เดียงสาจะจบแต่ละบรรทัดด้วยอักขระความคิดเห็น (เช่น Python #) เพื่อให้ครึ่งล่างของโค้ดทั้งหมดเป็นความคิดเห็น
JungHwan Min

@JungHwanMin ในกรณีนี้ Python #ไม่ทำงานเพราะความเห็นที่นำหน้า#เป็นแบบอินไลน์เท่านั้น P
Mr. Xcoder

1
สำเนาที่เป็นไปได้ของฉันคือ palindrome คุณเป็น
Pavel

6
ฉันเดาว่าฉันจะขอแตกต่างกันเนื่องจากข้อ จำกัด ของแหล่งที่มาเปลี่ยนแปลงสิ่งต่าง ๆ มากมายและเกณฑ์การชนะต่างกัน ในความคิดของฉันความแตกต่างเหล่านี้เพียงพอ นอกจากนี้ยังมีเทคนิคอื่น ๆ (ในหลาย ๆ ภาษาที่สั้นกว่า - เช่น Mathematica) ที่สามารถใช้แทนการตรวจสอบแบบเรียบ + palindrome
Mr. Xcoder

1
@WW โดยย่อเพื่อให้การท้าทายเป็นเรื่องง่ายและหลีกเลี่ยงกรณีขอบที่ไม่พึงประสงค์ นอกจากนี้การทำให้สี่เหลี่ยมเป็นเรื่องง่ายสำหรับฉัน
Mr. Xcoder

คำตอบ:


21

JavaScript (ES6) ขนาด12 11 9

ทุกเวอร์ชันส่งคืนค่าเท็จสำหรับ centrosymmetric หรือtrueสำหรับ non-centrosymmetric


อาร์เรย์ 1 มิติ + ความยาวขนาด 9 (89 ไบต์)

รับอินพุตในรูปแบบ currying (length)(array)โดยที่อาร์เรย์มี 1 มิติ

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

ลองออนไลน์!


ความกว้างของเมทริกซ์ + ขนาด 11 (131 ไบต์)

(width)(matrix)จะเข้าในไวยากรณ์ currying

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

ลองออนไลน์!

payload

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

ภาชนะ

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

เมทริกซ์เท่านั้นขนาด 12 (155 ไบต์)

นี่คือคำตอบดั้งเดิมของฉันซึ่งคำนวณความกว้างของเมทริกซ์ด้วยตัวเอง

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

ลองออนไลน์!

อย่างไร?

เราต้องการโทเค็นที่สำคัญบางอย่างที่ไม่สามารถแยกได้:

  • some
  • length
  • )=>

การป้อนบรรทัดอาจแทรกได้เกือบทุกที่อื่น

โค้ดเพย์โหลดที่ยังไม่ได้อ่านจะอ่านเป็น:

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

และถูกห่อภายในโครงสร้างต่อไปนี้:

/**/CODE////*/

ซึ่งเมื่อย้อนกลับจะกลายเป็นความคิดเห็นบล็อกที่ถูกต้อง:

/*////EDOC/**/


15

Befunge-93ขนาด 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:&   

ลองออนไลน์!

อินพุต: nตามด้วยองค์ประกอบของอาร์เรย์ทั้งหมดคั่นด้วยช่องว่าง หมายเหตุ: คุณอาจต้องใช้ล่ามที่แตกต่างกันหากคุณมีอินพุตที่มากพอ

ฉันแน่ใจว่ามีวิธีที่ดีกว่าในการทำสิ่งนี้ฉันแค่อยากลองสิ่งนี้ใน Befunge ส่วนรหัสที่แท้จริงคือครึ่งบน

อย่างไร?

รหัสจะแบ่งออกเป็นสองส่วนหลักที่เริ่มต้นและการตรวจสอบ

การเริ่มต้น:

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

ส่วนนี้ของรหัสเขียนเมทริกซ์การป้อนข้อมูลด้านล่างขวาของรหัสเป็นอักขระ ASCII ทั้งส่วนนี้และส่วนถัดไปใช้ทั้งสามเซลล์ที่ด้านบนซ้ายของรหัสเป็นข้อมูล n, i, jพวกเขาจะถูกเก็บเป็น

ยืนยัน:

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

นี้ส่วนการตรวจสอบทุกดัชนี [1 จัดทำดัชนี] กับสภาพn-J} แต่เรามีปัญหาเรายังมีชดเชยโดย8ในการแก้ไขปัญหานั้นจะใช้สูตรต่อไปนี้:A i , j = A n + 1 - i , n + 1 - j j 8i,jAi,j=An+1i,n+1jj8

i=(n+1)i

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

อีกส่วนหนึ่งของรหัสคือขยะที่ยังไม่ได้อ่านเพื่อทำให้เป็นศูนย์แบบสมมาตร


15

Haskell ,n=8

ไม่มีความคิดเห็น!

รับอินพุตเป็นรายการ 1-D

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

ลองออนไลน์!

n=10

รับอินพุตเป็นเมทริกซ์ 2 มิติ

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

ลองออนไลน์!

ขอบคุณpotato44สำหรับความช่วยเหลือในการแชท และลินน์เพื่อเล่นกอล์ฟนอกแถว

คำอธิบาย

แนวคิดทั่วไปที่นี่เป็นแนวคิดที่เรียบง่ายเราconcatเป็นรายการและเปรียบเทียบกับสิ่งที่ตรงกันข้าม อย่างไรก็ตามเนื่องจากเราต้องการที่จะเป็นศูนย์กลางแบบสมมาตรเราจะต้องเหยียบอย่างระมัดระวัง ก่อนอื่นเราเขียนโค้ดตามปกติ:

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

ตอนนี้เพื่อให้เส้นย้อนกลับของเราเป็น Haskell ที่ถูกต้องเราต้องด้านซ้ายมือของสมการของเราเพื่อให้ดูเหมือนว่านิยามฟังก์ชันtacnoc.)esrever>*<)==((ไม่ได้

ขั้นตอนแรกในการแก้ไขปัญหานี้คือการกำจัดวงเล็บ

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

อย่างไรก็ตามเรามีปัญหาใหม่ในขณะนี้ ทั้งคู่.และ==เมื่อกลับด้านเหมือนกันดังนั้นเส้นที่กลับด้านของเราจะพยายามกำหนดตัวดำเนินการอีกครั้ง ( <*>กลับด้านคือ>*<ดังนั้น .สามารถถูกแทนที่ด้วย<$>เนื่องจากฟังก์ชั่นเป็น functors และเราสามารถแทนที่==ด้วย/=ซึ่งลบล้างผลลัพธ์ของเรา แต่ยังอยู่ในรายละเอียด ตอนนี้เรามี

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

เพื่อที่จะตัดลงนามแฝงความยาวสายเราของเราและconcatreverse

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

ตอนนี้เราเพิ่งทำสิ่งนี้เสร็จโดยการทำทุกอย่างที่เป็นสมมาตร

เวอร์ชัน 1-D ที่สั้นกว่านั้นทำงานในลักษณะเดียวกันยกเว้นเนื่องจากเราไม่จำเป็นต้องconcatบันทึกสองบรรทัดด้วยการลบออก


วิธีนี้สำหรับ n = 10
ลินน์

@ ลินน์ขอบคุณ! ในหัวของฉันกลับยังเป็น<$> <$>
ข้าวสาลีตัวช่วยสร้าง

9

Python 2ขนาด 10 (109 ไบต์)

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

ลองออนไลน์!

ก่อนหน้าPython 2ขนาด 14 (209 ไบต์)

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

ลองออนไลน์!


1
ไม่แน่ใจว่ามันจะเพียงพอสำหรับการจัดเรียงใหม่ แต่ FYI -i-1และ-j-1อาจเป็น~iและ~j
นาย Xcoder

@นาย. Xcoder: ฉันเล่นซอกับเรื่องนี้เล็กน้อย แต่มันก็ไม่ได้เปลี่ยนผลลัพธ์
Chas Brown

ทำงานใน python3.6 เช่นกัน แต่อาจไม่เหมาะสมที่สุด
SIGSTACKFAULT

8

Pyth ขนาด 6 (41 ไบต์)

q_M_QQ
q.q   


   q.q
QQ_M_q

ลองที่นี่

คำอธิบาย

บรรทัดแรกกลับด้านอินพุตและแต่ละแถวและตรวจสอบว่าเราเหลือสำเนาของอินพุตหรือไม่ ในบรรทัดที่สองออกจากโปรแกรมเพื่อให้ทุกอย่างหลังจากนั้นเช่นเดียวกับก่อนที่มันจะเป็น no-op
.qq


8

APL (Dyalog Unicode)คะแนน7 6 5 4

โปรแกรมเต็มรูปแบบ พรอมต์สำหรับการแสดงออกเมทริกซ์จาก stdin พิมพ์ 1 หรือ 0 แล้วโยนข้อผิดพลาดที่สอดคล้องกัน ไม่มีความคิดเห็น!

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

ลองออนไลน์!

 ความพร้อมในการแสดงออกและการประเมิน
, Ravel (แบน) ก็
r← เก็บผลในr(สำหรับR avelled)

⌽r มิเรอร์r
r≡ โดยปริยายพิมพ์ว่าrเหมือนกันหรือไม่

 ความลึกของr(ให้ 1)
r⌽ ใช้rในการหมุน
 (ซึ่งจะทำให้ a RANK ERRORและออกจากเสมอเพราะเมทริกซ์ไม่ได้รับอนุญาตเป็นอาร์กิวเมนต์ที่เหลือ)


7

Perl 6 , size 9 8 7

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

ลองออนไลน์!

reverseเป็นคอขวดที่นี่ ฉันได้เปลี่ยนไปในทางเทคนิคอีกต่อไป แต่มากขึ้น [*-1 X-^*]splittable โอเคฉันเปลี่ยนเป็น[R,]หลังจากเห็นคำตอบของแบรดกิลเบิร์ตสำหรับคำถามอื่น

{.flat eq [R,] .flat}รหัสบี้เป็น

แก้ไข: ประณามฉันรู้ว่าฉันไม่จำเป็นต้องทำให้รายการแรกแบน แต่ความพยายามในการทำให้สั้นลงเป็นขนาด 6 ล้มเหลวด้วยไบต์เดียวมากเกินไปที่จะพอดี ...

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

:(

แม้ว่าเราจะใช้มันเป็นอาเรย์หนึ่งมิติ แต่มันก็ง่ายที่จะใส่ในขนาด 6

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

ลองออนไลน์!


6

ภาษา Wolfram (Mathematica) (REPL เท่านั้น), ขนาด 8 (71 ไบต์)

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

ส่งคืนTrueสำหรับอินพุต centrosymmetric และFalseอื่น ๆ

บน Mathematica REPL บรรทัดที่มีข้อผิดพลาดทางไวยากรณ์จะถูกละเว้น (โดยมีแถบสีแดงหนาปรากฏขึ้นที่ด้านข้างของหน้าจอ) ที่นี่เฉพาะสามบรรทัดแรกเท่านั้นที่f=#[[c=-1;;1;;-1,c]]==#&ถูกเรียกใช้งาน

fรหัสนี้รวบรวมฟังก์ชั่นในชื่อ

น่าเศร้าที่ตัวเครื่องPalindromeQยาวเกินไป



5

Japtizeขนาด9 4 (11 ไบต์)

UªSê


êSªU

ลองออนไลน์!

ใช้อินพุตแบบมิติเดียวตรวจสอบว่าเป็นโทนสีหรือไม่ หากคุณต้องการคุณสามารถเติมสองบรรทัดที่ว่างเปล่าสำหรับงานศิลปะ ascii
เวอร์ชันสองมิติเก่าหมุนอินพุตสองครั้งและตรวจสอบว่าเท่ากับเดิมหรือไม่:

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

ลองออนไลน์!


1
ดี! ฉันคิดว่าฉันมี 6 และฉันพยายามที่จะเอาชนะ 4 ความร่วมมือในการส่งเกินไป แต่พวกเขาทั้งสองเล็กน้อยมากขึ้นกว่านี้
Shaggy

@Shaggy ฉันจัดการเพื่อแก้ปัญหาเดียวกันลงไปหกหลังจากให้มันดูสดสี่จะน่าประทับใจมาก
น.ค.

ระบุว่าอินพุตสามารถ (ตอนนี้) เป็นอาร์เรย์ 1 มิติซึ่งสามารถทำได้ด้วยคะแนน 2
Shaggy

@Shaggy ฉันไม่แน่ใจว่าฉันเห็นวิธีแหล่งที่มาจะต้องเป็น NxN
Nit


4

แกลบขนาด 3

Ṡ=↔
=↔=
↔=Ṡ

ลองออนไลน์! ป้อนข้อมูลเป็น 1D-List แต่ละบรรทัดจะกำหนดฟังก์ชั่น แต่จะมีเพียงหนึ่งบรรทัดเท่านั้นที่เรียกว่าบรรทัดแรก

Ṡ=↔เป็นการทดสอบ palindrome ซึ่งตรวจสอบว่าอินพุตเท่ากับ ( =) reverse ( ) หรือไม่


แกลบขนาด 4

Ṡ=↔Σ
Σ↔=Ṡ
Ṡ=↔Σ
Σ↔=Ṡ

ลองออนไลน์! สำหรับการป้อนข้อมูลเป็นเมทริกซ์ 2D เราเชื่อม ( Σ) รายการของรายการก่อนที่จะตรวจสอบว่ามันเป็น Palindrome


3

MATLคะแนน 4

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

อินพุตมีรูปแบบ[1 2; 2 1]โดยใช้;เป็นตัวคั่นแถว

เอาต์พุตผ่าน STDERR ( อนุญาตโดยค่าเริ่มต้น):

  • สำหรับอินพุตแบบ centrosymmetric จะเกิดข้อผิดพลาดที่สอดคล้องกัน ด้วยเวอร์ชัน Linux และ Octave ปัจจุบันใน TIO เอาต์พุต STDERR ต่อไปนี้จะถูกสร้างขึ้น (โดยไม่สนใจบรรทัดสุดท้ายที่ขึ้นต้นด้วย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...
    

    ข้อผิดพลาดอาจแตกต่างกันไปขึ้นอยู่กับรุ่น Linux และ Octave แต่จะสอดคล้องกันกับอินพุต

  • สำหรับอินพุตที่ไม่เป็นศูนย์กลางแบบสมมาตรจะไม่มีข้อผิดพลาดเกิดขึ้นและเอาต์พุต STDERR บน TIO คือ

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

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด:

  • centrosymmetric: 1 , 2 , 3 , 4 , 5 , 6
  • Non-centrosymmetric: 1 , 2 , 3 , 4 , 5 , 6

ตรวจสอบว่าโปรแกรมเป็นศูนย์แบบสมมาตร

คำอธิบาย

%เป็นสัญลักษณ์ความคิดเห็นซึ่งทำให้ส่วนที่เหลือของบรรทัด o ถูกละเว้น บรรทัดใหม่จะถูกละเว้นเช่นกัน ดังนั้นรหัสจึงเป็นเพียง

t,!P]=?P!,t

ซึ่งทำสิ่งต่อไปนี้:

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 ขนาด11 , 10 , 9 , 8

รับอินพุตเป็นรายการ 2D! (มอบเครดิตให้แก่Ørjan Johansen)

r= --r}-
 reverse
(==)<*> 
 r.map{-
-{pam.r 
 >*<)==(
esrever 
-}r-- =r

Bugs: สองควรจะเป็น<*> >*<ในส่วน 2D นั้นมีชิ้นส่วนที่ขาดหายไป-และส่วนที่กลับด้านไม่มีช่องว่างในตำแหน่งที่ถูกต้อง
Ørjan Johansen


2

Python 2ขนาด 8

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

ลองออนไลน์!

n2

รายการจะถูกตรวจสอบอย่างง่าย ๆ ว่าเป็นแบบสีเดียว ถ้าเป็นเช่นนั้นโซ่การเปรียบเทียบa[::-1]!=a<_ล้มเหลวใน!=ขั้นตอนและวงจรสั้น มิฉะนั้นตัวแปรที่ไม่รู้จัก_จะได้รับการประเมินให้หยุดทำงานโปรแกรม


2

Rขนาด 9

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

ลองออนไลน์!

สามบรรทัดสุดท้ายเป็นโปรแกรมจริงที่ใช้อาร์เรย์ 1D เป็นอินพุตและตรวจสอบว่ามันเท่ากับย้อนกลับ ค่าความจริง: FALSE, ค่าเท็จ: TRUE

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

R + pryr ขนาด 9

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



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

ลองออนไลน์!


2

C # (.NET Core)คะแนน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

ลองออนไลน์!

รับอินพุตเป็นอาร์เรย์ 1D และ n 2ตามความยาว ส่งคืนfalseสำหรับ centrosymmetric และtruenon-centrosymmetric รุ่นนี้ใช้System.Linqแต่ฉันไม่รู้ว่าจะใส่ลงในการส่งรหัสได้อย่างไรเนื่องจากข้อกำหนดเฉพาะของความท้าทาย รหัสที่ไม่ได้ควบคุม:

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

ต่อไปนี้คือการส่งก่อนหน้าของฉันที่ไม่ได้ใช้ LINQ:

C # (.NET Core)คะแนน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

ลองออนไลน์!

รหัสที่ไม่ได้ควบคุม:

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

หากคุณเปลี่ยนintเป็นvar(เช่นเดียวกันtniกับrav) การส่งครั้งที่สองจะทำงานใน JavaScript เช่นกัน
Zacharý

2

ทับทิมคะแนน9 8

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

ลองออนไลน์!

แลมบ์ดารับเมทริกซ์แบนเป็นอินพุต ผลตอบแทนจริงสำหรับ centrosymmetric, เท็จเป็นอย่างอื่น

-1 ขอบคุณ Mr.XCoder

แตก:

->z{
  z == z.reverse
}

2

สะอาดขนาด 9

ขอบคุณØrjan Johansen !

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

ลองออนไลน์!

สะอาดขนาด 10

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

ลองออนไลน์!


1
ไม่ใช่เพราะขึ้นบรรทัดใหม่ทำงานกับเยื้อง 9 บรรทัด
Ørjan Johansen

@ ØrjanJohansenไม่อยากจะเชื่อว่าฉันลืมไปเลยว่าคุณสามารถเยื้องพวกเขาได้ ขอบคุณ!
Οurous

mคุณกำลังต้อนรับและฉันแก้ไขสายกลางหลังจากที่ผมโพสต์มันก็จะต้องมีการ
Ørjan Johansen

@ ØrjanJohansenฉันได้อัปเดตคำตอบเพื่อแสดงว่า มันดูสง่างามเช่นนั้นเช่นกัน
Julurous

2

05AB1Eขนาด 3 (11 ไบต์ )

ÂQq

qQÂ

ป้อนข้อมูลเป็นรายการเดียว
ลองออนไลน์

ฉันเดาว่าอันนี้จะไม่นับ .. ; p

ÂQ
qâ

ป้อนข้อมูลเป็นรายการเดียว
ลองออนไลน์

คำอธิบาย:

         # 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

ทางเลือกขนาด 3 (11 ไบต์ ):

R€R
QqQ
R€R

เมทริกซ์เป็นอินพุต
ลองออนไลน์

RQ 
 q  
 QR

รายการเดียวเป็นอินพุต
ลองออนไลน์



1

> <> ขนาด 6

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

ลองออนไลน์!

(ปรากฎว่าเป็นความเจ็บปวดที่ส่งผ่านค่าหลายค่าไปยัง -v in tio)

อินพุตถูกใช้เป็นอาร์เรย์หนึ่งมิติเป็นสถานะสแต็กเริ่มต้นด้วย -v ออกโดยไม่มีเอาต์พุตหากเมทริกซ์เป็น centrosymmetric ออกโดยมีข้อผิดพลาด (พิมพ์ "Something กลิ่นคาว ... ") ถ้าไม่

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

ฉันไม่พอใจกับรูปแบบผลลัพธ์ทั้งหมดดังนั้นนี่คือขนาด 7 ซึ่งเอาท์พุท 1 สำหรับจริงและ 0 สำหรับเท็จ

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

ลองออนไลน์!


งานที่ดี! > <> สามารถเป็นภาษาที่สนุกที่จะทำงานด้วยเว้นแต่ว่ามันจะเป็นโปรแกรมที่ซับซ้อน
mbomb007

1
ถ้าคุณแลกเปลี่ยนค่าความจริงและความเท็จคุณสามารถทำให้มันเป็น 4 ด้วย{-?;
โจคิง

1

Stax , n = 3

$cr
=q=
rc$

เรียกใช้และแก้ไขข้อบกพร่อง

คำอธิบาย:

$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 เป็นวิธีที่ดีที่สุดเพราะฉันต้องการคำสั่งอย่างน้อยสามคำสั่ง: คัดลอกย้อนกลับและเปรียบเทียบ

Stax , n = 4

Mrxr
M=qX
Xq=M
rxrM

เรียกใช้และแก้ไขข้อบกพร่อง

คำอธิบาย:

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, ขนาด 13 (181 ไบต์)

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

ลองออนไลน์

แรงบันดาลใจจาก@Charlie 's C # คำตอบ

คำอธิบาย Golfed:

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)คะแนน 11

รับรายการของ int และ n เป็นอาร์กิวเมนต์ ส่งคืนค่า n ตามค่าความจริง 0 เป็นค่าเท็จ

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

ลองออนไลน์!


0

Javascript ES6, ขนาด 8:

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

Javascript ES6, ขนาด 7 (ใช้ได้หรือไม่):

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

ทดสอบ:

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

หรือด้วยแลมบ์ดาบันทึกไว้ในตัวแปรชื่อ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)))


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.