この質問をするための以前の 試みがいくつかありましたが、どちらもこのサイトの最新の標準に準拠していません。Metaについての議論ごとに、現代のルールセットの下で公正な競争を可能にする方法で再投稿しています。
バックグラウンド
回文は、文字列の逆列自身と同じである。すなわち、「後方同じ前方とを読み込む」という文字列です。ここでは「便利な回文」についてではなく、厳密な文字ごとの反転について説明しています。たとえば、()()
回文ではありませんが、そう())(
です。
タスク
入力として文字列S(または言語の適切な同等物)を取り、1つの出力Q(選択したタイプの)を持つプログラムまたは関数を作成します。妥当な手段を使用して、入力を取得し、出力を提供できます。
- 入力Sが回文である場合、出力Qの値はAである必要があります(これはどの回文Sでも同じです)。
- 入力Sが回文ではない場合、出力Qの値はBである必要があります(非回文Sでも同じです)。
- AとBは互いに異なるものでなければなりません。
または言い換えると、すべてのパリンドロームをある値にマッピングし、すべてのパリンドロームを別の値にマッピングします。
さらに、プログラムまたはあなたが書いた関数は、この作り回文自体(すなわち、そのソースコードはパリンドロームでなければならない)、でなければならない制限されたソースの挑戦を。
明確化
- けれども
true
とfalse
のための明白な選択であるAとBは、あなたの「回文である」ために任意の二つの異なる値を使用することができますし、ブール値である必要はないの出力、「回文ではありません」。 - ここでは、文字レベルで文字列の反転を定義しています。
éé
UTF-8エンコーディング後のオクテットの回文シーケンスではありませんが、プログラムがUTF-8またはLatin-1でエンコードされているかどうかに関係なく、回文です。 - ただし、プログラムに非ASCII文字が含まれている場合でも、ASCII入力に対してのみ機能する必要があります。具体的には、入力Sには印刷可能なASCII文字のみが含まれます(スペースは含まれますが、改行は含まれません)。特に、これは、入力を文字のシーケンスではなくバイトのシーケンスとして扱う場合、プログラムが仕様に準拠する可能性が高いことを意味します(言語のI / Oエンコーディングが非常に奇妙でない限り)。したがって、前の箇条書きの回文の定義は、プログラムが正しい形式であることを確認するときにのみ重要になります。
- プログラムの半分をコメントや文字列リテラルに隠しますが、創造的ではありませんが、合法です。あなたは創造性ではなく長さで得点されているので、あなたのプログラムが回文であることを保証するために「退屈な」方法を自由に使ってください。もちろん、あなたは長さで得点されているので、あなたのプログラムの何もしない部分はあなたの得点を悪化させるでしょう。 。
- 勝利基準はバイト単位で測定されるため、プログラムを記述するエンコードを指定して、スコアリングできるようにする必要があります(多くの場合、どのエンコードを使用しているかは明らかです)。
勝利基準
プログラムはキャラクターレベルでは回文である必要がありますが、バイトを使用して勝者を確認しています。具体的には、バイト単位で測定したプログラムが短いほど優れています。これはコードゴルフの挑戦です。提出物(特に同じ言語の提出物)を比較できるようにするには、提出物のヘッダーにプログラムのバイトカウントを追加します(バイト数と異なる場合は、文字カウントを追加します)。
(
てみてください。ある回文は?いいえ、そうでなければなりません。それから、回文でもありません。それはそうでなければならないでしょう。a
)
b
abab
abba
()()
())(
()() is not a palindrome, but ())( is.
おめでとうございます、あなたはredditに到達しました!