私は回文です。あなたは?


103

この質問をするための以前の 試みがいくつかありましたが、どちらもこのサイトの最新の標準に準拠していません。Metaについての議論ごとに、現代のルールセットの下で公正な競争を可能にする方法で再投稿しています。

バックグラウンド

、文字列の逆列自身と同じである。すなわち、「後方同じ前方とを読み込む」という文字列です。ここでは「便利な回文」についてではなく、厳密な文字ごとの反転について説明しています。たとえば、()()回文ではありませんが、そう())(です。

タスク

入力として文字列S(または言語の適切な同等物)を取り、1つの出力Q(選択したタイプの)を持つプログラムまたは関数を作成します。妥当な手段を使用して、入力を取得し、出力を提供できます。

  • 入力Sが回文である場合、出力Qの値はAである必要があります(これはどの回文Sでも同じです)。
  • 入力Sが回文ではない場合、出力Qの値はBである必要があります(非回文Sでも同じです)。
  • ABは互いに異なるものでなければなりません。

または言い換えると、すべてのパリンドロームをある値にマッピングし、すべてのパリンドロームを別の値にマッピングします。

さらに、プログラムまたはあなたが書いた関数は、この作り回文自体(すなわち、そのソースコードはパリンドロームでなければならない)、でなければならない挑戦を。

明確化

  • けれどもtruefalseのための明白な選択であるABは、あなたの「回文である」ために任意の二つの異なる値を使用することができますし、ブール値である必要はないの出力、「回文ではありません」。
  • ここでは、文字レベルで文字列の反転を定義しています。ééUTF-8エンコーディング後のオクテットの回文シーケンスではありませんが、プログラムがUTF-8またはLatin-1でエンコードされているかどうかに関係なく、回文です。
  • ただし、プログラムに非ASCII文字が含まれている場合でも、ASCII入力に対してのみ機能する必要があります。具体的には、入力Sには印刷可能なASCII文字のみが含まれます(スペースは含まれますが、改行は含まれません)。特に、これは、入力を文字のシーケンスではなくバイトのシーケンスとして扱う場合、プログラムが仕様に準拠する可能性が高いことを意味します(言語のI / Oエンコーディングが非常に奇妙でない限り)。したがって、前の箇条書きの回文の定義は、プログラムが正しい形式であることを確認するときにのみ重要になります。
  • プログラムの半分をコメントや文字列リテラルに隠しますが、創造的ではありませんが、合法です。あなたは創造性ではなく長さで得点されているので、あなたのプログラムが回文であることを保証するために「退屈な」方法を自由に使ってください。もちろん、あなたは長さで得点されているので、あなたのプログラムの何もしない部分はあなたの得点を悪化させるでしょう。 。
  • 勝利基準はバイト単位で測定されるため、プログラムを記述するエンコードを指定して、スコアリングできるようにする必要があります(多くの場合、どのエンコードを使用しているかは明らかです)。

勝利基準

プログラムはキャラクターレベルでは回文である必要がありますが、バイトを使用して勝者を確認しています。具体的には、バイト単位で測定したプログラムが短いほど優れています。これは挑戦です。提出物(特に同じ言語の提出物)を比較できるようにするには、提出物のヘッダーにプログラムのバイトカウントを追加します(バイト数と異なる場合は、文字カウントを追加します)。


12
()()が回文ではないのはなぜですか?
エミリオM Bumachar

58
@EmilioMBumachar とで置き換え(てみてください。ある回文は?いいえ、そうでなければなりません。それから、回文でもありません。それはそうでなければならないでしょう。a)babababba()()())(
DLosc

7
コメントを完全に使用して、プログラムを回文のように見せかけるソリューションは、私には抜け穴のように見えます:(
kennytm

15
@kennytmは、言語にとらわれない方法で客観的にそれを行う満足のいく方法がないため、それらを拒否することはより悪いでしょう。(コメントとは何ですか?破棄される文字列リテラルに未使用の半分を入れるとどうなりますか?まったく到達しない完全に実行可能なコードを持つことができる2D言語はどうですか?)
Martin Ender

回答:


137

Brachylog(2)、Brachylogのコードページの3バイト

I↔I

オンラインでお試しください!

これは、標準入力(Brachylogの定数構文、つまり文字列が二重引用符で囲まれている)を介して入力を受け取り、標準出力を介して出力する完全なプログラムです。出力はtrue.、パリンドローム入力false.用と非パリンドローム入力用です。

このプログラムは回文的であるだけでなく、左/右(およびおそらく一部のフォントでは上下)のミラー対称性も持っています。

説明

Brachylogでは、大文字はプログラム内で同じ値を持つポイントを示します。これは、プログラムのある部分から別の部分に情報を運ぶための電気回路のように使用されます。この結果、コマンドを大文字の同じペアで囲むと、コマンドの入力と出力が同じであると効果的に主張することになります。Brachylogは暗黙的に入力を受け取るため、この場合、コマンドへの入力がプログラムへの入力と同じであることもアサートしています。このプログラムでは、物事(この場合は文字列)を逆にするコマンドを使用しています。そのため、プログラムは入力が前方と後方で同じであると効果的に主張します。

プログラム内のfalse.すべてのアサーションを一度に修正する方法がないtrue.場合、またはプログラム内のすべてのアサーションが相互に互換性がある場合、Brachylogの完全なプログラム(関数ではなく)はブール値を返します。ここでは、入力を反転しても変更されないという1つのアサーションしかありません。したがって、プログラムは回文チェッカーとして機能します。


49
そして180度の回転対称性、それは美しいです。
アタコ

7
...および垂直軸と水平軸に沿った対称性:-)
ルイスメンドー

13
@SteakOverflow Brachylogはカスタムコードページを使用するため、これらの文字はUTF-8でエンコードされません
DJMcMayhem

4
このプログラムに賛成票を投じるためだけにこのコミュニティに参加しました。ワオ。
ビルミシェル

4
@ATaco左右対称と上下対称の組み合わせは、180度の回転対称を意味します。;)
エリックドゥミニル

