ตัวตรวจสอบ Palindromic palindrome [ปิด]


37

เขียนโปรแกรมเพื่อทดสอบว่าสตริงเป็น palindromic โดยมีเงื่อนไขเพิ่มเติมว่าโปรแกรมนั้นเป็น palindromic เอง


1
หากภาษามีความคิดเห็นที่ไม่สิ้นสุดนี่เป็นเรื่องเล็กน้อยดังนั้นฉันเดาว่าควรจะไม่อนุญาต
Joey

1
@ โจอี้ฉันมีความสุขที่ไม่สนับสนุนการใช้ความคิดเห็นดังกล่าว แต่ไม่อนุญาตให้พวกเขาหลังจากโพสต์คำถามที่รุนแรงกับผู้ที่ได้ตอบไปแล้ว @ คำตอบของ Ventero (เพียงคนเดียวที่ไม่ได้ใช้พวกเขา) เป็นวิธีล่วงหน้าในการนับคะแนนดังนั้นทุกคนจึงเห็นด้วย
marcog

1
เพื่อกำจัดปัญหาดังกล่าวก่อนหน้านี้ (สิ่งนี้เกิดขึ้นในงานที่คล้ายกันใน SO) คุณสามารถใช้ sandbox หรือ Puzzle lab ;-)
Joey

1
วิธีการเกี่ยวกับการกำหนดว่าโปรแกรมควรเป็นควินด์ควินตัวเองยิ้มร้าย ;-)
Quixotic

4
ฉันรู้ว่านี่เป็นคำถามเก่า แต่ฉันคิดว่ามันต้องมีเกณฑ์การชนะโดยพลการเช่นการประกวดความนิยมหรือการเขียนโค้ดกอล์ฟ คำถามไม่ได้ระบุ
mbomb007

คำตอบ:


34

ทับทิม

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

พิมพ์ 1 ถ้าอินพุตเป็นพาลินโดรม 0 ถ้าไม่ใช่ อินพุตโดยไม่มีการหยุดพัก

ไม่ใช้ความคิดเห็นใด ๆ แต่ใช้ 2 เทคนิค:

  • การลัดวงจร: 0เป็น True-ish ใน Ruby (เท่านั้นnilและfalseประเมินเป็นเท็จ) ดังนั้นจึง1&&z==esrever.z* stupไม่ได้รับการประเมินและไม่สามารถยกข้อยกเว้นรันไทม์ได้
  • กระบวนการ / การคูณเครื่องหมาย ( *): เพื่อหลีกเลี่ยงข้อผิดพลาดในไวยากรณ์z=esrever.z stupเราบังคับตัวแยกวิเคราะห์ที่จะแยกนี้เป็นโดยการเพิ่มz=esrever.z()*stup *ในอีกด้านหนึ่ง*จะแยกเป็นตัวดำเนินการ splat ซึ่งในการเรียกฟังก์ชั่นแยกอาร์เรย์ในชุดของพารามิเตอร์ หากมีเพียงองค์ประกอบหนึ่งแทนของอาร์เรย์นั้นโดยทั่วไปจะไม่ทำอะไรเพื่อให้เทียบเท่ากับputs *fooputs foo

วิธีแก้ปัญหาที่ชัดเจนโดยใช้ความคิดเห็น (พิมพ์จริง / เท็จ):

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

คุณช่วยอธิบายวิธีการทำงานของมันได้ไหม ฉันไม่รู้ทับทิม
mellamokb

@mellamokb: ฉันเพิ่มคำอธิบายสั้น ๆ แจ้งให้เราทราบหากยังไม่ชัดเจน
Ventero

26

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

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

ฉันประหลาดใจที่ไม่มีใครพบกลอุบายดังกล่าว แต่มันควรจะทำงานในภาษาส่วนใหญ่


2
ฉลาดมากฉันชอบคำพูดที่หลบหนี
Wayne Werner

วิธีการแก้ปัญหาที่ดีคุณยังสามารถวางprintคำสั่งและหากคุณช่วยให้การป้อนข้อมูลเพื่อระบุล้อมรอบในราคาที่สามารถลงไปraw_input() input()ไม่มีการเพิ่ม '=' เมื่อเริ่มต้น
วิลเล็ม

