ポリグロットは、複数のプログラミング言語で同時に有効なプログラムです。このようなポリグロットのほとんどは、ある言語の特定の構成要素が別の言語のコメントとして解釈されるように記述されています(たとえば#define
、Cでは複数のスクリプト言語でコメントとして解釈されます)。
コメントが含まれていないが、空白文字以外の文字を削除するとすぐに変更される自明でないポリグロットを作成できるかどうかを知りたいので、そのようなプログラムを考え出すように挑戦します。
具体的なルールは次のとおりです。
- (出力)。プログラムは、各言語のコンソールで出力を生成する必要があります。つまり、プログラムは何も出力せずに単純に終了することはできません。
- (分散)。標準のポリグロット定義を緩和するため、プログラムの出力は言語によって異なる場合があります。
- (エラー)。プログラムは、どの言語でもエラー(大まかに定義)を生成してはなりません。ほとんどの言語では、これはコンパイラーやインタープリターからゼロ以外の終了コードを返すものとして定義されています。
- (制限)。コードから空白文字以外の文字を1つ削除すると、プログラムはすべての言語で動作を変更します。プログラムは、その言語に対して無効になるか、生成される出力を変更することにより、「変更」される場合があります。
- これはコードの挑戦です。勝者は、ほとんどのプログラミング言語で有効なプログラムです。プログラムの長さを短くするために、関係が切断されます。
制限ルールは、いくつかの文字の削除には適用されません。つまり、複数の文字を同時に削除しても、言語の1つが変更されない場合は問題ありません。
空白以外の文字を削除してもWhitespaceプログラムの動作は変わらないため、制限規則は言語の1つとしてWhitespaceを使用できないことを意味することに注意してください。
Python 2およびPython 3の言語で、上記のすべての制限を満たすプログラムの簡単な例を次に示します。
print("Hello World!")
の文字を削除するprint
と、両方の言語でNameError
; がスローされます。括弧または引用符を削除するとがスローされSyntaxError
、文字列文字を削除すると両方の言語の出力が変更されます。(これprint("hello", "world")
はより微妙ですが、上記の規則の下ではまだ有効なプログラムです)。
Python 2とPython 3は非常に似ているため、この例は少し不自由です。そのため、同じ言語(特にPython 2とPython 3)の異なるバージョンのみを使用する他のソリューションは受け入れません。
print("Hello World!")
また、有効なRubyのコードです