ソースコードを解読する


142

:この課題は、現在、新しい警官の提出に限定されています。これは、チャレンジに興味のある強盗がもういないため、クラックされないままの投稿を誰も投稿できないようにするためです。

この警官と強盗のゲームでは、各警官は単一の出力を与える簡単なプログラムを作成します。その後、プログラムについて4つのことを公開します。

  1. 言語
  2. プログラムの長さ
  3. 希望する出力
  4. ソースコードのスクランブルアップバージョン

その後、強盗はソースコードを解読して、プログラムが元のように機能するようにする必要があります。


警官のルール

強盗が再作成しようとする単純なプログラムを作成する必要があります。

元のプログラムには単純な機能が必要です。実行時に、単一の文字列/数字を出力して停止します。いつ/どこで実行されても同じ出力が得られ、追加のライブラリやインターネットに依存するべきではありません。

プログラムと出力には、印刷可能なASCII(改行とスペースが使用可能)を使用する必要があります。出力の長さは100文字を超えてはならず、プログラムは適切なマシンで実行するのに約5秒未満かかります。また、プログラムでハッシュ(または他の暗号化機能)を使用することもできません。

次に、ソースコードのスクランブルバージョンと必要な出力を提供します。文字が保存されている限り、好きなようにソースコードをスクランブルできます。

あなたのスコアは、クラックされていないあなたが提出した最短のプログラムです。1週間後、クラックのない提出物は無効になります。この免除を主張するには、答えを編集して正しい答えを表示する必要があります。(明確化:あなたが答えを明らかにするまで、あなたは免疫がなく、まだクラックされる可能性があります。)最低スコアが勝ちます。

警官の簡単な回答例

Perl、20

ellir"lnto Wo d";prH

Hello World

または...

Perl、15

