擬似馬ポリグロット言語検出カウンター


11

クインは楽しいです。ポリグロットも楽しいです。Polyglot Quinesは存在しますが、バーをさらに高くすることができます。

言語α、β、およびγの有効なプログラムを含むファイルを作成します。ファイルが言語αまたはβプログラムとして(おそらくコンパイル後に)実行されると、プログラムの出力は、このコンテストへの有効な提出と同じ形式になります。ファイルが言語γプログラムとして実行される場合、数値を出力します。この数の値は、2進数として解釈されるプログラムの以前の実行のチェーンです。

この説明を理解するのは少し難しいかもしれませんので、ここに例を示します。Α、Β、およびΓを、入力を言語α、β、またはγとして実行する関数とします。プログラムし、これらのプログラムの出力を返します。ましょう、xがこのコンテストに有効で提出すること。次に、言語β、α、β、α、α、β、およびγをこの順序でxで処理する次の式は、41 10 = 101001 2であるため、41を生成します。

Γ(Β(Α(Α(Α(Β(Α(Β(x))))))))

チェーン内の最後から2番目の実行が言語βの実行であると想定することはできません。オリジナルの投稿が言語γプログラムとして直接実行される場合、0を出力します。

プログラムは、チェーン内で最大16回のコンパイルに対して正しく動作します。つまり、プログラムが最後に印刷する可能性のある最大数は2 15-1です。もちろん、プログラムはより長いコンパイルチェーンをサポートできます。

これは、クリエイティブなソリューションを奨励する人気コンテストです。最高得票の提出が勝ちです。


3つの言語を平等にすることはできますか(たとえアップボートが大幅に減るとしても)
ズガルブ

6
@Zgarb一部の言語(またはすべての言語)が同等であるソリューションを見つけたいです。同等の言語を区別する方法を見てみましょう。
-FUZxxl

1
...そうですか。:DIは挑戦をあまりにも急いで読みました。
ズガルブ

@Zgarb同じ言語の異なるバージョンはどうですか? magic += Number(System.env.lang_version[-1])
ジョンドヴォルザーク

1
退屈a,b,cまたは1,2,3=)の代わりにギリシャ文字を使用して+1
flawr

回答:


13

Python 2、Python 3、> <>(魚)

#;n0
import sys
x='\\\'\nn#;n0import sysx=v=int(1/2*2)sys.stdout.write(x[4:7]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[7:8]),sys.stdout.write(x[2:3]),sys.stdout.write(x[8:18]),sys.stdout.write(x[2:3]),sys.stdout.write(x[18:20]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[3:4]),sys.stdout.write(x[4:7]),sys.stdout.write(x[7:8]),sys.stdout.write(x[8:18]),sys.stdout.write(x[18:20]),sys.stdout.write(x[20:32]),sys.stdout.write(x[32:851]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[1:2]),sys.stdout.write(x[2:3]),sys.stdout.write(x[20:32]),sys.stdout.write(x[2:3]),sys.stdout.write(x[32:851])n'
v=int(1/2*2)
sys.stdout.write(x[4:7]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[7:8]),sys.stdout.write(x[2:3]),sys.stdout.write(x[8:18]),sys.stdout.write(x[2:3]),sys.stdout.write(x[18:20]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[3:4]),sys.stdout.write(x[4:7]),sys.stdout.write(x[7:8]),sys.stdout.write(x[8:18]),sys.stdout.write(x[18:20]),sys.stdout.write(x[20:32]),sys.stdout.write(x[32:851]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[1:2]),sys.stdout.write(x[2:3]),sys.stdout.write(x[20:32]),sys.stdout.write(x[2:3]),sys.stdout.write(x[32:851])

Pythonの説明

Python 2がfloat除算を使用し、Python 3が整数除算を使用するため、v=int(1/2*2)変数が異なる値(0および1)を取得することを除いて、Python 2およびPython 3インタープリターは同様に動作します。

すべての実行で、式+0*2または+1*2 最初の行(の後#;n)とx文字列(最後の書き込みコマンドの後)に式を追加します。> <>インタープリターは最初の追加を使用し、Pythonは2番目の追加を使用して正しいクインを作成します。

後のコードB(A(B(B(x))))

#;n+1*2+0*2+1*2+1*20
import sys
x='\\\'\nn#;n0import sysx=v=int(1/2*2)sys.stdout.write(x[4:7]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[7:8]),sys.stdout.write(x[2:3]),sys.stdout.write(x[8:18]),sys.stdout.write(x[2:3]),sys.stdout.write(x[18:20]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[3:4]),sys.stdout.write(x[4:7]),sys.stdout.write(x[7:8]),sys.stdout.write(x[8:18]),sys.stdout.write(x[18:20]),sys.stdout.write(x[20:32]),sys.stdout.write(x[32:851]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[1:2]),sys.stdout.write(x[2:3]),sys.stdout.write(x[20:32]),sys.stdout.write(x[2:3]),sys.stdout.write(x[32:851])+1*2+0*2+1*2+1*2n'
v=int(1/2*2)
sys.stdout.write(x[4:7]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[7:8]),sys.stdout.write(x[2:3]),sys.stdout.write(x[8:18]),sys.stdout.write(x[2:3]),sys.stdout.write(x[18:20]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[3:4]),sys.stdout.write(x[4:7]),sys.stdout.write(x[7:8]),sys.stdout.write(x[8:18]),sys.stdout.write(x[18:20]),sys.stdout.write(x[20:32]),sys.stdout.write(x[32:851]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[1:2]),sys.stdout.write(x[2:3]),sys.stdout.write(x[20:32]),sys.stdout.write(x[2:3]),sys.stdout.write(x[32:851])

> <>(魚)説明

> <>インタープリターを実行すると、コードポインター#は最初の行の周りから折り返され、最初の行の終わりから始まり、Westの見出しが数字をスタックにプッシュし始めます。演算子が来る(+または*)場合、スタックから上位2つの要素をポップし、結果をプッシュバックします。このメソッドを使用すると、前の実行のbase2表現になります(13前の例)。これは望ましい数なので、で出力し、nで終了し;ます。


これはかなりいいです。
-FUZxxl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.