55

Pyth、3バイト

_I_

TrueまたはFalseを返します。

オンラインでお試しください!

使い方

  _  Reverse the input.
_I   Invariant-reverse; test if the reversed input is equal to its reverse.

1
どうして決勝戦が必要なの_
busukxuan

34
@busukxuan「さらに、あなたが書くプログラムまたは関数は回文自体でなければなりません」という質問から
isaacg

1
なぜこれほど多くの賛成票が......
ghosts_in_the_code

1
たぶんそうだ。それでも、それは一種の不公平のようです。いくつかの質問では、答えるのに多くの苦労が必要であり、他の質問ははるかに簡単です。それでも支払いは同じです。ところで私も支持しました:P
ghosts_in_the_code

4
@ghosts_in_the_code 100+以上の回答のうち、実際に書くのは難しかったものの1つだけでしたが、数日間の賛成票しか得られなかった回答もあります。最後に、それはすべての...ならし
デニス・


33

ゼリー、5バイト

ḂŒ
ŒḂ

1または0を返します。最初の行は未実行のヘルパーリンクで、2行目は回文テストを呼び出します。

オンラインでお試しください!


うわー、最近追加。
ジョナサンアラン

6
うん、わずか18時間。
デニス

エンコードを指定しませんでした。UTF-8を推測していますか?
ブライアンミントン

1
@BrianMintonいいえ、これはUTF-8では11バイトです。Jellyはこのコードページを使用します
デニス

@デニス、情報をありがとう。
ブライアンミントン


23

Mathematica、23バイト

QemordnilaP;PalindromeQ

あまり面白くないが、完全を期すために...

上記は、CompoundExpressionに評価されるPalindromeQで、課題を解決するビルトインです。QemordnilaPは単に未定義の識別子です。これはのために無視され;ます。


21

Haskell、87 85 44 34バイト

