Palindromik palindrom denetleyicisi [kapalı]


37

Bir dizginin palindromik olup olmadığını, programın kendisinin palindromik olması koşuluyla eklenmesi için bir program yazın.


1
Eğer dilin sonuna kadar olan yorumları varsa, bu önemsiz bir durumdur, bu yüzden onların izin vermemesi gerektiğini düşünüyorum.
Joey

1
@Joey Bu tür yorumların kullanılmasından memnuniyetle vazgeçerdim, ancak soruyu sorduktan sonra reddetmek, zaten cevaplayanlar için çok zor. @ Ventero'nun cevabı (onları kullanmayan tek kişi) oy sayımında bir adım önde, bu yüzden herkes aynı fikirde görünüyor.
marcog

1
Eh, daha önce bu tür sorunları ayıklamak için (bu aynı zamanda SO üzerinde benzer bir görevde de ortaya çıktı), kum havuzunu veya Bulmaca laboratuvarını kullanabilirsiniz ;-)
Joey

1
Programın bir palindromik
quine

4
Bunun eski bir soru olduğunu biliyorum, ancak popülerlik yarışması ya da kod golf gibi rastgele bir kazanan kritere ihtiyacı olduğunu düşünüyorum. Soru hiçbirini belirtmiyor.
mbomb007 13:15

Yanıtlar:


34

Yakut

z=gets;puts *z.reverse==z&&1||0||1&&z==esrever.z* stup;steg=z

Giriş bir palindrom ise 1, değilse 0 olur. Linebreak olmadan giriş yapın.

Herhangi bir yorum kullanmaz, bunun yerine 2 numara kullanır:

  • Kısa devre: 0Ruby'de true-ish (yalnızca nilve falseyanlış olarak değerlendir), dolayısıyla 1&&z==esrever.z* stupdeğerlendirilmez ve bu nedenle çalışma zamanı istisnası oluşturamaz
  • Splat / multiplication operator ( *): İçinde bir sözdizimi hatası z=esrever.z stupoluşmasını önlemek için , ayrıştırıcıyı z=esrever.z()*stupa ekleyerek ayrıştırmaya zorlarız *. Diğer taraftan, *işlev çağrısında bir dizi parametrede bir dizi bölen bir uyarıcı işleci olarak ayrıştırılır. Bir dizi yerine sadece bir eleman varsa, temel olarak hiçbir şey yapmaz, yani buna puts *fooeşdeğerdir puts foo.

Yorumları kullanarak açık bir çözüm (doğru / yanlış yazdırır):

puts gets.reverse==$_#_$==esrever.steg stup

Bunun nasıl çalıştığını açıklayabilir misiniz? Ruby'yi tanımıyorum.
mellamokb

@mellamokb: Kısa bir açıklama ekledim. Hala net değilse bana bildirin.
Ventero

26

Yorum yapmadan Python

"a\";w=]1-::[w trinp;)(tupni_war=w;";w=raw_input();print w[::-1]==w;"\a"

Henüz kimsenin bu numarayı bulmadığına şaşırdım, çoğu dilde çalışması gerekiyor!


2
Çok Zekice, kaçış teklifini beğendim.
Wayne Werner,

Güzel bir çözüm, printifadeyi bile bırakabilirsiniz ve girişin tırnak içine alınmış olmasına izin verirseniz raw_input()kısaltılabilir input(). Başlangıçta fazladan '=' eksik.
Willem

Doğru veya Yanlış'dan sonra arkadaki çıktı kaldırıldı:"a\"#;w==]1-::[w;)(tupni_war=w;";w=raw_input();w[::-1]==w;#"\a"
Willem,

13

Perl

perl -nle "$s=$_ eq+reverse;print$s;s$tnirp;esrever+qe _$=s$"

yorum yapma püf noktaları, oyuncu değişikliği operatörünü zekice kötüye kullanma (hey, perl değişkenleri $ ile başlar, peki ne?)


7

Python 2.7

s=raw_input();print'YNEOS'[s!=s[::-1]::2]#]2::]1-::[s=!s['SOENY'tnirp;)(tupni_war=s

6

C

