投稿する前にこの課題の仕様を固めるのを手伝ってくれたユーザー、Step Hen、Wheat-Wizard、Dennisに感謝します!
これは警官のスレッドです。強盗のスレッドについては、こちらをご覧ください
ではこの課題は、あなたの言語は、もはやプログラミング言語であることの私達の基準を満たすようにそれを行うものではありませんいくつかのコードを実行する使命を帯びています。その挑戦では、それは言語がもはやできないようにすることを意味します...
数値の入出力を行う
2つの数字を一緒に追加します
特定の数が素数かどうかをテストします。
これは警官と強盗の課題であり、2つの異なる目的を持つ2つの異なる課題があります。警官は言語をほとんど使用できないようにするコードを記述しようとし、強盗は警官を許可する隠れた回避策を見つけようとします言語を回復します。
警官として、次の2つのコードスニペットを記述する必要があります。
たとえば、入力/出力および数値演算を行うための組み込み関数を削除することにより、言語をほとんど使用できなくするもの。削除する機能が多いほど、優れています。このコードは、クラッシュまたは終了することはできません。このスニペットの最後にコードを追加することが可能であるべきであり、そのコードは評価されます。そして...
... 2つの非負の整数を入力として受け取り、それらを加算して合計を出力するコードスニペット。このスニペットは、最初のスニペットを実行した後でも正しく機能する必要があります。2つのスニペットを組み合わせる場合、2つの数字を追加する完全なプログラムを形成するか、2つの数字を追加する関数を定義する必要があります。理想的には、このスニペットは非常に不明瞭な動作に依存し、見つけにくいようにする必要があります。
入出力の標準的な方法を選択できます。ただし、使用している形式(入力および出力)を正確に明らかにする必要があります。強盗は、あなたと同じ形式を使用しない限り、答えを解読できません。
これらのスニペットを両方とも作成した後、2番目のスニペットを公開せずに、最初の1つを回答として投稿する必要があります。回答には、次の情報がすべて含まれている必要があります。
最初のスニペット(明らかではない第二)。
言語(マイナーバージョンを含む、ほとんどの提出物はおそらく奇妙なエッジケースに依存するため)
関数か完全なプログラムかを含むIO形式。強盗は、クラックを有効にするために同じ形式を使用する必要があります。
答えが機能するために必要な奇妙なケース。たとえば、Linuxでのみ実行されるか、インターネット接続が必要です。明らかに、これは少し主観的ですが、警官にひび割れを防ぐ極端なケースがあり、安全になってからこれを明らかにする場合、私はこの貧弱なスポーツマンシップを考慮します。潜在的な強盗には、解答を解読する前に解答するために必要なすべての情報が必要です。
答えが安全になるまで、バイトカウントを明らかにする必要はありません。
以下に例を示します。最初のスニペットでは、次のPython 3プログラムを送信できます。
Python 3
print=None
STDINから入力を受け取り、STDOUTに出力します
次に、2番目のスニペットとして、次のように記述できます。
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
これは、入力として2つの数値を受け取り、2つのスニペットを結合した場合でも合計を出力するため、有効です。たとえば、
print=None
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
ただし、これは強盗が解決策を見つけるのは非常に簡単です。これは非常に簡単にクラックできるため、次のようにこの特定のアプローチにパッチを当てることができます。
import sys
sys.stdout=None
print=None
ただし、これでも非常に簡単な回避策があります。
del print
a,b=int(input()),int(input())
print(a+b)
警官としてのあなたの目標は、隠れた回避策を可能な限り曖昧にして、強盗がそれを見つけないようにすることです。
強盗は、あなたの答えの一つを見て、それを解読しようとします。彼らは、スニペット2として機能する有効なスニペットを書くことでそれをクラックするかもしれません(言語がほとんど使用できなくなった後に2つの数字を一緒に追加します)。これは、最初に意図したものと同じスニペットである必要はありません。強盗があなたの答えをクラックした場合、彼らはあなたの答えにコメントを残します、そしてあなたはそれがクラックされたことを示すためにそれを編集する必要があります。投稿にクラックがある場合は、回答を編集して、最初に意図したソリューション(スニペット2)を表示する必要があります。これはルールそのものではなく、ゲームを楽しくするための友好的な提案です。あなたがする必要はありません。
回答が1週間ひび割れていない場合は、2番目のスニペットで編集して、回答が安全であることを示すことができます。週が過ぎた後に編集しない場合、他のユーザーはあなたが行うまでそれをクラックすることができます。2番目のスニペットを公開しない場合、回答のポイントを請求したり、安全に呼び出したりすることはできません。
警官のスレッドの勝者は、両方のスニペットを含む最短の安全な回答であり、バイト単位でカウントされ、この回答は十分な時間が経過した後に受け入れられます。回答が安全になるまで、バイトカウントはスコアとは無関係であるため、回答が安全になるまで、バイトカウントを明らかにする必要はありません。十分な時間が経過し、解答がクラックされていない場合、勝者は最長時間クラックされていない回答になります。
楽しんで!
ルールの説明
最初のスニペットは、入力なしで正しく実行する必要があります。それはあなたが好きなものを出力するかもしれません、そしてこの出力は無視されます-スニペットが終わった後、2番目のスニペットは正しく動作します。
回答を有効にするには、2番目のスニペットを実際に実行する必要があります。これは次のような答えを意味します
import sys sys.exit()
言語を壊さないので無効です。単純に終了します。同様に、2番目のスニペットは実行されないため、無限ループに入ることは無効です。
安全になった後、スコアは両方のスニペットのバイト数になります。
これは、に戻ってあなたの答えが機能するために必要な任意の奇妙なエッジケースを明らかにしてくださいあなたの提出が十分な情報を含んでいなければなりません... 前に再現性があることが明らかにされた後に明らかにされています。これは、あなたの答えが安全になり、次にあなたが編集した場合:これが私の答えです。ああ、ところで、これはSolarisで実行した場合にのみ機能します。冗談です!あなたの答えは無効であり、削除され、勝利の資格があるとはみなされません。
2番目のスニペットは、合計を出力した後にクラッシュすることができます-出力がまだ正しい限り(たとえば、STDERRに出力することを選択してから、クラッシュ情報の束を取得する場合、これは無効です)。
回答を送信した後、コードを編集することはできません。
暗号化、ハッシュ関数、CSPRNGなどの暗号化関数に依存することはできません。
int main(){ do_evil_stuff(); }
ユーザーのコードはどこに行けばいいですか?関数で?main
?のすべてのステートメントの後