p=(==)<*>reverse--esrever>*<)==(=p

説明:((->) a)と、Applicativeの(おかげ@faubiguy)のインスタンスである<*>として定義されます

(<*>) f g x = f x (g x)

したがって、引数を代入することで、これが機能する理由を確認できます。


1
コードを説明できますか?
ブリ

1
@bli以降はすべて--コメントです。
theonlygusti

3
@theonlygusti Haskellは十分に異質なので、半分しか役に立たない。
Yakk

これは、の組み合わせのいくつかの並べ替えです@Yakk (==)reverseおよびid関数(id恒等関数です)。
tbodt

あなたは使用して10のバイトを保存することができます<*>のではなく、<$>および削除<*>id
faubi



16

MATL、7バイト

tPX=XPt

オンラインでお試しください!

[1; 1]回文入力および[0; 0]それ以外の場合。

t       % duplicate the input
P       % reverse the second string
X=      % check the two strings are exactly equal (returns 0 or 1)
XP      % flip array (does nothing)
t       % duplicate the answer, giving either [1;1] or [0;0]
        % (implicit) convert to string and display

15

ピップ12 11バイト

コメントなし!

x:RVaQaVR:x

入力をコマンドライン引数として受け取ります。1回文、0非回文の出力。オンラインでお試しください!

私たちがしたいことの核心はRVaQareverse(a) string-equals a。コードx:RVaQaはこの結果を計算し、に割り当てxます。次にVR:x、の値をx変数に割り当てますVR。この割り当てはプログラムの最後のステートメントであるため、その値も自動出力されます。出来上がり!

未定義の動作を使用した以前の興味深いバージョンについては、改訂履歴を参照してください。



9

R、111103バイト

all((s<-el(strsplit(scan(,"",,,"\n"),"")))==rev(s))#))s(ver==)))"",)"n\",,,"",(nacs(tilpsrts(le-<s((lla

最も独創的な答えではありません。R#のコメント文字

ゴルフをしていない:

all((s<-el(strsplit(scan(,"",,,"\n"),"")))==rev(s))
#
))s(ver==)))"",)"n\",,,"",(nacs(tilpsrts(le-<s((lla

関数のscanおかげで、からの文字列は生のバイトに変換されcharToRawます。これらの生バイトは、rev()関数の対応するものと1つずつ比較され、引数の順序が逆になります。この部分の出力は、TRUEおよび/またはのベクトルですFALSE。関数は、出力それらすべての要素がある場合
allTRUETRUE

ここ"\n"で、scan関数は複数の単語を含む入力に必要です。

前の回答(バイト単位)、81バイト

function(s)all((s=charToRaw(s))==rev(s))#))s(ver==))s(waRoTr‌​ahc=s((lla)s(noitcnu‌​f

- 24バイト感謝する@rturnbull


あなたは行って、良い数バイトを保存することができますcharToRawへの代入の前に変換をs使用すると、設定方法、および変更sepの引数にはscanall((s<-charToRaw(scan(,"",,,"\n")))==rev(s))#))s(ver==)))"n\",,,"",(nacs(waRoTrahc-<s((lla
rturnbull

(また、このアプローチは、例えばééUTF-8エンコーディングでの入力では機能しませんが、それがチャレンジのルールを破るとは思いません。)
rturnbull

@rturnbull:入力をありがとう!私は実際にエンコーディングでテストééしましたlatin1
フレデリック

テストは文字ごとに実行する必要があるため、現在のプログラムは規則に違反すると思います。
フレデリック

以前のバージョンが規則に違反しているかどうかはわかりません。OPの状態:「とりわけ、入力を文字のシーケンスではなくバイトのシーケンスとして扱う場合、プログラムは仕様に準拠する可能性が高いことを意味します(言語のI / Oエンコーディングが非常に奇妙でない限り)。 」
rturnbull

8

RProgN、11バイト

~]S.E E.S]~

これの前半はすべての重労働を行い、RProgNの利便性により、後半はノーオペレーションです。

~]S.E E.S]~
~           # Treat the word as a Zero Space Segment
 ]          # Duplicate the top of the stack
  S.        # Reverse the top of the stack
    E       # Compare if these values are equal
      E.S]~ # A no-op, because the ~ is at the end of the word, not the start.

オンラインでお試しください!


8

網膜、53バ​​イト

バイトカウントはISO 8859-1エンコードを前提としています。

$
¶$`
O$^`\G.
»
D`
M$`^.+$
$+.^`$M
`D
»
.G\`^$O
`$¶
$

オンラインでお試しください!

これはまだ最適ではないと確信しています(»行は特に無駄が多いようで、1文字を除いて回文的である45バイトのソリューションがあります)が、それは始まりだと思います。


8

GNU sed64 59 + 1(rフラグ)= 60バイトUTF-8

コードを回文にするためにコメントセクションを使用していないsedの回答を思い付くまでしばらくかかりました。代わりに、cコードの前半を逆順に印刷するコマンドを使用しますが、この命令に到達しないことを確認するだけです。