*3i)xp3rn3*x3t(

272727

強盗ルール

強盗は、ここにある別のスレッドに回答としてクラッキングの試みを投稿します

各提出物をクラックする試みが1回あります。クラッキングの試みは、ソースコードのスクランブルされていないバージョンになります。推測が説明(同じ文字、出力、そしてもちろん言語)と一致し、あなたが最初の正しい推測である場合、あなたはポイントを獲得します。プログラムがオリジナルと完全に一致する必要はなく、単に同じ文字を使用し、同じ機能を持っていることに注意することが重要です。これは、複数の正解がある可能性があることを意味します。

最も多くのポイント(成功したクラック)を持つ強盗が勝ちます。

簡単な強盗回答の例

あなたのプログラムはでしたprint "Hello World";。(ただし、機能print"Hello World" ;する場合もあります。)

あなたのプログラムは print(3**3x3)x3

安全な提出

  1. ASP / ASP.Net、14(ジェイミーバーカー)
  2. Befunge-98、15(FireFly)
  3. GolfScript、16(ピーターテイラー)
  4. CJam、19(DLosc)
  5. GolfScript、20(user23013)
  6. Perl、21(primo)
  7. Python、23(mbomb007)
  8. ルビー、27(歴史家)
  9. SAS、28(ConMan)
  10. ルビー、29(歴史家)
  11. Python、30(mbomb007)
  12. JavaScript、31(hsl)
  13. ルビー、33(歴史家)
  14. マーベラス、37(es1024)
  15. ルビー、43(歴史家)
  16. PHP、44(ケノーブ)
  17. ルビー、45(歴史家)
  18. マーベラス、45(es1024)
  19. Python 2、45(エミール)
  20. PHP、46(イスマエルミゲル)
  21. ハスケル、48(nooodl)
  22. Python、51(DLosc)
  23. Python、60(Sp3000)
  24. Python 2、62(マディフィッシュ)
  25. JavaScript、68(ジェイミーバーカー)
  26. Mathematica、73(Arcinde)
  27. Haskell、77(proudhaskeller)
  28. Python、90(DLosc)
  29. C ++、104(user23013)
  30. ECMAScript 6、116(Mateon1)
  31. C ++ 11、121(es1024)
  32. 草、134(user23013)
  33. PowerShell、182(クリストファー)

未解決の提出

投稿時刻の順。このリストは多くのユーザーの好意によるものです。

n verifyh̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳の好意によるソリューションを検証するための小さなツール


4
@xnorはい、それが意味することです。
PhiNotPi 14年

3
あなたはハッシュを禁止したい場合があります... codegolf.stackexchange.com/questions/40304/...
NinjaBearMonkey

7
おそらく、勝者は1週間後に元のソースコードを投稿する必要があることを指定する必要があります。どうして私が意味不明な言葉を投稿し、強盗の誰も正しい答えを得られなかったと主張するのを防ぐのですか?
user2023861 14年

62
「ああ、マルボルジプログラムを書いて、それをスクランブルして、このことで勝つだけだ!」と思った。しかし、その後、マルボルジプログラムを作成しようとしました。
ロドルフィト14年

8
警告:警察官は、あなたのプログラムを保存し、他の人がそれらを見ることができるので、あなたの提出物をテストするためにIdeoneを使用しないでください。
ロドルフィト14年

回答:


65

Python 3、サイズ74(ひび割れ

ビッグブラザーによって再教育された後、Pythonはちょうど同じではありませんでした。

入力:

print(war is peace)
print(freedom is slavery)
print(ignorance is strength)

1行目と2行目の終わりに2つの改行があります。

出力:

True
True
True

それぞれTrueが独自の行にあることに注意してください。


1
ドア101の後ろには何がありますか?
FryAmTheEggman 14年

5
私はそれがあまりにも簡単になったこと2+2==5を見つけるまで、私はもともと4番目のステートメントとして持っていました=
xnor 14年

5
1984年の参考文献。
ジャスティン14年

2
割れた。それは素晴らしかった。
Sp3000 14年

52

Python 3、サイズ12(ひび割れ

print (abcd)

私のプログラムは出力もエラーも生成しません。


4
割れた。素晴らしい、解決策は非常に直感的ではありません。
matsjoyce 14年

2
とてもいいです、私はintしばらくの間行っていました。
フォックスウィルソン14年

@matsjoyceよくできました。それが私の意図した解決策でした。
xnor 14年

1
@matsjoyceはい、最終的に誰かがこれを行うと予想していました。それでも、私は誰もが自分自身を台無しにしないで、手で解決しようとすることをお勧めします。私はそれがかわいい解決策であることを保証します。
xnor 14年

わかったと思う。最初pythonに入力してからプロンプトでソリューションを入力すると、見つかったソリューションは機能しません。しかし、ソリューションをファイルに入れてを入力すると、機能しますpython file
カスペルド14年


26

Python 2、サイズ50

割れた

質問に対する回答はすでに知っていますが、質問は何ですか?

コード

print *********************--///222222222222222222

末尾のスペースや改行がないことに注意してください。唯一の空白文字は、後に続く単一のスペースprintです。

出力

42

コードの長さと難易度のバランスをとろうとしましたが、どちらかといえばそれを逃しても驚かないでしょう。少なくともブルートフォースを阻止するのに十分なことを願っています。



6
これは、サイズ42ともっと良かったはず
からCVn

23

Pyth - 71 ひびが入りました

コード

C-3P0: "Sir, the possibility,..."* 
Han Solo: "Never Tell Me The Odds!"

出力

3720

*元々、ジョージルーカスはハンにC3-POを中断させました。**

**彼はこれをジャージャー以来の最大のアイデアと呼んだ。


興味深いメモ:Pythが行ったすべての変更にもかかわらず、ここにはまだ有効な答えがあります!


元の

ts,*s,y30 l" : : i i Han Solo "eP-C"h"TsrhT

説明

残りの文字は次の行に進みます。Pythは、ファイルの最初の行のみを解釈します。

ts,2タプルを作成し、合計-1を取得します。
*乗算:
s,y30 l"..."2 * 30と文字列の長さ(18)を含む2タプルを合計します。
eP-C"h"Thのアスキー値から10を引いた最大の素因数を取得します(47)。
srhT0〜10の数値の合計を取得します。

全体として、これは基本的に(30 * 2 + 18)*(47)+ 55-1を計算するだけです。@isaacgの答えを読んだ後、非常に簡単な解決策があることに気づきました:*h30tC"y"それは31 * 120です。

更新しました

*h30tC"y" "-P:Sir, e possibilit,...
Han Solo: Never Tell Me The Odds!"
この後も引き続き動作します...

説明のフォーマットが貧弱で申し訳ありませんが、スポイラーブロックの使用方法がわかりません:S

これで、Pythをオンラインで実行できます!ここで試してみてください。ありがとう@isaacg :)


9
上記には、スターウォーズの作成に関する露骨に構成された情報が含まれている場合があります。
FryAmTheEggman 14年


あなたは、例えば、ブロック内のタグを使用することができます@FryAmTheEggman<br>
SP3000

21

CJam、サイズ51 [SAFE]

コード

main(int argc,char* argv){printf("Hello, World!");}

出力

55
2292213229222231957511222223333751125537511222222135723331131931959319319

あなたはオンライン通訳でそれをいじることができます

これは見た目よりも割れやすいはずです。

ヒント

出力の2行目から始めます。少数の数字がすべて表示されるわけではなく、他の数字は疑わしい場合が多くあります。なぜそうなるのでしょうか?それを解読できれば、残りはほぼ定位置にあるはずです。

解決

"that rrrrraging london Hail!v"{elccimf(;W))},(*,pa

私がそのアナグラムを思いついたとき、天気はかなり悪かったに違いありません...

ヒントは、2行目が一緒に押しつぶされた素因数分解で構成されているという事実を指し示すことになっています。私はそこから文字列にいくつの文字とどの文字を入れるかを決定し、最後にほんの数文字しか残さないことを望んでいました。


9
待って、これはスクランブルですか???
TheDoctor

18

Befunge-98、サイズ15 [SAFE]

コード

"quick"
*+.@\_j

出力

3314

元の

「u_ji@q.+k*c
」
Befungeの好奇心はあるもののよく知られている機能は、文字列を開始するのと同じ引用符で終了できることです。これにより、本質的にその行全体(引用符を除く)がスタックにプッシュされます。余分なトリックとして、私は同じ文字列を再使用し、再びを利用することにより、u命令ポインタを逆にします。それは単なる算術です:コアとなるアイデアは、これらすべての値を合計することです(これは操作kを繰り返すために使用され+ます)。


どのインタープリターをテストしましたか、特にセルのビット幅についてどのような仮定を立てていますか?
ピーターテイラー

@PeterTaylor x86_64 linuxのcfungeでテストしました。いくつかのテストでは、符号付き64ビット整数を使用することが示されているようですが、私のソリューションはオーバーフローセマンティクスに依存していないと言えるので、それが重要かどうかはわかりません。
ホタル14年

わかりましたので、8ビットのオーバーフローを探してはいけません。残念、それはそれを単純化したかもしれない;)
ピーターテイラー

あー 私は印刷するプログラムを作った33123300といくつかの他のものに近いです3314。だから、近い...
ジャスティン・

@Quincunx優秀...:P
FireFly 14年

16

GolfScript(16バイト)[安全]

%%()*../1129n{}~

期待される出力:

-117345085515973157874551915956356303213327583847247840186528288852476459638212404362749

元のソース:

n)~{.*911%(}./2%


この期待される出力は、末尾の改行を除外していますか、それとも単に改行が出力されないのでしょうか?
ProgramFOX 14年

@ProgramFOX、出力は改行で終了します。私がそれを避けることを知っている唯一の方法は必要でしょう:
ピーターテイラー14年


13

Python、69文字[ grcによりクラック ]

スクランブル:

((((((((((((())))))))))))),,,,accdddiiiiillmmnopprrrrrssssssttttttttu

出力:

1083

これはただの無害な楽しみです:) CPython 2.7.8、3.3.2でテストし、その大部分はPyPy3 2.3.1です。


