Pemeriksa palindrom palindrom [ditutup]

37

Tulis sebuah program untuk menguji apakah suatu string adalah palindromik, dengan syarat tambahan bahwa program tersebut menjadi palindromik itu sendiri.

marcog
sumber
1
Jika bahasa memiliki komentar sampai akhir, ini sepele jadi saya kira itu harus dianulir.
Joey
1
@ Joey Saya dengan senang hati tidak menganjurkan penggunaan komentar seperti itu, tetapi menolaknya setelah mengajukan pertanyaan itu keras pada mereka yang sudah menjawab. @ Ventero menjawab (satu-satunya yang tidak menggunakannya) jauh di depan dalam penghitungan suara, jadi semua orang tampaknya setuju.
marcog
1
Nah, untuk menghilangkan masalah seperti itu sebelumnya (ini juga terjadi pada tugas yang serupa pada SO) Anda dapat menggunakan kotak pasir atau lab Puzzle ;-)
Joey
1
Bagaimana kalau memaksakan bahwa program itu harus menjadi senyum jahat palindromik sendiri ;-)
Quixotic
4
Saya tahu ini adalah pertanyaan lama, tetapi saya pikir ini membutuhkan kriteria kemenangan yang sewenang-wenang, seperti kontes popularitas atau golf kode. Pertanyaan tidak menentukan apa pun.
mbomb007

Jawaban:

34

Rubi

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

Mencetak 1 jika inputnya adalah palindrome, 0 jika tidak. Masukan tanpa linebreak.

Tidak menggunakan komentar apa pun, melainkan menggunakan 2 trik:

  • Hubungan arus pendek: 0adalah true-ish di Ruby (hanya nildan falsebernilai false), jadi 1&&z==esrever.z* stuptidak dievaluasi dan dengan demikian tidak dapat meningkatkan pengecualian runtime
  • Operator percikan / multiplikasi ( *): Untuk menghindari kesalahan sintaksis dalam z=esrever.z stup, kami memaksa pengurai untuk mem-parsing ini z=esrever.z()*stupdengan menambahkan a *. Di sisi lain, *diurai sebagai operator percikan, yang dalam panggilan fungsi membagi array dalam serangkaian parameter. Jika hanya ada satu elemen, bukan array, pada dasarnya tidak melakukan apa-apa, jadi puts *foosetara dengan puts foo.

Solusi jelas menggunakan komentar (cetak benar / salah):

puts gets.reverse==$_#_$==esrever.steg stup
Ventero
sumber
Bisakah Anda menjelaskan cara kerjanya? Saya tidak tahu ruby.
mellamokb
@ellamokb: Saya menambahkan penjelasan singkat. Beri tahu saya jika masih belum jelas.
Ventero
26

Python tanpa komentar

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

Saya terkejut bahwa belum ada yang menemukan trik itu, itu seharusnya bekerja di sebagian besar bahasa!

Jules Olléon
sumber
2
Sangat Pintar, saya suka kutipan yang keluar.
Wayne Werner
Solusi yang bagus, Anda bahkan bisa menjatuhkan printpernyataan dan jika Anda membiarkan input yang ditentukan terlampir dalam kutipan raw_input()dapat dipersingkat input(). Kehilangan '=' ekstra di awal.
Willem
menghapus output tambahan setelah Benar atau Salah:"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$"

tidak ada trik komentar, hanya secara cerdik menyalahgunakan operator substitusi (hei, variabel perl mulai dengan $ juga, jadi apa?)

Anonim
sumber
7

Python 2.7

s=raw_input();print'YNEOS'[s!=s[::-1]::2]#]2::]1-::[s=!s['SOENY'tnirp;)(tupni_war=s
fR0DDY
sumber
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#

Contoh menjalankan:

$ gcc -std=c99 c.c && ./a.out 
blahalb
yes
Alexandru
sumber
tidak akan menang karena singkatnya, tapi saya terkesan
Wayne Werner
lol, pandai-lvl 11/10.
nymo
5

Naskah Golf

.-1%=#=%1-.
  • hanya dengan trik komentar
  • masukan tanpa \ n di akhir
  • melakukan char yang cocok dengan char (bahkan untuk tanda baca)
  • mengembalikan 1 untuk sukses, 0 untuk kegagalan
KAMU
sumber
4

PHP

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

Fakta:

  • $z string, string input untuk diperiksa
  • $tboolean, TRUE jika string input $zadalah palindrome, FALSE sebaliknya
  • Menggunakan komentar untuk membantu saya membuat palindrome kode.
  • Keluaran $t
  • Sumbernya sendiri adalah palindrome

Alasan mengapa tidak mungkin untuk mengimplementasikan palindrome palindromic checker di PHP itu karena variabel PHP diberi nama dimulai dengan a $. Anda tidak dapat mengakhiri nama pengenal dengan $di PHP.

mauris
sumber
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?>

Menggunakan beberapa trik aneh untuk menghindari $masalah ini, secara teknis bukanlah sebuah palindrom karena saya harus menyelinap ;masuk pada akhirnya.

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

Ini adalah yang berfungsi yang menggunakan /* */komentar PHP dan fakta bahwa Anda tidak memerlukannya.

Kevin Brown
sumber
2
Di akhir kode pertama, evalseharusnya lave.
Aycan Yaşıt
1

CoffeeScript

Saya benar-benar berjuang dengan ejaan terbalik 'split', 'reverse' dan 'join': \

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

Asyik

print args[0]==args[0].reverse()?1:0//0:1?)(esrever.]0[sgra==]0[sgra tnirp
Penjual
sumber
Anda telah menggunakan komentar di sini!
Semut
1

Python 3, 55 byte

Menggunakan komentar, tetapi lebih pendek dari yang lain Python yang menggunakan komentar.

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

Fuzzy Octo Guacamole , 17 byte

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

Tidak begitu yakin bagaimana kemenangan didefinisikan, tetapi saya menempatkan jumlah byte di bagian atas.

^ mendapatkan input dan mendorongnya ke tumpukan pertama.

C menyalin tumpukan pertama ke tumpukan kedua.

z membalikkan bagian atas tumpukan, jadi "as" menjadi "sa".

. menggeser tumpukan aktif, sehingga tumpukan aktif memiliki input, dan yang tidak aktif memiliki input terbalik.

=memeriksa kesetaraan, mengembalikan 0kesetaraan.

imembalik ToS, jadi 0menjadi 1, dan apa pun menjadi cukup banyak False.

_muncul dan atur variabel temp yang ;kemudian dicetak.

@mengakhiri program secara manual, sehingga tidak mengenai bagian yang terbalik. Ini membuat palindrome.

Rɪᴋᴇʀ
sumber
0

Javascript

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

Sulit melakukannya tanpa komentar ...

Cepat
sumber