:;s:^(.)(.*)\1$:\2:;t;/../c1
d
1c/../;t;:2\:$1\)*.().(^:s;:

1入力文字列が回文ではない場合、スクリプトは出力します(エラーを与えると考えてください)。文字列が回文の場合、出力は提供されません(正常に終了したと考えてください)。

例の実行:またはオンラインで試してみてください!

me@LCARS:/PPCG$ sed -rf palindrome_source.sed <<< "level"
me@LCARS:/PPCG$ sed -rf palindrome_source.sed <<< "game"
1

説明:

:                              # start loop
s:^(.)(.*)\1$:\2:              # delete first and last char, if they are the same
t                              # repeat if 's' was successful
/../c1                         # if at least 2 chars are left, print 1. 'c' reads
                               #till EOL, so next command must be on a new line.
d                              # delete pattern space. This line must be a
                               #palindrome itself, and must end the script.
1c/../;t;:2\:$1\)*.().(^:s;:   # (skipped) print first half of code in reverse
                               #order. Everything after 'c' is treated as string.

1
TIOは現在sedをサポートしています。-r動作しませんが、すべてをBASHでラップすることができます。オンラインでお試しください!
ライリー

@Riley TIOでのヘッダーとフッターの素敵な使用、ありがとう。以前の回避策は、-eを使用してコードを引数リストに移動することでしたが、方法ははるかに優れています。私はそれが修正されるのを待っていましたが、このように私は必要はありません。
seshoumara

7

アリス、19バイト

/@.nzRoi\
\ioRzn.@/

オンラインでお試しください!

Jabberwockyパリンドローム用の印刷物で、非パリンドローム用のものはありません。任意のUTF-8入力に対して機能します。

説明

これは文字列処理タスクであるため、アリスはそれを解決するために順序モードで操作する必要があります。これは、命令ポインタが斜めに移動する必要があることを意味します。したがって、IPが上下にバウンスできるように少なくとも2行が必要です。このようなプログラムの改行は、回文の中央の文字を配置するのに適した位置になります。つまり、2行目は1行目とは逆にする必要があります。ただし、各行で1文字おきにしか実行しないため、行の長さが奇数であることを確認すると、コードの逆が独自のギャップにきちんと収まります。まったく使用されない文字はバックスラッシュだけですが、それはarbitrary意的であるため、プログラムを見栄えよく対称にするために選択しました。

とにかく、実際の関連コードは次のとおりです。

/ . z o
 i R n @

これは、左から右にジグザグに実行されます。

/   Reflect the IP southeast, enter Ordinal mode.
i   Read all input as a single string.
.   Duplicate the input.
R   Reverse the copy.
z   Pop the reverse Y and the original X. If X contains Y, drop everything
    up to its first occurrence. Since we know that X and Y are the same length,
    Y can only be contained in X if X=Y, which means that X is a palindrome.
    So this will result in an empty string for palindromes and in the non-empty
    input for non-palindromes.
n   Logical NOT. Replaces non-empty strings with "", and empty strings with
    "Jabberwocky", the "default" truthy string.
o   Output the result.
@   Terminate the program.

6

Haskell、34バイト

f=(==)=<<reverse--esrever<<=)==(=f

オンラインでお試しください!、、またはで呼び出しf "some string"ます。TrueFalse

=<<関数の演算子はのように機能するf=<<g = \s -> f (g s) sため、コードはと同じですがf s=s==reverse s、先ほど気づいたように、同じバイトカウントになります。


コメントなしのバージョン:(49バイト)

e x y=x/=y
p=e=<<reverse
esrever<<=e=p
y=/x=y x e

オンラインでお試しください!

で呼び出しp "some string"ます。これは、出力False指定した文字列があればある回文構造、そしてTrue、それはだ場合ではない回文。

説明:

コメントバージョンから始めて、コメントを新しい行に置き換えることで、このコメントのないパリンドロームを見つけました。

p=(==)=<<reverse
esrever<<=)==(=p

括弧が一致しないため、2行目は失敗します。そのため、括弧を削除する必要があります。e等しいかどうかをチェックする関数があれば、

p=e=<<reverse
esrever<<=e=p

中置オペレータ規定する第2のラインでコンパイルされます両方の<<=二つの引数を取るesrevereし、関数を返すをp

e等式関数として定義するには、通常を記述しますがe=(==))==(=e再度コンパイルしません。代わりに、私たちは、明示的に二つの引数を取り、それらを渡すことができます==e x y=x==y。これで、逆のコードはy==x=y x eコンパイルされますが、==演算子が再定義されるため、定義e x y=x==yが失敗します。ただし、不等式演算子に切り替えると、/=逆の定義になり、元の演算子と干渉しない演算子がy=/x=y x e定義されます。=//=


5

OIL、178バイト

入力を読み取り、それを爆発させ、文字列の後のアドレスを知るためにアドレスにその長さを(増分および減分により)ゆっくりと追加し、コードの別の部分(中央)にジャンプし、バンドの方向を反転し、文字列を内破します再度、元の文字列と同じかどうかを確認します。TL; DR:いつものように痛みです。

40文字列が回文ではない場合に出力します0

5
0
12
0
40
1
40
2
1
40
34
10
2
3
22
16
9
2
8
35
6
11
6
37

3
4
4
27
26
0
1
10
1

40
13
2
31
04

1
01
1
0
62
72
4
4
3

73
6
11
6
53
8
2
9
61
22
3
2
01
43
04
1
2
04
1
04
0
21
0
5

2
きちんとした言語!:)
DLosc