説明

組み込み関数を使用してstrdictlist文字列を構築するために、次に適用されるmapord、その後あるint型のリストに文字列を変換するために、sumMED。




11

Python 3、70文字

スクランブル:

""(((())))****++++222222222;;;;;=======cccccccccceeeiinnpprrttxxxxxxxx

出力(長さ99文字):

388626024960000000000026872002432000000000000676169243200000000000007317718780000000000000028820330

更新

1週間が経過したので、答えを投稿するのではなく、ヒントを示します。

数の平方根を取り、そこから作業してみてください



9

JavaScript、94 はFireFlyによってクラックされました

alert(' '' '''((()))+++,,,,,,,,,,,,,000111111114444577888;;;;;======[[[]]]aaafhinorrrrvvvxx||)

出力

fun in the sun

元の

a=alert;v='';r=[1,7,8,14,11,8,14,10,0,5,14,4,7,8];for(x in r)v+=('h'+(1==0)+a)[r[x]]||'';a(v);


私は、これはすべてのブラウザ/エンジンで動作しないと感じています。これをどの環境でテストしましたか?
マーティンエンダー14年


ああ...そして、私はあなたがalert最初に持っていたと確信しました、なぜならインデックスが必要なキャラクターととてもよくマッチしたからです。興味深い偶然。
ホタル14年

