チャレンジ
私はあなたに別のスパイ対スパイチャレンジピッチング難読化ツール対クラッカーを紹介します。ただし、この場合、保護されるデータムは入力ではなく出力です。
チャレンジのルールは簡単です。次の仕様でルーチンを作成します。
- ルーチンは任意の言語で作成できますが、320バイトを超えることはできません。
- ルーチンは、入力として3つの32ビット符号付き整数を受け入れなければなりません。3つの引数を受け入れる関数、単一の3要素配列を受け入れる関数、または標準入力から3つの整数を読み取る完全なプログラムの形式をとることができます。
- ルーチンは、1つの符号付き32ビット整数を出力する必要があります。
- 可能なすべての入力に対して、ルーチンは2〜1000(両端を含む)の一意の値を出力する必要があります。ルーチンが出力できる一意の値の数は、そのキーと呼ばれます。
例として、Cプログラム
int foo( int i1, int i2, int i3 ) {
return 20 + (i1^i2^i3) %5;
}
それは(たぶん)のみ出力9つの値ことができるので、9のキーを有し16
、17
、18
、19
、20
、21
、22
、23
、および24
。
追加の制限事項は次のとおりです。
- ルーチンは完全に決定的で時不変でなければならず、同一の入力に対して同一の出力を返します。ルーチンは、疑似乱数ジェネレーターを呼び出さないでください。
- ルーチンは、ファイル内のデータ、システム変数、または難解な言語機能などの「隠された変数」に依存しない場合があります。たとえば、コード自体で定数が明確に定義されていない限り、ルーチンは通常定数を参照しないでください。コンパイラーの癖、数学的に未定義の演算からの出力、算術エラーなどに依存するルーチンもお勧めできません。疑問がある場合は、お問い合わせください。
- ユーザー(コーダー)は、ルーチンが生成できる一意の出力の数を正確に知っている必要があり、各出力を生成する少なくとも1つの入力シーケンスを提供できる必要があります。(潜在的に数百の一意の出力が存在する可能性があるため、このセットはキーが競合する場合にのみ要求されます。)
この問題は、以前の暗号化に比べて従来の暗号化との類似点がはるかに少ないため、より多くのユーザーがアクセスできるようになると期待しています。
創造的であればあるほど良い。
スコアリング
バイトカウントごとの最短の非クラック送信が勝者として宣言されます。
混乱がある場合は、お気軽に質問またはコメントしてください。
カウンターチャレンジ
独自のルーチンを送信した人を含むすべての読者は、送信を「クラック」することをお勧めします。キーが関連するコメントセクションに投稿されると、提出物がクラックされます。提出物が変更またはクラックされることなく72時間持続する場合、「安全」と見なされ、その後のクラックの成功はコンテストのために無視されます。
読者ごとに提出ごとに1回のクラッキング試行のみが許可されます。たとえば、ユーザーXに「あなたのキーは20」と送信したが間違っている場合、ユーザーXは私の推測を間違っているとして放棄し、その送信に対して追加の推測を送信できなくなります。
クラックされたサブミッションは競合から排除されます(「安全」でない場合)。編集しないでください。読者が新しいルーチンを提出したい場合は、別の回答で提出する必要があります。
クラッカーのスコアは、(準拠しているかどうかにかかわらず)提出された数です。同一のカウントを持つクラッカーの場合、ランク付けは、クラックされたすべての提出物の合計バイト数によって決定されます(高いほど良い)。
最高スコアのクラッカーが、勝者ルーチンの開発者とともに勝者として宣言されます。
自分の提出物をクラックしないでください。
幸運を祈ります。:)
リーダーボード
最終更新:9月2日午前10時45分(EST)
不動の障壁(亀裂のない提出物):
- CJam、105 [デニス]
止められない力(クラッカー):
- デニス[ Java、269 ; C、58 ; Mathematica、29 ]
- マーティン・ブットナー[ Java、245 ]
return
、