5

Javascript、64バイト

f=s=>s==[...s].reverse().join``//``nioj.)(esrever.]s...[==s>=s=f

f文字列で関数を呼び出す

f("abba") // returns true
f("abab") // returns false

あなたのソースコードは回文ではありません!
seshoumara

@seshoumaraはコードを更新しました
プラ

今は大丈夫です。文字列が回文ではない場合の戻り値については、単に完成のために言及するかもしれません。
seshoumara

@apsillers、ありがとうございます。答えを編集しました。
プラサンスベンドラ

機能はありませんfあなたのコードは、それを呼び出すことができないので、変数にあなたの矢印機能を割り当てていない、
SPEX

5

Japt7 2バイト

êê

それを実行します

古いソリューション:

U¥UwU¥U

オンラインでお試しください!

説明

U¥UwU¥U
U¥        U is the input, ¥ is a shortcut for == 
  Uw      w is a reverse function.
    U¥U   This calculates U == U (always true), but the result is ignored
          because w does not look at its arguments.

Japtは、閉じ括弧(またはスペース)に到達しない限り、関数をエスケープしません。

これは、書き換えることができます。U¥Uw(U¥U)U¥UwU==Uw。Japtでは、関数の最初と最後で括弧が省略され、自動挿入されます。


w引数をとらない関数である場合を除いて、それはすべて理にかなっていますU。それは次のようなものU.reverse()ですか?
DLosc

@DLosc正しい。とU同じ方法で反転しU.reverse()ます。
オリバー

4

Bash + Unixユーティリティ、49バイト

[ "$1" = "`rev<<<$1`" ] # ] "`1$<<<ver`" = "1$" [

入力は引数として渡されます。

出力は結果コードで返されます。パリンドロームの場合は0、非パリンドロームの場合は1です。

コード自体を回文的なものにするために、コメントに頼るだけでなく、誰かがもっとうまくやれるかもしれません。

オンラインでお試しください!


