回文パリンドロームチェッカー[終了]


37

文字列が回文的であるかどうかをテストするプログラムを作成し、プログラム自体が回文的であるという条件を追加します。


1
言語に行末までのコメントがある場合、これは些細なことなので、それらを禁止する必要があると思います。
ジョーイ

1
@Joey私は喜んでそのようなコメントの使用を思いとどまらせたいが、質問を投げかけた後にそれらを拒否することは、すでに答えた人には厳しい。@Venteroの回答(それらを使用していない唯一の回答)は投票数がはるかに多いため、全員が同意しているようです。
マーコグ

1
さて、このような問題を早期に取り除くには(これはSOの同様のタスクでも発生しました)、サンドボックスまたはパズルラボを使用できます;
Joey

1
どのようにプログラムがパリンドロームQUINEそのものであることを課すことについて悪にやにや笑い ;-)
ドンキホーテ

4
これは古い質問であることは知っていますが、人気コンテストやコードゴルフなどの勝者の任意の基準が必要だと思います。質問には何も指定されていません。
mbomb007

回答:


34

ルビー

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

入力が回文である場合は1を出力し、そうでない場合は0を出力します。改行なしで入力します。

コメントを使用せず、代わりに2つのトリックを使用します。

  • 短絡することは:0本当っぽいは、Rubyである(のみnilfalsefalseと評価)、それほど1&&z==esrever.z* stup評価されていないため、実行時例外を上げることができません
  • splat / multiplication operator(*):の構文エラーを回避するためにz=esrever.z stup、をz=esrever.z()*stup追加することにより、パーサーにこれを解析させます*。一方、*はsplat演算子として解析され、関数呼び出しで配列を一連のパラメーターに分割します。配列の代わりに要素が1つだけの場合、基本的には何も行われないため、puts *fooと同等puts fooです。

コメントを使用した明らかな解決策(true / falseを出力):

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

これがどのように機能するか説明できますか。ルビーは知りません。
mellamokb

@mellamokb:簡単な説明を追加しました。まだ明確でない場合は教えてください。
ヴェンテロ

26

コメントなしのPython

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

誰もまだそのトリックを見つけていないことに驚いています。ほとんどの言語で動作するはずです!


2
非常に賢い、私は逃げる引用が好きです。
ウェインワーナー

素敵な解決策は、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変数は$で始まっているので、何ですか?)


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#

実行例:

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

簡潔に勝つことはできませんが、私は感銘を受けました
ウェインワーナー

LOL、巧妙なLVL 11/10。
nymo

5

Golfscript

.-1%=#=%1-.
  • コメントトリックだけで
  • 最後に\ nなしの入力
  • 文字ごとに一致する文字を実行します(句読点でも)
  • 成功の場合は1、失敗の場合は0を返します

4

PHP

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

事実:

  • $z string、チェックする入力文字列
  • $tブール、入力文字列$zが回文の場合はTRUE 、そうでない場合はFALSE
  • コメントを使用して、コードの回文を作成します。
  • 出力 $t
  • ソース自体は回文です

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

$問題を回避するためにいくつかの奇妙なトリックを使用します。技術的には、私が;最後に忍び込まなければならなかったパリンドロームではありません。

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

これは、PHPの/* */コメントと、コメントの終わりを必要としないという事実を使用する実用的なものです。


2
最後に最初のコードでevalは、する必要がありますlave
アイカンヤシュト14年

1

CoffeeScript

私は実際には、「split」、「reverse」、および「join」の逆スペルに苦労しました:\

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

ファジーオクトワカモレ、17バイト

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

勝利がどのように定義されているかは正確にはわかりませんが、バイトカウントを上に上げました。

^ 入力を取得し、それを最初のスタックにプッシュします。

C 最初のスタックを2番目にスタックします。

z スタックの先頭を逆にして、「as」が「sa」になるようにします。

. アクティブスタックをシフトするため、アクティブスタックには入力があり、非アクティブスタックには入力が反転します。

=等しいかどうかをチェックし、等しいかどうかを返し0ます。

i反転のToSは、そう0なっ1て、何か他のものはかなりなりFalse

_一時変数をポップして設定し、;印刷します。

@プログラムを手動で終了するため、反転した部分にヒットしません。これにより回文が作成されます。


0

Javascript

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.