0

プログラミングコンテストを開催しています。別のプログラム (参加者の実行可能ファイル) の出力を 1 文字ずつチェックするプログラムを作成する必要があります。要件は次のとおりです。

  • プログラムはplatform independent.
  • そのための入力と正しい出力が、参加者に提供されてはなりません。参加者が行うことは、自分のプログラムの名前をチェッカーに渡すことだけです。チェッカーは、答えが正しいかどうかを示します。それだけです。
  • 参加者のプログラムの出力は、参加者自身に見せてはなりません。そうしないと、参加者はそれに基づいて入力を理解する可能性があります。

2番目の部分では、入力と出力を実行可能ファイル自体に保存することは可能ですか? 暗号化されたファイルから読みたくない..少し不便です..

プログラムは次のように動作するはずです。

checker.exe question1.exe

正解、おめでとうございます!

これをボランティアに見せてください。

標準Cライブラリのpopenand関数を使ってみました。pclose

しかし問題は、Linux では、参加者のプログラムの出力を表示するシェルを開くことです。これは、3 番目の要件に従って発生するべきではありません。

これを達成するための簡単な方法は何でしょうか? 前もって感謝します。

編集

質問ごとに作成した実行ファイルを参加者に渡す必要があります。

4

2 に答える 2

0

はい、情報をシェルに保存することは簡単ではありません...パイプを使用するだけです。

例えば

  $ question | checker

チェッカーは、機能したかどうかを印刷できます。それはすべてメモリ内で発生します。


ユーザーが自分でそれを実行できるようにする場合は、このコードをスクリプトファイルに入れるだけで、ユーザーがprivを実行して読み取るだけになるようにファイルを設定します。次に、スクリプトをsuとして実行するように設定します。次に、スクリプトはチェックを実行できます(つまり、チェッカーを実行するか、比較を実行します)。比較が必要な場合、データファイルはスクリプトの外部にある可能性があり、ユーザーはそのファイルに対する権限を持っていないため、データを読み取ることはできません。

于 2013-03-07T05:18:14.840 に答える
0

1 つのオプションは、ユーザーにプログラムの出力をあなたから与えられた公開鍵で暗号化するように依頼することです: gnupg が良い候補かもしれません。秘密鍵を使用して出力を復号化し、比較します。

そうしないと、プログラムの出力を何らかのファイル (バイナリまたはテキスト) に保存せずに、またデータのプライバシーを侵害することなく比較する方法が明確ではありません。

于 2013-03-07T05:15:30.013 に答える