実際に作業を始めたときも最初に持っていましたが、ブラウザの違いを減らすために変更しました。
SLuck49 14年

Chromeでは機能しません。最新バージョンを持っています。それは言うSyntax Error: Unexpected String
オリバーNi

8

ルビー、38- MartinBüttnerによるクラック

print(succ(downcase!))$$$..[[]]6e0<><_

出力:

u

元の:

$6.pincdwnca[]rescue$><<$!.to_s[((0))]



1
@MartinBüttnerへえ、まさしく元の近くにはありません。しかし、ソリューションは元のソリューションよりも恐ろしいものです。;)
ドアノブ

1
ちょっと魚があります
TheDoctor

printdowncase!は、ニシンです。私は答えを使用することを期待し、puts考えなかった$><<
カーニグ14年

7

Python 3、サイズ16(ひび割れ

コード:

help tim__rolo__

出力(末尾に改行がある):

Hello world!


1
@MartinBüttner私は誰かがイースターエッグ...見ている知っていた
matsjoyce

1
ありませんでしたが、グーグルで素早く検索しました。;)正直に言うと、そんなに急いでいなかったら、あとの残りのキャラクターhelloがのアナグラムだったのを見たかもしれませんimport。^^
マーティンエンダー14年

7

Perl-47(grcによりクラック

コード(そこにも1つのスペースがあります)

 """"$$$$$$((()))**....///;;[[]]~==01finoprrstx

出力:

012345012345012345012345012345

あなたはそれをオンラインで実行することができ、ここで、それがもとで動作しませんstrictwarnings



@grc有効だと思います!よくやった!それは正しいことを印刷します。あなたは下で実行されたバージョンにいくつかのヒントをしたい場合strictwarnings私に知らせてください。
hmatt1 14年

7

ルビー、33-ユーザー23013によってクラック

enpsttux [[[]]]++\-\**????$$$$...

出力:

[*]

元の:

puts ?[+[*?*..?]][$$-$$]+?\\.next


これはどのバージョンですか?
リン14年

@nooodl 1.9.3がありますが、このバージョンに固有のバージョンはありません。
ドアノブ

これは大変です。ここに私がこれまでに持っているputs ものがあります:明らかに最初のものに.nextなるだろう、使用できる別のキーワードであり、残りはルビー$変数と文字配列の作成を伴うある種の魔術です... +1
rodolphito


@ user23013いいね!ただし、オリジナルではありません。実際にはソースにない出力文字が必要です;)
Doorknob

7

Python2、132文字

____        ,,,,:::''""""""""""((()))[[]]\\\0126aaaabcccceeeeeeeeeEffggiiiiiilllllmmmmnnnnnnooooopppppqqrrrrrrrrrssssStttttttuuvxxyy

出力(改行あり):

chance

更新されたバージョン、96文字

元のバージョンへの回答では、+ のexec代わりに提案されたため、ここでは簡略化されたバージョンです。compileeval

____       :::''""(())[[]]\\\0126aaabcccceeeeeeeeEffiimmnnnnooopppqqrrrrrrrrrssStttttttuuxxxxyy

更新:ひび割れ

Alex Van LiewKennyTMによって完全にクラックされました。元のソリューションは次のとおりでした(右にスクロールしてネタバレを表示):

                                                                                                                                eval(compile('try: compile("from __future__ import braces","","single")\nexcept SyntaxError as q:\n\tprint q[0][6:12]',"","single"))
                                                                                                                                exec('try:exec("from __future__ import braces")\nexcept SyntaxError as q:\n\tprint q[0][6:12]')
                                                                                                                                The hint meant "Consider {}, which are not present in the source code".

改行はいくつありますか?
Sp3000

なし(\n文字列リテラル内のような論理改行をカウントしません)。改行を使用すると、コードが短くなる可能性があります。
Vi。

2
私がやりたいことをするのに十分なxsとcsを与えていないため+1 :P
Sp3000 14年

1
ヒントを考えましょうか?あいまいなものから始めましょうDon't count ones which exist. Count ones which do not exist
Vi。


7

ルビー、29 [安全]

クラックされることなく、Rubyでどれだけ短くなるかを確認しようとしています。

コード

paper view
otool
$()**,.8<<=>

出力

[0][0, 3][0, 3, 6][0, 3, 6, 9][0, 3, 6, 9, 12][0, 3, 6, 9, 12, 16][0, 3, 6, 9, 12, 16, 20]

元の

eval <<p*8 o=*o,$>.write(o) p

説明

最初の行は、次の行で始まり、末尾の文字で区切られたヒアドキュメントを作成しp、結果の文字列を8回連結します。改行で終わるため、これによりループが効果的に作成されます。ループコードは、変数oに配列を割り当てますo.to_a*略記による)の要素で構成され、その後にの出力が続き、文字列に$<.write(o)変換さoれてSTDOUTに出力され、出力されたバイト数が返されます。初めて割り当てられる変数はnil、右側を評価するためのものであるため、最初の実行時に*o空で、writeは何も出力せず、0を返します。後続の各ラウンドは、前のラウンドで出力されたバイトの配列を出力します。p区切りのヒアドキュメントを使用するp$><<、出力用のデコイメソッドが作成されます。また、スクランブルされた文字では、バイトカウントが必要なため機能しません。


