クイン/エラークインポリグロット


14

タスクは簡単です。2つの言語で実行できるプログラムを作成します。言語1では通常のクイン(独自のソースコードを出力)、言語2ではエラークイン(独自のソースコードと同じエラーメッセージを生成)である必要があります。

これはであるため、最短の有効な送信(バイト単位)が優先されます。

ルール:



BASICの2つの異なる方言を使用できますか?
MD XF

@MDXF STDERRに出力する以外はまったく同じ動作をする場合、いいえ。そうでなければ、はい。
エソランジングフルーツ

したがって、私の答えは有効です。
MD XF

@MDXF有効です。
エソランジングフルーツ

回答:


2

Befunge-93(FBBI) / C(tcc)、93 + 62 = 155バイト

^"
>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p:1: error: declaration expected

オンラインで試してみてください!:Befunge-93C

randomdude999には、ファイル名が機能するために一致する引用符が必要であることに注意してくれました。

filenameの下に保存する必要があります。^"\n>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$pここ\nで改行です。このため、CのTIOは意図したとおりに動作しません。Lubuntuで動作するようにテスト済み。

説明(C):

プログラムはコンパイルに失敗し、tccはファイルの名前をエラーメッセージの一部として喜んで出力します。コードの先頭に基づいて、複数のコンパイルエラーが発生する可能性があります。^最初にはを与えますdeclaration expected。これは短く、のような問題のある文字は含まれていません"。一方、gccおよびclangの開発者は非常に悲観的であり、一度に複数のエラーを出力することを選択しましたが、これはあまり良くないため、コンパイラを使用していません。

説明(Befunge-93):

Befungeは"、文字列モードを切り替えるコマンドのおかげで、コードを文字データとしても利用できるという点で、クインにとって便利です。最初に、いくつかの役に立たないスタック操作を実行してから、p(0、1)にNUL文字を配置する(putコマンド)を発行します。次に、命令ポインタを左に反映して、すべてを文字列として読み取り始めます。スタックのLIFOの性質のため、これは左側で行う必要があります。ラップして"文字に再び到達すると、文字列は終了します。NUL文字が$文字、文字列の途中で区切り文字を作成します。次に、3つの数字をスタックにプッシュし、NULを飛び越えます(命令として実行すると、残念ながらインタープリターがハングするため)。エラーメッセージの静的な部分はここで実行する必要があります。ほとんどの文字はノーオペレーションですが、pコマンドは3つの引数を消費します(そのため、3つの数字をプッシュしたため、文字列の一部がここで食べられます)。:1文字は合計4つの値をスタックにプッシュします。pし、$(POPや廃棄)命令。次に、算術演算を実行してASCIIコードをプッシュし^"\n>#001p#"、最後にNUL文字を見つけて終了するまで、ループ上のすべての値を文字として出力します。


そのようなファイル名をサポートするOSを見つけてリストする必要があります。Windowsはそれをサポートしていません。
mbomb007

@ mbomb007おそらく、Linuxは通常、ファイル名に含まれる印刷可能な文字を除きます/。私は今自分でそれをテストすることはできません。
負の7

1
どのバージョンのtccを使用しましたか?Archリポジトリから直接0.9.27-3を使用していますが、エラーが発生します<define>:1: error: missing terminating " character
randomdude999

1
申し分なく、TIOで使用されているtccの正確なバージョンを見つけましたが、ファイル名の引用符が一致する場合にのみ、同じエラーメッセージが表示されました。この回答が機能するには、引用符が一致しないことが非常に必要と思われます。役に立つかもしれません:Linuxはファイル名の改行も許可します。これは、ファイル名の末尾に改行と引用符を追加したときのtcc出力です:(長いgist リンク)。これは、改行と2行目を印刷する方法を見つける必要があることを意味します。
randomdude999

@ randomdude999ありがとう。これを考慮してソリューションを更新しました。かなり...確かに、比類のない引用は、このような問題が発生することは興味深い
マイナス7

0

Applesoft BASIC / Commodore LCD BASIC、13バイト

?SYNTAX ERROR

Apple] [エミュレータで、RESETキーを押してBASICモードに入ります。
Commodore LCDエミュレーターで、ヒットRightArrowEnterしてBASICアプリケーションに入ります。
どちらの場合も、?SYNTAX ERRORすべて大文字で入力しないでください。自動的に大文字になるためです。


2
非競合ステータスは、チャレンジ後に作成された言語での提出用に予約されています。ルールに従って無効な場合は、削除します。これが有効であるべきだと思うので、まずOPの確認を待ってください(動作すると仮定します)。
ハイパーニュートリノ

@HyperNeutrinoありがとう、編集。
MD XF

1
それでは、これも疑わなければなりません。この質問は...それは見た目よりむしろ残酷である
Ørjanヨハンセン

1
@ØrjanJohansenまあ、これについてはよくわかりません。技術的には、Commore LCDには標準エラーバイトストリームがなかったので、実際にはエラークインですか?
MD XF

1
@ØrjanJohansen これ?これは、これが有効かどうかを見分けることができないことを意味していると思います。OPからの確認を待つことができますか?
MD XF
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.