#include <stdio.h>                   //
#include <string.h>                  //
int main() {                         //
  char str[1024];                    //
  fgets(str, sizeof(str), stdin);    //
  int i = 0, j = strlen(str) - 2;    //
  for (; i < j; i++, j--)            //
    if (str[i] != str[j]) {          //
      printf("no\n");                //
      return 0;                      //
    }                                //
  printf("yes\n");                   //
}                                    //
//                                    }
//                   ;)"n\sey"(ftnirp  
//                                }    
//                      ;0 nruter      
//                ;)"n\on"(ftnirp      
//          { )]j[rts =! ]i[rts( fi    
//            )--j ,++i ;j < i ;( rof  
//    ;2 - )rts(nelrts = j ,0 = i tni  
//    ;)nidts ,)rts(foezis ,rts(stegf  
//                    ;]4201[rts rahc  
//                         { )(niam tni
//                  >h.gnirts< edulcni#
//                   >h.oidts< edulcni#

Çalışan örnek:

$ gcc -std=c99 c.c && ./a.out 
blahalb
yes

kısalık için kazanmayacağım, ama etkilendim
Wayne Werner

lol, zekice lvl 11/10.
Nymo,

5

Golfscript

.-1%=#=%1-.
  • sadece yorum numarasıyla
  • sonunda \ n olmayan girdi
  • eşleştirme karakterini char ile gerçekleştir (noktalama işaretleri için bile)
  • başarı için 1, başarısızlık için 0 döndürür

4

PHP

echo strrev($z)==$z;#;z$==)z$(verrts ohce

Gerçekler:

  • $z dize, kontrol edilecek girdi dizisi
  • $tboolean, giriş dizgisi $zpalindrome ise TRUE, FALSE aksi takdirde
  • Kodları palindrom yapmama yardımcı olacak yorumları kullanmak.
  • çıktılar $t
  • Kaynağın kendisi bir palindromdur

PHP'de palindromic palindrome checker uygulamasının mümkün olmamasının nedeni PHP değişkenlerinin a ile başlanmasıdır $. $PHP ile bir tanımlayıcı ismini bitiremezsiniz.


2

PHP

<?php eval/*/*/(';{$i=fgets(STDIN,2e9);};{$a="strrev";}{var_dump("{$i}"=="{$a($i)}");}/*}{*\{;("{(tupni$)a$}"=="{putni$}")ohce}{;"verrts"==a$};{;(9e2,NIDTS)stegf=i$);');/*\*\eval php?>

$Sorunu önlemek için bazı tuhaf hileler kullanır ;, sonunda içeri gizlice girmek zorunda kaldığım için teknik olarak bir palindrome değildir .

 <?php $i = fgets(STDIN,2e9); echo $i == strrev($i);/*\;(i$)verrts == i$ ohce ;(9e2, NIDTS)stegf = $i php?>

Bu PHP'nin /* */yorumlarını kullanan ve onlar için sonun gerekmediği gerçeğini kullanan çalışan bir yazı .


2
Sonunda birinci kod evalolmalı lave.
Aycan Yaşıt

1

CoffeeScript

Aslında 'split', 'reverse' ve 'join' kelimelerinin ters yazılışları ile mücadele ettim: \

p=(s)->s.split('').reverse().join('')==s#s==)''(nioj.)(esrever.)''(tilps.s>-)s(=p


1

Python 3, 55 bayt

Bir yorum kullanır, ancak yorumları kullanan diğer Python'dan daha kısadır.

s=input();print(s==s[::-1])#)]1-::[s==s(tnirp;)(tupni=s

1

Bulanık Octo Guacamole , 17 bayt

^Cz.=i_;@;_i=.zC^

Kazanmanın nasıl tanımlandığından tam olarak emin değilim, ama bayt sayımını üste koydum.

^ girişi alır ve ilk yığına iter.

C ilk yığını ikinciye kopyalar.

z yığının üst kısmını ters çevirin, böylece "olduğu gibi" "sa" olur.

. aktif yığını kaydırır, böylece aktif yığının girişi vardır ve inaktif olanın ters girişi vardır.

=eşitliği kontrol eder, eşitliği geri döndürür 0.

iTO'yu ters çevirir, yani 0olur 1ve hemen hemen her şey olur False.

_açılır ve ;sonra yazdırılan geçici değişkeni ayarlar .

@programı manuel olarak sonlandırır, böylece tersine çevrilmiş parçayı vurmaz. Bu palindrom yapar.


0

JavaScript

function a(b){return b==b.split('').reverse().join('')}//})''(nioj.)(esrever.)''(tilps.b==b nruter{)b(a noitcnuf

Yorum yapmadan yapmak zor ...

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.