Matris centrosymmetric… ve kod da öyle mi?


37

Definition

Bir centrosymmetric matris bir kare matris kendi merkezi etrafında simetriktir. Daha titizlikle, n × n büyüklüğünde bir matrisi , eğer varsa, i .An×n aşağıdaki ilişki karşılanır: A i ,i,j([1,n]Z)

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

Bu tür matrislere örnekler

İşte buna benzer bir matrisin simetrisinin bir örneği (yukarıda belirtilen Wikipedia makalesinden ödünç alınmıştır):

Centrosymmetric 5 x 5 matrix gerçekten güzel bir şekilde resmedildi

Çift taraflı uzunluk ( ) santrosimetrik bir matris:4×4

(1234567887654321)

Ve bir garip yan uzunluk ( ) bir:3×3

(123565321)

Görev ve Özellikler

En az büyüklüğünde bir kare matris verildiğinde , matrisin santrosimetrik olup olmadığına karar veren iki ayrı ve tutarlı değerden birini çıktılar. Matrisin tamamen pozitif tamsayılardan oluşacağını varsayabilirsiniz.2

Ancak, kodunuz aynı zamanda centrosymmetric olmalıdır. Kendisine, aşağıdakilerden oluşan bir program / işlev (ya da eşdeğerlerine) olmalıdır ihtiva eden, her biri hatları, n bayt yerine pozitif tamsayılar bayt ile,; dil kodlamada, yukarıda verilen tanıma uygun olmalıdır. Gönderiminizin puanı n'nin değeri olacak , daha düşük bir n daha iyi olacak.nn nn

Bu boşlukların varsayılan olarak yasaklandığını not ederken, herhangi bir standart yöntemle ve makul bir formatta girdi alabilir ve çıktı alabilirsiniz . (İsteğe bağlı olarak) boyutu ( n) giriş olarak da seçmeyi seçebilirsiniz (1D listesi olarak giriş yapmazsanız, bu durumda sadece ek giriş olarak n 2 alabilirsin ).nn2

