変装した変圧器(警官の糸)


10

強盗のスレッドはこちら

copsタスクは、それ自体の入力が与えられると有限の確定文字列を出力する関数またはプログラムを記述することです。プログラムに別の入力が与えられると、別の出力が返されます。

ルール:

  • 提出物は、
    • 言語名
      • フラグが使用されている場合は、それらを明らかにする必要があります。
    • プログラムのバイト数
    • 出力のバイト数
    • 出力
      • 特に長い場合は、ペーストビンなどを提供してください
      • 印刷できないものが含まれている場合は、16進ダンプを提供してください。
      • 末尾の改行と空白を出力に含める必要があります
    • 入力元(STDIN、コマンドラインなど
  • 該当する場合、プログラムでそのバイトを使用しない限り、EOFを表すバイトは入力に存在しないと見なすことができます。
  • プログラムがクラックされている場合は、タイトルの強盗のスレッドに対応する回答へのリンクを追加します。
  • あなたのプログラムは、1週間が経過してマークを付けるまで安全ではありません。
  • 入力または暗号化ハッシュ関数を使用してランダムにシードするなどの手法は承認しません。私はそれらを止めることはできませんが、これらのいずれかを利用するソリューションを受け入れることはできません。また、これらの手法の一部には衝突があり、別の文字列が同じ出力を生成する場合があることに注意してください。
  • あなたの目標は、最短の出力を持つことです。この質問を投稿してから3週間以内に投稿された最も短い安全なソリューションが優先されます!

強盗の仕事は、元のサイズ以下のプログラムを見つけることです。これも上記のルールに従います。

強盗が意図したものとは異なるソリューションでプログラムをクラックした場合、強盗のソリューションが正しくないことを証明することにより、プログラムを「クラック解除」する機会があります。これを行うには、同じ出力を生成する強盗のプログラムへの入力を見つけます。

提出例:

ブレインファック、10バイト、スコア:10

]<.[<],>[,

このソリューションは、[>、] <[。<]であり、単純に入力を逆にします

幸運を!


「プログラムに別の入力が与えられると、別の出力が返されます。」これは、プログラムが他の入力に対して同じものを出力してはならないことを意味しますか?または、これはプログラムが入力に関係なく常に何かを出力するべきではないことを意味しますか?(EXIST入力がそれ自体と等しくない、または、FORALL入力がそれ自体と等しくない場合、別の出力を返します。)
tsh

@tshそれ自体の入力のみが一意の出力を持っている必要があります。たとえば、有効な提出物は自己識別プログラムであり1、それ自体で出力するか、0そうでない場合
Jo King

@JoKingでは、Python 3の送信例は無効ですか?それはおぼろげに1021111143210532105110321051101121171164041581121141051101164011111410040105414410111010061393941他のいくつかの文字列も出力するからです。
Lynn

@lynnその通りです。私はその例を削除しました
Jo King

回答:


4

7、31文字、スコア30、安全ではなく、おそらく壊れましたか?

7プログラムは通常、単なる数値ですが、空白を含めることができ、複数の数値に分割します。したがって、この送信は2つの数値(暗黙的に7インタープリターによって連結される)で構成され、プログラムも同様に標準入力を介して2つの数値を入力として受け取ります。(ヘッダーの「31文字」は、2つの数値の合計の長さに1つの分離空白文字を加えたものです。数値を構成する数字は、プログラムとして使用すると8進数として解釈されますが、入力として使用すると10進数として解釈されます。 2つの場合で同じ数字であり、実際の数字ではありません。プログラムとして処理する場合も、入力として処理する場合も、スペースまたは改行で区切るかどうかは関係ありません。送信を無効にしないでください。)

予想される出力は次の数値です(7インタープリターが使用する出力形式であるため、ここでは10進数で表現しています)。

238363505302130098723162537059

Esolang wikiからリンクされた7インタープリターは内部的に数値を単項で格納することに注意してください。つまり、プログラムを実際に実行してそれが何をするかを確認するのに十分なメモリがない可能性は低いです。プログラムの動作を手動で確認し、小さな入力でテストして、期待どおりの動作をしたことを確認して、プログラムを検証しました。別のアプローチは、数値を格納するより効率的な方法を使用するインタープリターを作成することです。

ここでクラックを回避するのは面倒なことでしたが、プログラム自体の数値以外の2つの数値が238363505302130098723162537059を出力として生成できないことに、ようやく満足しました。(1週間後の編集:質問の解釈方法によっては、私が間違っていた可能性があります。以下を参照してください。

解決

元のプログラムは:

711170237403706
111723603700633
このプログラムは2つの数値バツy取り、式バツyy2(すなわちyバツ12)の結果を計算します。我々がこの計算を実行する場合バツ=711170237403706y=111723603700633我々は結果を得る238363505302130098723162537059必要に応じて

次の理由により、他の入力では望ましい結果が得られないことが意図されていました。

yバツ12=238363505302130098723162537059、つまりyバツ1=238363505302130098723162537061(2を両側に追加)になるように入力を選択する必要があります。この数値は111723603700633あり、2つの要素のみ1117236037006332133510712211117ます。これらの数値の2133510712211117 1つだけがバツ13 × 711170237403706 の形式で表現できます×7111702374037061=2133510712211117)。そのため、バツy数を一意に識別できます。つまり、1つの入力のみが機能します。

ただし、質問の解釈方法によっては、目的の出力を生成する2番目の入力が存在する場合があります(そのため、このソリューションは無効になります)。

残念ながら、セミプライムの2つの乗法パーティションは2つの要素に分かれています。1つは2つの素因数に分割することですが、もう1つは1と数自体からなる自明なパーティションです。1は整数xバツ1形で書くことはできませんが、望ましい出力はできます。したがって、潜在的なメタクラックでは、入力を79454501767376699574387512354および1として指定する必要があります。ただし、ここでの最初の数字には文字(8および9バツ79454501767376699574387512354189)7つのプログラムの文字セットには含まれていません。したがって、入力がプログラムと同じ文字セットに制限されている場合、このソリューションは有効です。ただし、プログラムの文字セット外からの文字を含む入力が許可されている場合、このソリューションは無効です。

説明

意図されたソリューションの機能は次のとおりです。

711170237403706 111723603700633
7 7 7スタック要素セパレーター
 111 023 403706 111723603700633初期スタック要素
 111ナンバー3、単項
     023「数値を入力する」ためのI / O DSL
         403706 111723603700633メインプログラム
(暗黙:メインプログラム要素のコピーを実行し、オリジナルを保持します)
         40 {program}の上で{023}をスワップし、エスケープします
           3 {023}を使用してI / Oを実行します。ポップ{プログラム}
     0 I / O:数値
      23数値を入力し、その回数{111}をコピーします
            706番号に「6」を追加します(デクリメント)
                11 2つの空のスタック要素をプッシュする
                  17236スタック要素「23」をプッシュします(エスケープなし)
                       0エスケープ{23}、空の要素を消費
                        3 {23}を使用してI / Oを実行します。ポップ{下の要素}
                    23スタック入力の先頭を何度もコピーする
                         7006 "66"を追加する(つまり、2を引く)
                             3出力{数値として}
                              3プログラムを終了します(低スタックのため)
17066612345123451234512345



3

梨の木、46バイトのASCII、スコア0、ひび割れ

入力は標準入力から取得されます。期待される出力(標準出力)は空の文字列です(つまり、プログラム自体が引数として指定されている場合、出力は出力されません)。

言い換えると、ここでの課題は、標準入力でそれ自体が与えられた場合に標準出力に何も出力せず、標準入力でそれ以外のものを与えられた場合に標準出力で何かを出力するA Pear Treeプログラムを記述することです。 46バイトを超える。(ASCII以外の文字や印刷できない文字を頻繁に使用している梨の木にもかかわらず、プログラムを印刷可能なASCIIに保持しながら、これをなんとか実現しました。)これは、特定の出力形式で自己識別プログラムを作成するタスクです。 (つまり、自己識別が成功した場合のnull文字列); ただし、Pear Treeには少なくとも2つのひねりがあり、この特定の言語で実行した場合の見た目よりもタスクが多少難しくなります(そのため、警官の提出に選択しました)。

私の解決策

私の解決策は亀裂とは少し異なります:

eval(k=q(print$\=$_="eval(k=q($k))"ne$_;MZpa))

オンラインでお試しください!

を使用する代わりにexit$_(暗黙的な出力)と$\(暗黙的な出力を含む出力後の改行)を、一致する1場合(および一致しない場合)にnull文字列に設定します。print暗黙の出力は少なくとも1バイトの入力がある場合にのみ有効になるため、A は引き続き必要です(したがって、プログラムとは異なり、入力として空の文字列が指定されている場合は、明示的に出力する必要があります)。

すべての梨の木プログラムは、どこかにチェックサムを含む必要があります(それMZpaがこのソリューションにあります)。チェックサムを完全にASCII文字で構成するために、私のソリューションとクラックピック変数名(およびコードの他のマイナーな詳細を変更)の両方。



3

Perl 5、10 -p0777バイト、スコア10、安全

W)9r46<(k

ここの最後の文字は「シフトアウト」、文字コード14(10進数)/ 0E(16進数)です。他のすべては印刷可能なASCIIです。

Perlの暗黙のI / O引数を使用しているため-p0777、入力は標準入力から送られ、出力は標準出力に送られます。

解決

プログラムは次のことを行います。

入力に少なくとも10文字までNULパディングし、次に文字列とXOR svgOUT_TOP

つまり、目的の出力を生成する唯一の入力であるプログラム自体は、次のとおりです。

$ _ ^ = abc | $ ^

オンラインでお試しください!

説明

Perlには、いくつかの特別な目的の変数があります。たとえば、-p0777暗黙のI / O に使用する場合$_、プログラムの最初に入力され、プログラムの最後に出力されます。

これらの変数のほとんどには、非常に単純なデフォルト値があります。ただし、$^現在選択されているページ上部フォーマットであるのデフォルト値は、はるかに長い文字列STDOUT_TOPです。そのため、難読化$^する値(この場合はプログラム)をXOR することで、これを非常に簡潔な難読化方法として使用できます。

_TOP最後にテルテールを隠すために、を追加してプログラム自体を10文字にパディングしましたabc|。つまり、のすべての文字がSTDOUT_TOP何かとXORされます。abc|最初に選択したのは、出力をほとんど印刷可能に保つための簡単な方法でした(そして、ASCIIでは小文字のXOR大文字が小文字であるため、ほとんど大文字で作られた文字列でXORしていることを見つけにくくしました)。


3

Python 3、50バイトのクラック

stdin / -outとの入出力。出力は、入力ごとに異なります。ソースコードが与えられたときのユニークな出力:

218216195196222130136136132192197195196130241204136209197216206130201131244155157154215136138204197216138201138195196138195196218223222130131247131131

(それは150桁です)

幸運を!


おっと!私はこの挑戦がまだ終わっていることを知っています...私のタイムライン/フィードにそれが現れたのは奇妙です。誰かがこれに応答するかどうかを知りたいと思っています...
agtoever



2

キュービックス、18バイト、スコア18、安全

この挑戦が注目されなかったことは残念ですが、それは時々そうなる方法です。私はこれを安全なままにしておきましたが、それを忘れる前に解決策を投稿することにしました。

これは非常に簡単に解読できるはずです。

からの入力stdin

出力

$`*2aJPJ#74(o);89

編集: これは短縮形のソースを想定していることを言及する必要があります...そして投稿したときに壊れた結果から欠落したバイト(印刷不可)があることに気づきました。今すぐコピーする必要があります。16進数の値は24 60 2a 13 32 61 4a 50 4a 23 37 34 28 6f 29 3b 38 39

概念は、最初の文字の印刷を削除してから、文字から逆インデックスを削除することでした。たとえば、[chars]-[0、len([chars]).. 2]

コードは

$r;#AoW\U-@</u.?;;

次のキューブにマッピングします

    $ r
    ; #
A o W \ U - @ <
/ u . ? ; ; . .
    . .
    . .

ここで試してください


2

ゼリー、14バイト、スコア:21、安全

プログラムと出力サイズの両方が、Jellyコードページを使用してカウントされます。

入力

最初のコマンドライン引数。

出力

-§ḋẇ"*YdĖDƘ>Ẉed€Ç+æạɦ

解決

ØJiⱮÄÆNPḃØ⁵ịØJ

オンラインでお試しください!


Jellyコードページとの間の変換は難しいため、ベリファイア(プログラムを取得し、UTF8からJellyに変換し、それ自体をフィードし、JellyからUTF8に変換し、それが期待と等しいかどうかを確認する)を用意すると便利です出力)
user202729 2018年

@ user202729 このJellyプログラムはv⁼1入力の入力があるJellyコードとして評価された入力が入力と等しい場合に生成され0、そうでない場合は生成またはエラー(入力が無効なJellyコードの場合)になります。
ジョナサンアラン

1

JavaScript Firefox、<10バイト、スコア:52、関数引数入力から、クラック

ZnVuY3Rpb24gYnRvYSgpIHsKICAgIFtuYXRpdmUgY29kZV0KfQ==


btoa

btoa(btoa) 次の文字列をエンコードします。

function btoa() {
    [native code]
}

それは与える:

"ZnVuY3Rpb24gYnRvYSgpIHsKICAgIFtuYXRpdmUgY29kZV0KfQ=="

コピーしたばかり


まず、明白なことを行った後、これは実際のコードではありませんか?次に、入力元を指定しません。私は亀裂を投稿しますが、正直なところ、この提出が有効かどうかはわかりません。
Quintec、2018年


この投稿にクラックの投稿を含める必要はないと思います。リンクをクリックするだけでクラックを表示できます。
user202729 2018年

1

GCC 61-> 61バイト

70 4F 92 73 08 D4 03 E7 65 DC D6 89 B5 AD BA 90 
97 26 31 10 F6 FA 0A 30 8F 24 69 0A A7 8B 59 9E 
A2 42 D5 67 B8 12 3A 1E 9D 25 80 F9 6B 25 32 C2 
EE 46 3F 8D 7E 0C 73 0F F0 93 C6 68 50

完全なプログラム、標準入力から入力を取り、標準出力に出力する


では、最後にスペースはあり50ますか?
tsh 2018年

@tshこれは16進ダンプです
l4m2

1

Perl 6、43バイト、スコア:15、標準入力から

49671296789805

2
チェックするだけで、以前の回答はプログラムの入力としての一意の出力に関するルールに従っていなかったので、この提出が正しいことを確認できますか?
ジョーキング

はい、そう思います。
donaldh


1

J、26バイト、スコア:52、安全

プログラムはREPLではありませんが、受け入れstdinて明示的に出力する完全なスクリプトですstdout

入力

標準入力。

出力

6fc42353c98217ef5a2908a3c63d090aa9a55b2558b61294e06a

いいえ、暗号化方式ではありません。


解決

echo]hfd]257x#.3&u:stdin''
                   stdin'' Take the whole input
               3&u:        Convert to codepoints
         257x#.     Convert base 257 to integer
     hfd]           "Hex from Decimal"
echo]               Print to stdout

オンラインでお試しください!


1

、6バイト、スコア:6

入力

からstdin、使用?

出力

5\x1c"\x1c"9

これらは印刷できないバイトのエスケープシーケンスであることを覚えておいてください。エスケープをリテラル文字に置き換えます。ここで利用可能な生のテキスト

これで頑張ってね!来週もよろしくお願いします!


0

 Perl 6、31バイト、スコア:stdinから39-ひび

ここにひびが入った

().1111111111112222235abcegijkmnorstvy

粗解。生き残るかもしれません。


私はあなたの解決策をクラックしたと確信しています、そしてあなたのプログラムは異なる入力が異なる出力を生成するべきであるというルールに従っていないのではないかと思います。
nwellnhof
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.