ลบเอาต์พุตต่อท้ายหลังจาก True หรือ False:"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$"

ไม่มีเทคนิคการแสดงความคิดเห็นเพียงแค่ใช้โอเปอเรเตอร์การทดแทนอย่างไม่เหมาะสม (เฮ้ตัวแปร Perl เริ่มต้นด้วย $ เกินไปดังนั้นจะเป็นอย่างไร)



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#

ตัวอย่างการวิ่ง:

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

จะไม่ชนะเพราะความกะทัดรัด แต่ฉันประทับใจ
Wayne Werner

lol, clev-lvl 11/10
nymo

5

Golfscript

.-1%=#=%1-.
  • เพียงแค่มีเคล็ดลับความคิดเห็น
  • อินพุตโดยไม่มี \ n ที่ส่วนท้าย
  • ทำการจับคู่ถ่านโดยถ่าน (แม้สำหรับเครื่องหมายวรรคตอน)
  • ส่งคืน 1 สำหรับความสำเร็จ, 0 สำหรับความล้มเหลว

4

PHP

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

ข้อเท็จจริง:

  • $z string, อินพุตสตริงที่ต้องการตรวจสอบ
  • $tบูลีน, TRUE หากสตริงอินพุต$zเป็น palindrome, FALSE มิฉะนั้น
  • การใช้ความคิดเห็นเพื่อช่วยฉันสร้างรหัสสี
  • เอาท์พุท $t
  • แหล่งที่มาของตัวเองคือ palindrome

เหตุผลที่ว่าทำไมมันจะไม่เป็นไปได้ที่จะดำเนินการตรวจสอบการ palindrome palindromic ใน PHP จะเป็นเพราะ PHP $ตัวแปรที่มีชื่อเริ่มต้นด้วย คุณไม่สามารถจบชื่อตัวระบุด้วย$ใน PHP


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

ใช้เทคนิคแปลก ๆ บางอย่างเพื่อหลีกเลี่ยง$ปัญหาในทางเทคนิคไม่ใช่ palindrome ในขณะที่ฉันต้องแอบเข้าไป;ในตอนท้าย

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

นี่เป็นสิ่งที่ใช้งานได้ซึ่งใช้/* */ความเห็นของ PHP และความจริงที่ว่าคุณไม่ต้องการจุดจบสำหรับพวกเขา


2
ในท้ายรหัสแรกควรจะเป็นeval lave
Aycan Yaşıt

1

CoffeeScript

จริง ๆ แล้วฉันต่อสู้กับการสะกดแบบย้อนกลับของ 'แยก', 'ย้อนกลับ' และ 'เข้าร่วม': \

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


1

Python 3, 55 ไบต์

ใช้ความคิดเห็น แต่สั้นกว่า Python อื่นที่ใช้ความคิดเห็น

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

1

Fuzzy Octo Guacamole , 17 ไบต์

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

ไม่แน่ใจว่าการชนะเป็นอย่างไร แต่ฉันนับจำนวนไบต์สูงสุด

^ รับอินพุตและผลักไปยังสแต็กแรก

C คัดลอกสแต็กแรกไปที่สอง

z กลับด้านบนของสแต็กดังนั้น "เป็น" กลายเป็น "sa"

. เลื่อนสแต็กที่ใช้งานอยู่ดังนั้นสแต็กที่ใช้งานอยู่จะมีอินพุตและส่วนที่ไม่แอ็คทีฟจะมีอินพุตที่กลับด้าน

=ตรวจสอบความเท่าเทียมกันกลับมา0เพื่อความเท่าเทียมกัน

iตีความ ToS จึง0กลายเป็นและสิ่งอื่นที่สวยมากจะกลายเป็น1False

_ปรากฏและตั้งค่าตัวแปร temp ที่;พิมพ์แล้ว

@สิ้นสุดโปรแกรมด้วยตนเองจึงไม่ตีส่วนที่ตรงกันข้าม นี่เองที่ทำให้ palindrome


0

จาวาสคริ

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

ยากที่จะทำโดยไม่มีความคิดเห็น ...

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