Test durumları

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
Hmm, bu hala golf oynamayan diller için oldukça zor görünüyor çünkü parantez ve parantezleri yorum yapmadan kırıyor. Saf bir yaklaşım, her satırı bir yorum karakteriyle (Python's gibi #) sonlandırmak olacaktır , böylece kodun alt yarısı bir yorum olacaktır.
JungHwan Min

Bu özel durumda Python'un @JungHwanMin #öncesinde yapılan yorumlar nedeniyle olmaz işi #P: inline sadece
Sayın Xcoder


6
Kaynaktaki kısıtlamalar oldukça değiştiği ve kazanma kriteri farklı olduğu için sanırım farklılaşacağım. Bence bu farklılıklar yeterli. Ayrıca, düzleştirici + palindrom kontrolü yerine kullanılabilecek diğer tekniklerdir (birçok dilde daha kısa olanlar - örneğin Mathematica).
Bay Xcoder,

1
@WW Kısacası, mücadeleyi basit tutmak ve herhangi bir istenmeyen kenar durumundan kaçınmak için. Ayrıca, onu kare tutmak benim için daha sezgisel.
Bay Xcoder

Yanıtlar:


21

JavaScript (ES6), boyut 12 11 9

Tüm sürümler iade sahte centrosymmetric ya yönelik gerçek dışı centrosymmetric için.


1 boyutlu dizi + uzunluk, boyut 9 (89 bayt)

Dizinin 1 boyutlu (length)(array)olduğu currying sözdiziminde girdi alır .

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

Çevrimiçi deneyin!


Matris + genişlik, boyut 11 (131 bayt)

Körleme sözdiziminde girdi alır (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/**/

Çevrimiçi deneyin!

Taşıma kapasitesi

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

konteyner

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

Yalnızca matris, boyut 12 (155 bayt)

Bu, matrisin genişliğini kendi başına hesaplayan özgün çözümüm.

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

Çevrimiçi deneyin!

Nasıl?

Bölünemeyen birkaç kritik belirteçlere ihtiyacımız var:

  • some
  • length
  • )=>

Satır yayınları hemen hemen her yere yerleştirilebilir.

Kontrol edilmeyen taşıma yükü kodu şu şekildedir:

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

ve aşağıdaki yapının içine sarılır:

/**/CODE////*/

Bu, bir kez tersine çevrildiğinde geçerli bir blok yorum haline gelir:

/*////EDOC/**/


15

Befunge-93 , beden 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:&   

Çevrimiçi deneyin!

Girdi:, n ardından dizinin elemanları, tümü boşluklarla ayrılmış. NOT: Yeterince büyük bir girişiniz varsa, farklı bir yorumlayıcı kullanmanız gerekebilir.

Eminim bunu yapmanın daha iyi bir yolu var, bunu sadece Befunge'de denemek istedim. Gerçek kod kısmı üst yarısıdır.

Nasıl?

Kod, başlangıç ve doğrulama olmak üzere iki ana bölüme ayrılmıştır .

Başlatma:

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

Kodun bu bölümü giriş matrisini kodun hemen altına ASCII karakterleri olarak yazar. Hem bu hem de bir sonraki bölüm, kodun sol üstündeki üç hücreyi veri olarak kullanır. Olarak saklanırlar n, i, j.

Doğrulama:

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

i,jAi,j=An+1i,n+1jj8

i=(n+1)i

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

Diğer kod bölümleri centrosimetrik hale getirmek için okunmamış çöplerdir.


15

n=8

Yorum yok!

Girişleri 1 boyutlu liste olarak alır

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

Çevrimiçi deneyin!

n=10

2-B matris olarak girdi alır

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

Çevrimiçi deneyin!

Patates44'e bütün yardımları için teşekkürler . Ve Lynn , üst üste golf oynadığı için.

açıklama

Buradaki genel fikir basit bir fikirdir, biz concatlisteleriz ve onunkiyle karşılaştırırız. Bununla birlikte, centrosimetrik olmak istediğimizden dikkatli bir şekilde basmak zorundayız. Önce kodu normalde yazdığımız gibi yazıyoruz:

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

Şimdi ters satırlarımızın da geçerli olması için Haskell'i, bir fonksiyon tanımı gibi görünmemek için denklemlerimizin sol tarafına ihtiyacımız var tacnoc.)esrever>*<)==((.

Bunu düzeltmenin ilk adımı parantezlerin atılmasıdır.

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

Ancak şimdi bazı yeni sorunlarımız var. Her ikisi de .ve ==ne zaman ters çevrildiğinde aynıdır, bu nedenle ters çevrilmiş hatlarımız operatörleri yeniden tanımlamaya çalışır ( <*>ters çevrilmiş olması, >*<biz bu konuda iyi olduğumuz için). fonksiyonlar functor olduğundan, bunlar .değiştirilebilir <$>. Ve yerini alabilir ==ile /=bizim çıkış olumsuzlar, ama bu gözlük içinde hala olan. Şimdi biz var

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

Hat uzunluğumuzu kısaltmak için takma ad concatve reverse.

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

Şimdi bunu sadece her şeyi merkezcil ve kare yaparak bitiriyoruz.

Daha kısa olan 1B sürümü, aynı şekilde, concatiki satırı kaldırarak tasarruf etmemize gerek olmadığından, aynı şekilde çalışır .


Peki bu n = 10 için?
Lynn,

@Lynn Teşekkürler! Kafamın tam tersi de <$>oldu <$>.
Buğday Sihirbazı

9

Python 2 , boyut 10 (109 bayt)

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

Çevrimiçi deneyin!

Önceki Python 2 , boyut 14 (209 bayt)

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

Çevrimiçi deneyin!


1
Yeniden düzenleme için yeterli olup olmadığından emin değilim, ancak FYI -i-1ve -j-1sadece olabilir ~ive~j
Bay Xcoder

@Bay. Xcoder: Bununla biraz uğraştım ama sonucu değiştirmedi.
Chas Brown,

Python3.6 da çalışır, ancak en uygun olmayabilir.
SIGSTACKFAULT

8

Pyth, boyut 6 (41 bayt)

q_M_QQ
q.q   


   q.q
QQ_M_q

Burada dene

açıklama

İlk satır girişi ve her satırı tersine çevirir ve girişin bir kopyasını bırakıp bırakmadığımızı kontrol eder. İkinci satırında bundan sonra her şey, hem de böylece, programa çıkar ondan önce, no-operasyon.
.qq


8

APL (Dyalog Unicode) , skor 7 6 5 4

Tam program Stdin'den matris ifadesi ister. 1 veya 0 yazdırır ve ardından tutarlı bir hata atar. Yorum yok!

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

Çevrimiçi deneyin!

 ifade istemek ve değerlendirmek için onu
, ravel (düzleştirmek)
r← sonucu içinde saklar r( r avelled için)

⌽r aynen aynısını r
r≡ yazıp yazdırr

r(1 verir)  derinliği onu döndürmek için
r⌽ kullanın  (bu bir matrisin bıraktığı argümana izin verilmediğinden daima a ve quit'e neden olur )r
RANK ERROR


7

Perl 6 , beden 9 8 7

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

Çevrimiçi deneyin!

reverseBurada tıkanıklık var. Teknik olarak daha uzun ama daha ayrılabilir olarak değiştirdim [*-1 X-^*]. Tamam, Brad Gilbert'in başka bir soruya cevabını[R,] gördükten sonra değiştirdim .

Düzleştirilmiş kod {.flat eq [R,] .flat}.

Düzenleme: Kahretsin, ben bile yok farkettim gerek ilk listeyi düzleştirmek, ancak bir boyuta 6'ya kısaltmadan girişimleri sadece başarısız olan bir sığdırmak için bayt çok fazla ...

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

:(

Tek boyutlu bir dizi olarak kabul etsek de, 6 bedene sığdırmak kolaydır.

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

Çevrimiçi deneyin!


6

Wolfram Dili (Mathematica) (yalnızca REPL), boyut 8 (71 bayt)

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

İade TrueCentrosymmetric girişi için , Falseaksi halde.

Mathematica REPL'de, sözdizimi hataları olan satırlar göz ardı edilir (ekranın yanında koyu kırmızı bir çubuk belirir). Burada sadece ilk üç satır f=#[[c=-1;;1;;-1,c]]==#&yürütülür.

Bu kod isimdeki işlevi yakalar. f .

Ne yazık ki, yerleşik PalindromeQçok uzun.



5

Japt , büyüklük 9 4 (11 bayt)

UªSê


êSªU

Çevrimiçi deneyin!

Bir boyutlu girdi alır, bir palindrom olup olmadığını kontrol eder. İsterseniz, bazı sanat için iki boş çizgiyi doldurabilirsiniz.
Eski iki boyutlu sürüm, girişi iki kez döndürür ve orijinaline eşit olup olmadığını kontrol eder:

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

Çevrimiçi deneyin!


1
Güzel! Ben düşünüyorum ben 6 var ve ben de boyun işbirliği yapmayan bir 4 yenmek için çalışıyorum, ancak her ikisi de çok daha önemsiz bundan daha konum.
Shaggy

@Shaggy Taze bir görünüm verdikten sonra altıya kadar aynı çözümü elde etmeyi başardım, dördü çok etkileyici olurdu.
Nit

Girişi (şimdi) 1 boyutlu bir diziyi olabileceği göz önüne alındığında, bu 2. puanla yapılabilir
Shaggy

@Shaggy Nasıl olduğunu görüp görmediğimden emin değilim, kaynağın NxN olması gerekir.
Nit


4

Kabuğu , boy 3

Ṡ=↔
=↔=
↔=Ṡ

Çevrimiçi deneyin! 1B Listesi olarak giriş yapın. Her satır bir işlevi tanımlar, ancak yalnızca ilk satırdaki satırın adı verilir.

Ṡ=↔girişin ( =) 'in tersine ( ) eşit olup olmadığını kontrol eden bir palindrom testidir .


Kabuğu , beden 4

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

Çevrimiçi deneyin! 2D-matris olarak giriş Σiçin, bir palindrom olduğunu kontrol etmeden önce listelerin listesini ( ) birleştiririz .


3

MATL , skor 4

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

Girdi biçimi vardır [1 2; 2 1]kullanarak,; satır ayırıcı olarak .

Çıkış, STDERR üzerinden yapılır ( varsayılan olarak izin verilir ):

  • Centrosymmetric girişi için tutarlı bir hata hatası üretilir. TIO'daki mevcut Linux ve Octave sürümleriyle aşağıdaki STDERR çıktılar üretilir (ile başlayan son satırları dikkate almaz 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...
    

    Hata, Linux ve Octave sürümlerine bağlı olarak farklı olabilir, ancak girdiler arasında tutarlı olacaktır.

  • Centrosimetrik olmayan girdi için hata üretilmez ve TIO'daki STDERR çıkışı

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

Çevrimiçi deneyin! Veya tüm test durumlarını doğrulayın:

  • Centrosimetric: 1 , 2 , 3 , 4 , 5 , 6 .
  • Centrosimetrik olmayan: 1 , 2 , 3 , 4 , 5 , 6 .

Programın centrosymmetric olduğunu kontrol edin .

açıklama

%satırın geri kalanının yok sayılmasına neden olan yorum sembolüdür. Newlines da göz ardı edilir. Yani kod sadece

t,!P]=?P!,t

aşağıdakileri yapar:

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, beden 11 , 10 , 9 , 8

Girişi 2B liste olarak alır! (Ørjan Johansen'a teşekkür ederiz)

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

Hatalar: İkincisi <*>olmalı >*<. 2B'de bir eksik var -ve tersine çevrilmiş kısımda doğru yerlerde boşluklar yok.
Ørjan Johansen


2

Python 2 , boyut 8

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

Çevrimiçi deneyin!

n2 çıkış kodu (simetrik girişler için 0, 1, aksi) ile) ve çıkışlar.

Liste sadece bir palindrom olarak kontrol edildi. Öyleyse, karşılaştırma zinciri adımda a[::-1]!=a<_başarısız olur !=ve kısa devreler; Aksi takdirde, bilinmeyen değişken _değerlendirilerek program kilitlenir.


2

R , beden 9

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

Çevrimiçi deneyin!

Son üç satır giriş olarak 1B dizisi alan ve tersine eşit olup olmadığını kontrol eden gerçek programdır. Gerçek değeri: FALSE, Falsy değeri: TRUE

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

R + pryr, boyut 9

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



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

Çevrimiçi deneyin!


2

C # (.NET Core) , puan 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

Çevrimiçi deneyin!

1D dizisi olarak giriş alır ve n, 2 uzunluğu; falsecentrosymmetric ve centrosymmetric trueolmayan için döndürür . Bu sürüm kullanıyor System.Linqancak zorluğun özel gereklilikleri nedeniyle kod gönderimine nasıl sığacağımı bilmiyorum. Kontrolsüz kod:

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

LINQ kullanmadığım önceki gönderim:

C # (.NET Core) , puan 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

Çevrimiçi deneyin!

Kontrolsüz kod:

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

Eğer değiştirirseniz intiçin var(böylece de tnihiç rav), ikinci sunulması da JavaScript çalışır.
Zacharý

2

Ruby , skor 9 8

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

Çevrimiçi deneyin!

Giriş olarak düzleştirilmiş bir matris alan bir lambda. Centrosymmetric için true, aksi takdirde false değerini döndürür.

-1, Mr.XCoder'a teşekkürler,

ambalajsız:

->z{
  z == z.reverse
}

2

Temiz , beden 9

Ørjan Johansen'a teşekkürler !

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

Çevrimiçi deneyin!

Temiz , beden 10

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

Çevrimiçi deneyin!


1
Newline yüzünden değil, girintili çalışıyor. 9 satır
Ørjan Johansen

@ ØrjanJohansen Onları girintilemediğini unuttuğuma inanamıyorum. Teşekkürler!
Julurous,

Bir şey değil, ve gönderdikten sonra orta çizgiyi düzenledim, olması gerekiyor m.
Ørjan Johansen

@ ØrjanJohansen Bunu yansıtacak şekilde cevabı güncelledim. Bu şekilde de gerçekten zarif görünüyor.
Euro

2

05AB1E , boyut 3 (11 bayt )

ÂQq

qQÂ

Tek bir liste olarak giriş yapın.
Çevrimiçi deneyin.

Sanırım bu sayılmaz ..; p

ÂQ
qâ

Tek bir liste olarak giriş yapın.
Çevrimiçi deneyin.

Açıklama:

         # 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

Bazı boyut 3 (11 bayt ) alternatifler:

R€R
QqQ
R€R

Giriş olarak matris.
Çevrimiçi deneyin.

RQ 
 q  
 QR

Giriş olarak tek liste.
Çevrimiçi deneyin.



1

> <>, Boyut 6

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

Çevrimiçi deneyin!

(Bu tio'da -v'ye çoklu değer ileten bir acı olduğu ortaya çıktı)

Giriş, -v ile ilk yığın hali olarak tek boyutlu bir dizi olarak alınır. Matris centrosymmetric ise çıktı vermeden çıkar, hatayla çıkar ("Balık kokar ..." basar).

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

Bu çıktı biçiminden tamamen memnun değildim, bu yüzden işte doğru için 1, yanlış için 0 çıktı veren 7 boyutunda.

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

Çevrimiçi deneyin!


İyi iş! > <> birlikte çalışmak eğlenceli bir dil olabilir, eğer karmaşık bir program değilse, o zaman acı verici.
mbomb007

1
truthy ve falsey değerlerini değiştirirseniz, 4 ile elde edebilirsiniz{-?;
Jo King,

1

Stax , n = 3

$cr
=q=
rc$

Koş ve hata ayıkla

Açıklama:

$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 mümkün olan en iyisidir çünkü en az üç komuta ihtiyacım var: Kopyala, geri çevir ve karşılaştır

Stax , n = 4

Mrxr
M=qX
Xq=M
rxrM

Koş ve hata ayıkla

Açıklama:

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, boyut 13 (181 bayt)

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

Çevrimiçi deneyin.

@Charlie'nin C # cevabı esinlenerek .

Golf açıklaması:

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

İnt ve n'nin argüman olarak listesini alır. N'yi truthy değeri, 0 ise falsy olarak verir.

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

Çevrimiçi deneyin!


0

Javascript ES6, boyut 8:

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

Javascript ES6, boyut 7 (geçerli mi?):

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

Ölçek:

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

veya lambda ile adlandırılmış değişkene kaydedilmiş 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)))


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.