6

PHP、サイズ49 [ MartinBüttnerによるひび割れ ]

コード

sub(print2w, $+expect+$+one+$+str+$+in=$@~main$);

出力

{main}

これをテストしたPHPバージョンを開示してもよろしいですか?
マーティンエンダー14年

@MartinBüttner正確な範囲は指定しませんが、5.3.0以降はすべて正しい結果になります。
bwoebi 14年

3
割れた。のみ... ...のように4時間かかった
マーティン・エンダー

@MartinBüttnerすごい、おめでとうございます!あなたがnotめないことを期待していませんでした。:-)
bwoebi 14年



6

Haskell、100文字(無効、出力が長すぎる)

コード

//Sup
tl=[]
while(syn==(+j)) tl+=b.a();
//(: #jquery :)\\
$("#jquery").on("click", j=>alert(j==m))

出力:

"\er\\e\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\"\\\\\\\\\\\\\"\\\\\\\


元の

(#)=(>);(//)=(++)
l=j.show
main=putStr.l.l$l"eer"
j[]="\\"
j(y:u)=let(q,c)=break(#y)u in y:j c//j q

5
少しの間、「Hello Worldの進化」の質問読んでいると思いました。
Vi。

1
@Vi yeah
ザック14年

1
出力は、長さは100文字未満である
リン・

1
@Zaq:サイズ制限はコードサイズではなく、出力にあります!
リン14年

1
ほら そして、私はあなたが何かをしたと推測しましたfix show。間違いなくuncrackable
誇りhaskeller

6

J、22バイト

コード

!%()1348:::bbceehorvxx

出力(97文字)

1226317306651180983274420265228191056569220222873505571155987454033425908908110103433163350999040

これは事実上不可能だと思います...


6

CJam、32バイト(クラック

スクランブルソース

"Beware the Jabberwock, my son!"

出力

4074552392882954617076720538102062920

2
ええと、スクランブルされたCJamコードとして引用符を使用するアイデアをどこから得ましたか。;)
マーティン・エンダー14年


@MartinBüttner:それは詩からの一行であり、映画の引用ではありません。まったく違う!
デニス14年

@Dennis待って、私も映画からではありませんでした。(ただし、からではありません。:D)
マーティンエンダー14年


5

TinyMUSH 3.1、20

スクランブル:

(#ret,#3!#+#2i\2#,@)

出力:

3210

6
これをどのように実行するのですか?言語リファレンスはどこにありますか?(リンクはここでは役に立ちません)。
n̴̖̋h̷͉a̷̭̿h̸̡̅ẗ̵̨d̷̰ĥ̷̳

3
@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀hこのコードを実行するには、適切なTinyMUSHバージョンを実行しているMUSHに接続します。ブラウズここでサーバタイプが「MUSH」であるものを見つけるために、またはからサーバーのソースをダウンロードし、こことMUSHを自分で実行します。
ムコ14年

5

Python 3、長さ110 [ grcによりクラック ]

スクランブル(\n改行を示す)

\n\n\n   ""((((())))),.......9::;===IOS[]__addeeegghiiiiiiiiijllmmnnoooooooppprrrrsssssssssstttttttttttuuuuuvwyyy

出力:

The better is Flat dense. break never of be do at never. If bad it honking

ここに別の楽しいものがあります-難しいことを意味するのではなく、ただ珍しくて不可解なものです。:)


説明

ランダムに見える単語はZen of Python(PEP 20)から取られ、イースターエッグを介して自動的に印刷されimport thisます。パッセージは、9::[]現在から示唆されているように、9ワードごとです。
インポート時にパッセージを自動的に印刷せずに9ワードごとに抽出するsys.stdoutには、にリダイレクトしますStringIO()



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