一意性からリバースエンジニアリング(Copのスレッド)


23

警官のプログラムの出力(o)、使用されるバイトカウント(n)および一意のバイト数(c)が与えられると、警官の出力に一致する一意のバイトをn持つバイト長の対応するコードをc見つけますo


これは警官のスレッドです。ここでクラックされるポストソリューション。

強盗のスレッドがここに位置しています


警官は次のような解決策を投稿する必要があります。

#[Language], `n` Bytes, `c` Unique Bytes (c*n points) [Cracked](Link-To-Crack)

    [Output]

---

(Optional spoiler)

ルール

  • プログラムに入力を行うことはできません。
  • プログラムは少なくとも1バイトを使用する必要がありますが、255バイトを超えることはできません。
  • 出力自体も255バイトに制限されています。
  • プログラムを複数回実行する場合、一貫した出力結果が必要です。
  • 提出物が7日以内にクラックされない場合、「安全」とマークすることができます。
    • 安全とマークするときは、目的のソリューションを投稿し、としてスコア付けしてくださいc*n
    • 回答に「+15 」が本当に必要な場合にのみ、回答を「安全」とマークしてください。どれだけ長く行けるかを見るのがもっと楽しいです。

勝ち

  • c*nスコアが最低の割れていない投稿が、警官のスレッドに勝ちます。
  • これは、10の安全な回答、または数週間後に決定されます。

注意事項

  • あなたが生意気に感じたら、ネタバレタグを使用してアルゴリズムをユーザーに伝えることができます。

クラックされていない提出:

fetch("https://api.stackexchange.com/2.2/questions/147635/answers?order=desc&sort=activity&site=codegolf&filter=!.Fjs-H6J36vlFcdkRGfButLhYEngU&key=kAc8QIHB*IqJDUFcjEF1KA((&pagesize=100").then(x=>x.json()).then(data=>{var res = data.items.filter(i=>!/^#.*cracked/im.test(i.body_markdown)).map(x=>{const matched = /^ ?#{1,3} ?(?:(?:(?:\[|<a href ?= ?".*?">)([^\]]+)(?:\]|<\/a>)(?:[\(\[][a-z0-9/:\.]+[\]\)])?)|([^, ]+)).*[^\d](\d+) ?\[?(?:.*(?:byte|block|codel)s?)(?:\](?:\(.+\))?)? ?(?:\(?(?!no[nt][ -]competing)\)?)?/gim.exec(x.body_markdown);if(!matched){return;}return {link: x.link, lang: matched[1] || matched[2], owner: x.owner}}).filter(Boolean).reverse().forEach(ans=>{var tr = document.createElement("tr");var add = (lang, link)=>{var td = document.createElement("td");var a = document.createElement("a");a.innerHTML = lang;a.href = link;td.appendChild(a);tr.appendChild(td);};add(ans.lang, ans.link);add(ans.owner.display_name, ans.owner.link);document.querySelector("tbody").appendChild(tr);});});
<html><body><h1>Uncracked Submissions</h1><table><thead><tr><th>Language</th><th>Author</th></tr></thead><tbody></tbody></table></body></html>


1
機能は許可されていますか?(文字列を返すことを
前提

1
しょーた OPは次のよ​​うに述べています。「複数回実行する場合、プログラムには一貫した出力結果が必要です。」

5
将来のCnRへの単なる提案:ユーザーが任意の固定出力を選択できるという課題は、CnRにとって非常に問題ですプログラムは実際にやっています。そうでなければ、これはきちんとした挑戦のアイデアです。:)
マーティンエンダー

4
@EriktheOutgolfer私が言ったように、「構文の制限を禁止する」。ポイントは、実際にランダムな文字のストリームを投稿することではなく、理解する必要のないランダムで有効なプログラムです。特に多くのエソランでは、プログラムが何をするのかを理解しなくても、かなりの量のランダムなガベージを出力するプログラムを書くのは非常に簡単です。
マーティンエンダー

1
この挑戦はすでに30の以上の答えを持っていることを考えると、私はのように亀裂のない投稿を一覧表示し、コードスニペット追加することをお勧めこのポストを。

回答:


11

Haskell、173バイト、8ユニーク、1384ポイント、安全

"[tag:reverse_engineering]"

この回答は質問に関連するタグを提供したいようですが、8バイトしか使用していません。

いつものように、ソリューションはTIOのコードブロックに貼り付けることで機能するはずです。オンラインで試してください!


溶液

'[':___':_'':_':':':__':__:__'':__:__':____:__:'_':__:___:_':_'_:___:__:__:__':_'_:___:_':']':[]
_:_:_'':_:_:_:__:_:_':_:_'_:_:_:_:_:___:_:_:_:__':____:___':_:__'':_=['_'..]

はい、これは有効なHaskellコードです:オンラインで試してください!

使い方

アンダースコア_は、Haskellのパターンマッチングでワイルドカードとして使用されます。'などの文字に使用され'a'ます。しかし、両方_'も識別子名に許可された文字の一部である(いくつかの制限内では、例えば、'名前の先頭に発生することはできません。)。したがって___'_'__''というように、すべての有効な識別子名です。よりわかりやすい名前を使用すると、上記のコードは次のようになります

'[':t:a:g:':':r:e:v:e:r:s:e:'_':e:n:g:i:n:e:e:r:i:n:g:']':[]
_:_:a:_:_:_:e:_:g:_:i:_:_:_:_:n:_:_:_:r:s:t:_:v:_=['_'..]

"[tag:reverse_engineering]"各変数が正しい文字に割り当てられている場合、最初の行は文字列を生成します。この割り当ては、二行目で達成される:['_'..]文字列を生成し"_`abcdefghijklmnopqrstuvwxyz{|}~ ... "、魔女は、パターンに一致した_:_:a:_:_:_:e:_:g:_:i:_:_:_:_:n:_:_:_:r:s:t:_:v:_希望の割り当てを取得するにはa='a'e='e'ようにと。


10

Brain-Flak、合計62バイト、一意の6バイト、372ポイント、クラック

出力は次のとおりです。

10993592

この番号には特別なものがありますが、OEISにはありません ;)

これを解決するためにコンピューターツールを使用することを考えている場合、運が悪ければ、整数のゴルファーはこの数に対して110バイトを取得します。

(((((((((((((((((((((()()()()){}){}){}){({}[()])}{}()()){})){}{}())){}{})){}{}){}){}){}())){}{}){}()){}){}){})

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

これを手動で行う必要があります。


ヒント

ここにいくつかのヒントがありますが、今後さらに役立つヒントを明らかにしていきます。がんばろう!

10993592はOEISのシーケンスの97番目の用語ですが、少数の用語しか含まれていないため表示されません。


私のソリューションでは3つのループを使用していますが、それらは3レベルの深さにネストされていません


私の解決策

((((((()()()){}){}){}){}){}())(({(({})[()])}{}){{({}[()])}{}})

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

これは、私のお気に入りのトリックの1つであるコード

(({(({})[()])}{}){{({}[()])}{}})

A090809のn番目の項を計算します。完全な提出では、コードを97で埋めて多数を作成します。


私は、10、993、および592が43〜63の10進数の範囲でPIに存在することに気づかずにはいられません... 592も最初の10以内に存在します。Brain-Flakが62バイトでそれを達成できるかどうかは
わかり

ASCIIモードまたは数値モード?
user202729

@ user202729私は番号モードを使用したので、強盗もそれを使用する必要があると思います。以前の試みに基づいてASCIIモードでこれが可能だった場合、私は真剣に驚きますので、おそらく追求する価値はありません。
小麦ウィザード

1
@ThePirateBay「どのOEISシーケンスに属しているか」は常に有用な情報だとは思わないので、難解なBrain-flakがどの程度かを考えてください。A000027の要素でもありますが、その観察も役に立ちません。
user202729


7

MATL、6バイト×3ユニーク= 18ポイント。割れた

1+0i 0+1i -1+0i 0-1i

2
くそー、浮動小数点演算!
スティーヴィーグリフィン

2
@StewieGriffinあなたが楽しんでいるのがわかります:-D
ルイスメンドー

ところで、i.^(0:3)オクターブ内の浮動小数点不正確さを与えるものではありませんが、J4:q^MATL ...でない
Stewieグリフィン

@StewieGriffin MATLの表示機能ではを使用するため、違いが生じます num2str(..., '%.15g ')。例についてはこちらをご覧ください。ただし、Matlabで実行されているMATLの場合は発生しません。結論はnum2str、MatlabとOctaveで動作が少し異なるということです
ルイスメンドー

とにかく、それはこの答えには影響しません。示された出力は、MATLABおよびOctaveで実行されているMATLで取得できます。特にTIO
ルイスメンドー

6

ゼリー、7バイト×6ユニーク= 42ポイント、クラック

843606888284160000

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

8!×16!¤



ああ、ハハ、間違って末尾のゼロでクラックしました!
ジョナサンアラン

@JonathanAllanまあ、それは、たとえばに簡単に置き換えることができます。今では手遅れだと思います...
エリックアウトゴルファー

P:まあ、私は不要なハードルで、同じ問題を割れた
ジョナサン・アラン

@JonathanAllanよろしければ、新しいものをクラックしてみてください!
エリックアウトゴルファー

6

マルボルジ、15バイト、13ユニーク、スコア195。安全!

出力:

PPCG

安全!対象コード:

(&a`#""7[}4XE70

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


Pを出力するプログラムをブルートフォースでビルドし、その上に別のPをビルドするなどして、これをクラックする手順は確実です。
ジョシュア

マルボルジは悪です。Malbolgeでプログラムを作成するのはすでに難しいことです。
user202729

6

JavaScript(ES8)、103バイト、42個の一意(4,326ポイント)[安全]

出力hexdump:

3E 6E 6D 08 33 7A 22 7D 6C 37 7B 36 61 7B 65 71 3A 37 26 7E 7B 7B 38 7B 7D 69 6A 2B 3D 70 74 07 6F 6C 66 7E 1A 2A 3C 37 2D 36 31 38 6A 78 33 62 30 1E 34 3D 66 7B 37 10 26 6A 6A 32 27 6F 2E 33 1B 30 1E 76 27 27 7E 18 6F 68 26 2D 76 6A 6D 6D 2F 2E 0A 3F 17 7D 2B 73 7A 17 38 62 3A 29 20 0C 61 24 21 27 10 2B 20 63 71 72 17 5D 5F 12 5B 02 14 59 17 5A 11 1E 1D 10 16 07 5F 5F 58 58 4B 18 48 4B 04 5F 06 12 16 14 4D 45 5D 5D 16 3A 1C 1D 11 16 1F 51 59 4E 4B 4C 3D 16 1C 0F 2E 46 0E 08 4B 4B 13 45 21 10 06 0E 11 3F 51 57 3E 00 54 5F 49 05 0E 07 5A 51 3E 08 01 25 10 0B 51 36 43 0B 34 1A 43 47 04 46 0E 55 05 00 06 01 40 33 0F 00 53 36 42 42 45 5F 3D 3A 38 74 39 74 71 71 2C 7C 60 38 38 76 63 44 7F 64 28 66 3E 24 7A 66 57 79 24 3C 3C 21 6A 36 27 30 77 7E 36 7E 2A 3E 29

スコアは異常に大きいと思いますが、とにかくこれはクラックするのが面白いかもしれません。プログラムは文字列を返す関数です(混乱を避けるため、REPLではありません)。

難しいことではないはずです、私が思うに、すべてはパターンを見つけることです。

溶液

誰もそれをクラックしていなかったという事実によると、私が思っていたよりも難しかったようです。簡単に作成できる複数のソリューションがあるかもしれないと考えました。とにかく、ここに意図されたソリューションがあります:

f = m => [... m = f + f + f] .map((a、p)=> p + 1&256? '':String.fromCharCode((p&4?m [p ^ 17]:a) .charCodeAt^83^p*.3)).join

何らかの理由で、コードスニペットとして適切に表示されません。TIOリンクはこちらです。


安全とマークされましたか?
user202729

@ user202729。おそらく、パズルは思ったよりも硬かったので、今では安全とマークされています。

5

オクターブ、13バイト、5つの一意の文字、スコア:65。安全!

20085918935040000

これは難しくありません。最も難しいものにすぐに飛び込みたくない場合は、最初の挑戦がいいかもしれません:)

注:質問を読んだときに、「文字列を出力するのではなく、数値を出力する」と言っていましたが。TIOの出力は次のようになります。

ans =    2.0086e+16

あなたが持っている場合、このようになります format long

ans =  20085918935040000

または、次のように印刷できます。

printf('%i',ans)
20085918935040000

私が持っていたものと説明:

prod prodprod

そのような単純な。=)

説明:

通常prod('prodprod')、これを次のように記述しますが、Octaveは関数名の後に続くものをすべて文字列(文字の配列)として扱います。これらは暗黙的にASCII値に変換され、乗算されます。



4

Java 8(フルプログラム)、合計97バイト、一意34、3298ポイント(@RobertoGrahamによってクラック

出力:

1.4241570377303032

注:これは完全なプログラムです。次の形式で機能する場合()->が代わりに許可される:

Java 8(ラムダ関数)、合計40バイト、一意の18バイト、720ポイント(@ user202729によりクラック)

おそらくかなり難しいかもしれませんが、何であれ..とにかく、この量のポイントでJavaが何かを獲得するわけではありません。


ヒント:

目的のコードには、単一引用符または二重引用符が含まれていません。(関数はdoubleを返します。)
目的のコードに数字(0-9)が含まれていません。


意図したソリューション:

かなり面白い(そして印象的な)与えられた両方のクラックが私が思い描いていたものとは全く異なるが、両方のクラッカーにシャポーがあること!

機能: 完全なプログラム:()->Math.log(Math.hypot(Math.PI,Math.E))
interface M{static void main(String[]a){System.out.print(Math.log(Math.hypot(Math.PI,Math.E)));}}


なぜ2つのプログラムがあり、1つの出力しかないように見えますか?
Okx

1
@Okx 2番目は関数だからです。
エリックアウトゴルファー

@Okx エリックが言ったように、両方とも同じだから。プログラムとしての上部、機能としての下部。私はまだ待っているアルノーさんのコメント私は2つのいずれかを削除することができますので、答えられるために...
ケビンCruijssen

だから、近くに、文字列の簡単な印刷が正しい長さであるが、2つのユニークあまりにも多くの:-) -実際には、1あなたは改行を数えていない場合は...
ケビン


4

MATL、11バイト、10固有、110ポイント。安全!

出力:

10803850202590

方法を1つだけ「助ける」ために:

これは次の製品です。

[2, 5, 29, 89, 397, 499, 2113]

そして、それは372884884433rd素数より1つ少ないです。


そして、ここにいくつかの本当のヒントがあります。数時間で割れない場合は、解決策を明らかにします。

  1. -そこqにあります

  2. -そこBにあります

  3. -そこ^にあります

  4. -そこhにあります

  5. -そこtにあります

実際のコード:

9K ^ ZqsBthXB

説明:

2つの数字と9を押して、Kべき乗を行います。その数以下のすべての素数のリストを作成し、それらを合計します。バイナリに変換し、バイナリベクトルを複製し、それをそれ自体と連結します。10進数に変換し、暗黙的に出力します。


3

Haskell、10バイト、3ユニーク、30ポイント、クラック

2416508937

一意の3バイトのみが使用されますが、すべての数字を含む素敵な数字。

目的のソリューションは、次のTIOリンクのコード部分を置き換える ことで機能します。オンラインで試してください!



@ H.PWiz私はそれが長く続くとは思っていませんでしたが、これはそれでも非常に迅速でした。私は、強盗が最初に算術解法を試すことを期待していました(または少なくとも望んでいました)。
ライコニ

3

Haskell、29バイト、15の一意のバイト、435ポイント、クラック

"33333333333333333333333333333333333333333333334333333333333333333333333333"

これは以下を含む文字列です 3 73回で、1つの卑劣なもの4です。

目的のソリューションは、次のTIOリンクのコード部分を置き換えることで機能します。 ことで機能します。オンラインで試してください!

編集: H.PWizは有効なクラック(28バイトまでゴルフできます)を見つけましたが、意図した解決策は見つかりませんでした。

ヒント:

算術演算は不要です。単一式ソリューションが存在します。




3

爆発、合計9バイト、一意4、36ポイント

出力:

22k2Dk}D}

ドキュメントはこの言語の実装と完全に一致していないことに注意してください-ある日この記事を書いて以来、触れていないため、実装に存在するバグは間違いなく機能です。

また、私はこの言語がチューリング完全であるとは思わないので、恐らくそれをブルートフォースすることができますが、それは退屈です。

リバースエンジニアリングの出力を最適化された短いExplodeコードに自動化できる場合は、かなりの賞金を提供します。


コードのスコアは36ですよね?出力も36ポイントを獲得するので、間違いではないことを確認しています。:)
スティーヴィーグリフィン

@StewieGriffinうん、質問を最初に読んだとき、私はそれを読み違えて、コードが出力と同じ長さでなければならないと思ったからです。
スティーブン

「ゴルフされた爆発コード」はどれくらい短くすべきですか?
user202729

@ user202729申し訳ありませんが、私が説明している必要があります-それは完全に決定論的なので、最適のショートコードを爆発
スティーブン・

しかし問題は、人々がブルートフォースコードを書いて「理論的に」出力を見つけるかもしれないが、実際には実用的ではないということです。
-user202729


2

Pyth、7バイト、6ユニーク、7 * 6 = 42合計スコア

312069475503262125385169244603150327250717758754411025379995130624544231547913731661607993843298516888546865336571981925596

インスピレーションについては、Pyth tipsスレッドご覧ください;)


2

ゼリー、3バイト×3ユニーク= 9ポイント、クラック

263409560461970212832400

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

ゼリーでの別の試み、今回はもっと挑戦したいと思います。

ȷc⁵



@JonathanAllan With my intended solution this time :p I guess it was too easy to brute-force right? There were obviously only 2763520 possible solutions...and, ironically, you use the same function to calculate this number as well as the number to be cracked.
Erik the Outgolfer


2

Excel, 22 bytes, 16 unique, 352 points, Cracked

หนึ่งล้านห้าแสนสามหมื่นสองพันสี่ร้อยเก้าสิบห้าล้านห้าแสนสี่หมื่นแปดร้อยหกสิบห้าล้านแปดแสนเก้าหมื่นล้านล้านล้านล้านล้านล้านบาทถ้วน

This might not be very hard to crack but I get to use a function that I otherwise never get to use. Besides, the score won't win anything unless a lot of others get cracked.


cracked. Probably not your original code, but it works.
wythagoras


2

Jelly, 8 bytes * 6 unique = 48 (Cracked)

241975308641975308641975308641975308641975308641926913580246913580246913580246913580246913580246916

You can try to crack it here.

Intended solution: 7ẋ²Ḍ²ẋ4S



@JonathanAllan Your crack is invalid, sorry (it doesn't print the correct result). You can see the difference here
Mr. Xcoder

@JonathanAllan Heh, tried to solve another challenge at the same time (look at the arguments! :P)
Mr. Xcoder

1
@JonathanAllan Nice, I added the intended solution in my answer too :D
Mr. Xcoder

2

Haskell, 30 bytes, 17 unique, 510 points, cracked

"6666666444444455666666666566555533333334333333333"

The intended solution works by replacing the code part in the following TIO link: Try it online!

This uses the same approach as my previous answer, which was cracked using a different approach.

Some hints:

No arithmetic needed. I have a single-expression solution.


1

2

Javascript, 11 Bytes, 7 Unique Bytes (77 points) (Cracked)

0.022522522522522525

lambda function declaration included in byte count, function call is not.

This should be really easy.


Fixed cracked with the help of @Milk
Arnauld

2

Jelly, 8 bytes, 2 unique, 8×2 = 16 points -- Safe!

-4.408500694095235e-05

(There are only 8,355,840 possible such programs so it should get cracked I guess.)

Get going at Try it online!

How?

⁽⁽°°°°°°
⁽⁽° is a base 250 literal yielding -27221
° converts from radians to degrees. Applying this five times:
-475.09607568537643
-8.291990784013993
-0.1447225407260702
-0.0025258848375215096
-4.408500694095235e-05


Nice! Originally I think some double-byte may be related here, but then I dismissed it. I also considered °, but didn't think about and thought you have to stick with starting from 0.
user202729

@user202729 is different from , they're not related in any way (except that they consume the two chars that follow).
Erik the Outgolfer

@EriktheOutgolfer Sorry, I just mistyped the characters. I meant .
user202729

2

Jelly, 4 bytes, 4 unique, 4 × 4 = 16 points -- Safe!

121713205122350539153771498803599196214022517709999123476340843193655114000078051089267404501704293755399249186132786797198080437408108773592830098754467315464894774875031495160099382422748898046431945143395996374011431649446848855993397955116462522798880

Note that the output is 255 bytes long, right at the limit.

Yep, same score as my other (as yet uncracked) Jelly entry.

Get going at Try it online!

How?

7ÆĊ⁺
7 is a literal seven
ÆĊ gets the nth Catalan number
the 7th Catalan number is 429
repeats the previous atom
the 429th Catalan number is 121713205122350539153771498803599196214022517709999123476340843193655114000078051089267404501704293755399249186132786797198080437408108773592830098754467315464894774875031495160099382422748898046431945143395996374011431649446848855993397955116462522798880.



72 bytes is a little long, yes. You could remove the spaces (62). Also you could use vectorised r between two code-page index lists and concatenate with another code-page index list to get it down to 35 bytes, but there are also still repeated bytes there and 35 >> 4... good luck!
Jonathan Allan

2

C (two's complement machine, sizeof(int) = 4), 76 bytes and 35 unique bytes for a score of 2660, Safe

Output:

10542949672924294967287429496729029742949672954294967287429496728808914294967289429496728742949672946944294967291429496728742949672914964294967294429496728742949672891980429496728842949672874294967295792 

which is 203 bytes long.

#include<math.h>
main(){for(int
i=0;i<40;i++)printf("%u",(int)(cos(i)*10));}

Without the #include it won't work.


Can we use some compiler-specific features like in gcc?

1
@ThePirateBay: I didn't.
Joshua

1
I found an interesting approach but I couldn't golf out the last byte, so I just post it here. main(i){for(;42>i;printf("%u","eirwtlegowvnfemuwphejsno"[abs(24-i++)]-'n'));}
Colera Su

@ColeraSu Probably you can switch from lowercase to uppercase and change 'N' to 78 (char code of N).
user202729

@user202729 but it would not fit the restriction of 35 unique bytes.
Colera Su

2

CJam, 15 bytes * 10 unique = 150 points

453630781352162854505467929721140132016201833205823402832306035643819420004950

Bad score, but hopefully will be hard to crack.

Note: At the moment I have forgotten what the answer is. As such, I will keep it open until either I or somebody else is able to crack it.


Double answered :P flagged to be removed
Christopher

@Christopher2EZ4RTZ What do you mean? These are two separate answers with the same score breakdown, but different outputs.
Esolanging Fruit

Oh wow my bad. XD
Christopher

Ahaha... you, sir, must be a cop that's 2 days from retirement forgetting the answer like that ;P
Magic Octopus Urn

@MagicOctopusUrn Now I've retired, and have no interest in this anymore...
Esolanging Fruit

2

CJam, 15 bytes * 10 unique = 150 points

355605126761554652609272416635107412217265861355621217687464016216276447790261274709847680

Note: At the moment I have forgotten what the answer is. As such, I will keep it open until either I or somebody else is able to crack it.



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.