회문 회문 검사기 [닫힘]


37

프로그램이 palindromic이라는 조건을 추가하여 문자열이 palindromic인지 테스트 할 프로그램을 작성하십시오.


1
언어에 최후의 주석이 있다면 이것은 사소한 것이기 때문에 그 단어는 허용되지 않아야합니다.
Joey

1
@Joey 나는 그러한 의견을 사용하는 것을 기쁘게 생각하지만 질문에 답한 후 답변을 거부하는 것은 이미 답변 한 사람들에게는 가혹한 일입니다. @Ventero의 답변 (그들을 사용하지 않는 유일한 사람)은 투표 수에 앞서 있으므로 모든 사람들이 동의하는 것 같습니다.
marcog

1
글쎄, 이러한 문제를 조기에 제거하기 위해 (이것은 비슷한 작업에서도 발생했습니다) 샌드 박스 또는 퍼즐 랩을 사용할 수 있습니다 ;-)
Joey

1
어떻게 프로그램이 회문 quine 자체가되어야한다고 부과에 대한 사악한 미소 ;-)
돈키호테

4
나는 이것이 오래된 질문이라는 것을 알고 있지만 인기 콘테스트 또는 코드 골프와 같은 임의의 승리 기준이 필요하다고 생각합니다. 질문은 아무것도 지정하지 않습니다.
mbomb007

답변:


34

루비

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

입력이 회 문인 경우 1을, 그렇지 않은 경우 0을 인쇄합니다. 줄 바꿈없이 입력

주석을 사용하지 않고 두 가지 트릭을 사용합니다.

  • 단락은 : 0루비의 진정한 틱 (아니라 nil그리고 false그래서, false로 평가) 1&&z==esrever.z* stup런타임 예외를 발생시킬 수 없습니다, 따라서 평가되지 않았습니다
  • splat / multiplication operator ( *) :의 구문 오류를 피하기 위해 z=esrever.z stup파서를 강제로 구문 분석하도록 z=esrever.z()*stup합니다 *. 반면에는 *함수 호출에서 배열을 일련의 매개 변수로 분할하는 표시 연산자로 구문 분석됩니다. 배열 대신 요소가 하나만 있으면 기본적으로 아무것도 수행하지 않으므로 puts *foo에 해당합니다 puts foo.

주석을 사용한 명백한 해결책 (참 / 거짓으로 인쇄) :

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

이것이 어떻게 작동하는지 설명 할 수 있습니까? 나는 루비를 모른다.
mellamokb

@mellamokb : 간단한 설명을 추가했습니다. 여전히 명확하지 않은 경우 알려주십시오.
Ventero

26

주석없는 파이썬

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

아무도 그 트릭을 찾지 못했다는 사실에 놀랐습니다. 대부분의 언어로 작동합니다!


2
매우 영리한, 나는 탈출 인용문을 좋아합니다.
웨인 베르너

좋은 해결책, 당신은 print문을 삭제할 raw_input()수 있으며 따옴표로 묶은 지정된 입력을 허용하면 으로 단축 할 수 있습니다 input(). 시작시 추가 '='이 (가) 없습니다.
Willem

True 또는 False 후 후행 출력 제거 :"a\"#;w==]1-::[w;)(tupni_war=w;";w=raw_input();w[::-1]==w;#"\a"
Willem

13

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

대체 요령을 현명하게 학대하는 주석 트릭은 없습니다 (hey, perl 변수는 $로 시작하므로 무엇입니까?)


7

파이썬 2.7

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

6

#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, 영리한 11-11.
nymo

5

골프 스크립트

.-1%=#=%1-.
  • 코멘트 트릭만으로
  • 끝에 \ n없이 입력
  • 문자별로 일치하는 문자를 수행합니다 (마침표로도)
  • 성공하면 1, 실패하면 0을 반환

4

PHP

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

사리:

  • $z string, 확인할 입력 문자열
  • $t부울, 입력 문자열 $z이 회문이면 TRUE, 그렇지 않으면 FALSE
  • 주석을 사용하여 코드 회문을 만들 수 있습니다.
  • 출력 $t
  • 소스 자체는 회문

PHP에서 palindromic palindrome checker를 구현할 수없는 이유는 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?>

$문제 를 피하기 위해 몇 가지 이상한 트릭을 사용합니다 . 기술적 ;으로는 마지막에 몰래 들어가야했던 회문이 아닙니다 .

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

실제로 'split', 'reverse'및 'join'의 역 철자 문제로 어려움을 겪었습니다.

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

1

멋진, 근사한

print args[0]==args[0].reverse()?1:0//0:1?)(esrever.]0[sgra==]0[sgra tnirp

당신은 여기에 의견을 사용했습니다!
Ant 's

1

파이썬 3, 55 바이트

주석을 사용하지만 주석을 사용하는 다른 Python보다 짧습니다.

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

1

퍼지 옥토 과카 몰리 , 17 바이트

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

승리가 어떻게 정의되는지 확실하지 않지만 바이트 수를 맨 위에 올립니다.

^ 입력을 받아서 첫 번째 스택으로 푸시합니다.

C 첫 번째 스택을 두 번째 스택에 복사합니다.

z 스택의 상단을 반대로하여 "as"는 "sa"가됩니다.

. 활성 스택을 이동하여 활성 스택에 입력이 있고 비활성 스택에 입력이 반대가됩니다.

=평등을 확인하고 평등을 반환 0합니다.

i패킷의 ToS 반전, 그래서 0되고 1, 아무것도 다른 꽤 많이된다 False.

_pop 변수가 ;인쇄 된 다음 temp 변수를 설정 합니다.

@프로그램을 수동으로 종료하므로 반전 된 부분에 부딪치지 않습니다. 이것은 회문을 만든다.


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.