[[ $1 = `rev<<<$1` ]]短いです。(バッシュの[[構文、一切の引用は必要ありません)
Arthur2e5

2
@ Arthur2e5私はあなたの提案を試してみましたrev<<<$1が、[[...]]ソリューションにも引用符が必要だと思います。入力文字列'[$]]$['(回文です)でテストします。それを機能させるためにこれらの引用符を追加すると、ソリューションは私のソリューションと同じ長さになります。
ミッチェルスペクター

素晴らしいキャッチ!==in のRHSが- [[caseようなパターンとして解釈されることを忘れていました。
Arthur2e5

@ Arthur2e5まだこれを短くするための賢い方法があると思います。
ミッチェルスペクター

入力に改行がある場合でも、これは機能しますか?revではなくrev | tacが必要だと思います。
b_jonas

4

> <>、11バイト

{=?!;
;!?={

ここで試してみてください!

有効な回文では「\ n何かが生臭い...」を返し、無効な回文では出力を返しません。パリンドロームをスタックに置きます。


入力が既にスタック上にあることを要求すると、これがスニペットになります。この課題には、スニペットではなくプログラムまたは機能が必要です。
pppery

4

Javaの- 171の 169 160バイト

int q(String s){return s.equals(new StringBuffer(s).reverse().toString())?1:2;}//};2:1?))(gnirtSot.)(esrever.)s(reffuBgnirtS wen(slauqe.s nruter{)s gnirtS(q tni

最後のコメントは、それを回文式にすることです。P(alindrome)入力が回文であるN(ot)場合とそうでない場合を返します。

ゴルフされていないバージョン:

int q(String s) {
    return s.equals(new StringBuffer(s).reverse().toString()) ? 'P' : 'N';
}//};'N':'P'?))(gnirtSot.)(esrever.)s(reffuBgnirtS wen(slauqe.s nruter{)s gnirtS(q tni

@DLoscのおかげで2バイト節約

誤ったバイト数を指摘してくれた@OlivierGrégoireに感謝します!今すぐ修正


intsの代わりにcharsを返すことで、いくつかのバイトを節約できると思います。
DLosc

私はあなたのバイト数をチェックしますかわからないが、あなたは160のバイトではなく、161を持っている
オリヴィエ・グレゴワール

80を返し'P'、78を返すことで2バイト'N'を節約できます。または、異なる文字を使用してさらに多くのバイトを節約できます。
セリム

1
次の操作を行うことにより、さらに多くのバイトを保存することができますnew StringBuffer(s).reverse()+""代わりにnew StringBuffer(s).reverse().toString()
セリム

1
あなたがint代わりに返す理由はbool何ですか?
CodesInChaos

4

Java 8、92 90バイト

これはコメント版です。文字列にその逆が含まれる場合、それは回文です(true)、そうでない場合(false)。

s->s.contains(new StringBuffer(s).reverse())//))(esrever.)s(reffuBgnirtS wen(sniatnoc.s>-s

オンラインでお試しください!

更新

  • -2 [18-04-05]含むに切り替えました。@Kevin Cruijssenに感謝します
  • -2 [17-02-20]削除;
  • -16 [17-02-22]自動変換

このコードはラムダ式ではありません。
ヤコブ

@Jakob私はそうだと思った。ラムダを使用する場合は、おそらく先頭と末尾の改行が必要になります。(tioリンクを追加)
NonlinearFruit

ええ、私の不満は、行コメントが単なるラムダ式以上のものを提出するため、ラムダソリューションとしては有効ではないということでした。今のところ心配しないでください。おそらく最終的には、メタコンポストを作成してコンセンサスを収集します。
ヤコブ

@Jakob Lambdaソリューションには、時には無関係なコードが含まれている場合があります。しかし、あなたが売られていなくても、メタ投稿は傷つきません。
NonlinearFruit

1
久しぶりですが、に変更することで2バイトをゴルフできますs->s.contains(new StringBuffer(s).reverse())//))(esrever.)s(reffuBgnirtS wen(sniatnoc.s>-sオンラインで90バイト試してください。
ケビンクルーッセン

3

実際には、5バイト

;R=R;

オンラインでお試しください!

真実の出力は[1]\n[1]であり、偽の出力は[]\n[](両方の出力で\n、リテラルの改行を表します)です。

説明:

;R=R;
;R=    duplicate input, reverse one copy, test equality (the main palindrome-testing part)
   R   range(1, x+1) - if palindrome, this pushes [1], else it pushes []
    ;  duplicate

なぜあなたはこれをしないのですか?
リーキー修道女

1
@LeakyNunそれは回文である必要があります
coinheringaahing caird

3

C ++、154バイト

int m(){std::string g,p="";g=p;std::reverse(p.begin(),p.end());return g==p;}//};p==g nruter;))(dne.p,)(nigeb.p(esrever::dts;p=g;""=p,g gnirts::dts{)(m tni

私は言わなければなりません、逆の声明は高価でした、しかし、私はそれを変えるために私ができることがあまり想像できません。std ::シンボルを削除できると、約10文字節約できますが、「名前空間stdを使用」; さらにたくさんあります。

私は、C ++は簡潔さを目的としたものではなかったと思います。


3

プロローグ、44バイト

p-->[]|[_]|[E],p,[E].%.]E[,p,]E[|]_[|][>--p

これは、確定節の文法を使用します。実際には完全な文脈自由文法です:

p -->
      []            % the empty string
   |                % or
      [_]           % a one character string
   |                % or
      [E],          % one character, followed by
      p,            % a palindrome, followed by
      [E].          % that same character

使用法:

?- phrase(p,"reliefpfeiler").
true 

?- phrase(p,"re").
false.

2

CJam、13バイト

l_W%=e#e=%W_l

説明:

l_W%=e#e=%W_l
l_            e#Read input twice
  W%          e#Reverse one input
    =         e#Test for equality
     e#e=%W_l e#Comment to be a palindrome

例:

> l_W%=e#e=%W_l
l_W%=e#e=%W_l
1

> l_W%=e#e=%W_l
Hi
0

> l_W%=e#e=%W_l
hh
1

:このお試しくださいl_W%#e#%W_l
aditsu

2

J、15バイト、15文字

-:|.NB. .BN.|:-

回文の場合は1、そうでない場合は0を返します。

出力:

   f '())('
1
   f 'nope'
0

説明:

-:    NB. "Match" verb, checks for equality
|.    NB. Reverses the string
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.