隠された反転(警官のスレッド)


35

これは、強盗のスレッドがここにあるパズルです

あなたのタスクは、2つのプログラム(または関数)が互いにアナグラムであり、一方が他方の左を実行するように2つ作成します。これらのプログラムは、必要な数の整数または複素数を受け入れて出力できます。あなたが数字をキャラクターポイントまたは他の合理的な手段として採用することを選択した場合、あなたはあなたの答えでそうしていることを示さなければなりません。関数のドメインを制限することを選択した場合は、回答で制限されたドメインも指定する必要があります。

次に、最初のプログラムを回答の形式で提示し、強盗が見つけられるように、逆に非表示にします。

表示されているプログラムは、単射関数を実装する必要があります(そうでない場合、隠された答えが存在することは不可能です)。

1週間以内に解答が解読されなかった場合は、隠された解答を明らかにし、安全とマークすることができます。安全な回答は強盗によって解読されることはなく、無期限に解読されないままになります。

目標は、バイト単位で最短のクラックされていない回答を作成することです。

入力に1を追加する次のPythonプログラムを表示できます

lambda x:~-x

解決策は次のとおりです。

lambda x:-~x

これは、入力から1を引きます


虚数/複素数の整数を使用できますか?
スティーヴィーグリフィン

@stewieあなたがそうするように指示した場合
小麦ウィザード

1
アナグラムは、文字の並べ替えまたはバイトの並べ替えとして定義されていますか(シングルバイト文字セットを使用しない言語で)?

1.「プログラムの1つを提示します」は、提示するものを選択できることを示唆しているように見えますが、特定の1つを提示しなければならないことを意味する文は「左の逆隠し」で続きます。どっち?2.質問には「プログラム」と明記されており、機能を許可するようには見えませんが、例はプログラムではなく機能です。どっち?
ピーターテイラー

大文字は重要ですか?
クリチキシリトス

回答:


12

Python 3、80バイト(ひび割れ

bhmq = int(input())
print(bhmq ** 2)
(1 or [(sqrt),(specification+of*integerr)])

ドメイン:正の整数。関数は単に数の二乗です。stdinへの入力、stdoutへの出力、および逆関数。Pythonはここで3行目を無視します。これは構文的に有効であり、1はすでに真理値であるため、Pythonは 'or'の適切な部分が明確に定義されているかどうかを見ていません。

強盗は、浮動小数点なしで整数値をそのまま印刷するため、すべての非ゼロの正方形で正しく動作するsqrt関数を書く必要があります(したがって、入力では「4」出力は「2.0」ではなく「2」または「2 \ n」でなければなりませんまたは「2.0 \ n」)。


1
私はこれが好きです。クラックするのは一見困難です
ウィートウィザード

3
ppcgへようこそ!素敵な最初の投稿!
Rɪᴋᴇʀ

1
そのひびに気にしないで、私は台無しにした。問題はまだ残っています。
orlp

1
チャレンジのルールによってこの制限を設けることが本当に許可されている場合、「いいえ」と言います。
ウォルフラム


11

Python 3、46バイト、クラック

lambda x:x*(1999888577766665//844333333222200)

入力を2倍にします。


3
「Python」は警官「n強盗」でどのように機能しますか?回答を攻撃するために任意のバージョンを選択できますか?
-orlp

ああ、これは具体的にはPython 3です。ごめんなさい。だから、/フロート部門です。
リン

3
さて、あなたはこの挑戦が私の時間の価値がないことを証明しました。進んで。
mbomb007


11

7、9バイト、ひびが入りました

このプログラムには印刷できない文字がいっぱいです。そのため、hexdumpがあります。

00000000: 2573 dc01 7e13 dcb6 1f                   %s..~....

注:これは、負の数値を入力できない数値入力ルーチンを使用するため、この送信は非負の整数のみに制限されます。

課題の1つの問題は、コードの説明を書かないことです(解読を難しくするため)。一方、これは私がここでトラブルに行く必要がないことを意味します。

特に圧縮表記では読みにくいので、言語として7を選択しました。8ビットのプログラムの塊を移動する手間をかけなければならないのはなぜだけなのかわかりません。3ビットエンコーディング。がんばろう!

説明

プログラムがクラックされたので(残念ながらブルートフォースにより、これらの短いソリューションでは常に危険です)、私が何を得たかを説明することもできます。これは、実際にプログラムを読むことでかなり解決できました。もっと難しくすることもできましたが、ブルートフォースクラックが存在する場合、それは悪い考えのように感じました。

プログラムをより自然なエンコードで表現することから始めます。;いつものように、太字の数字は(プログラムで表現されていないすべてがすぐに実行するコマンドを示している67されているが、25、unbolded数字はそのエスケープ同等物(表現していない)05、元のプログラムで表現されているすべてがする、;注意をそれ0はエスケープされ61おり、エスケープされています7):

112 7 1 7 34002 77 023 67 13303

それは基本的に、元のスタック(そこのあなただけのエスケープコマンドで行うことができます何もない、ただ表しリテラルだと7プログラムのソース平均で利用可能なコマンドのセット67)を。そのため、プログラムが最初に行うことは、大量のものをスタックにプッシュすることです。次に、プログラムの実行後のスタックの様子を示します(|7で通常のようにスタック要素を分離します)。

772 | 7 | 34662 | 023 | 73363

次に、最後のスタック要素がコピーされ、実行されるコードになります(スタックに残ります)。たまたま、これはコードであるプログラムの唯一の部分です。それ以外はすべてデータです。以下がその意味です:

73363 
7       空の要素をスタックにプッシュする
  3      最上位スタック要素を出力し、その下の要素を破棄する
 73      これらの複合効果:    最上位スタック要素を破棄する3最上位スタック要素を
   出力し、下位要素を破棄する
    6    最上位スタック要素をエスケープしてから、それを下の要素に追加します
     3   一番上のスタック要素を出力し、下の要素を破棄します

言い換えれば、これは主に単なる一連のI / O命令です。これを詳細に分析しましょう。

  • 7373363スタックの一番上にあるものを破棄します。
  • 3を出力し023、を破棄し34662ます。したがって34662、これは他のバージョンのプログラムで必要なバイトを保存するために使用されたコメントであることがわかります。023出力時に何を行うかについては、I / Oフォーマット0(整数)を選択し23、実装に整数の入力を要求するディレクティブです(7では、入力を要求する特定のコードを出力して入力を行います)。入力は、以下のスタック要素のコピーを作成することによって行われます。たとえば、入力整数が10の場合、次のスタック要素(現在7)はになり7777777777ます。したがって、ユーザーからの入力を10進数で受け入れていますが、単項として格納されています。
  • 6上のスタック要素をエスケープし(7toの各インスタンスを変更し1ます;これは7s のみで構成される文字列をエスケープする方法です)、それをスタック要素の前に追加します(772)。したがって、データはのようなものになりました7721111111111
  • 最後に、3問題のスタック要素を出力します(デフォルトの初期スタックの一部である空のスタック要素をポップします)。その値は数取ることによって計算され1、Sと7Sを、そして多くの減算0Sおよび6Sを。(2ほとんどの場合、中央の文字は無視されます。文字列の末尾にある場合、無視される代わりに末尾の改行になりますが、PPCGルールはそれを気にしません。)入力プラス2。

この時点では、スタック上に有用なものもプログラム内にも何もないため、プログラムは終了します。

これを逆にするにはどうすればよいですか?11to を変更するだけの簡単なことな00ので、入力に文字を追加して、それを2高くするのではなく2低くします。あります00さらに、プログラム内の便利な隠された8進数字(ように8進数は、互いにラインアップバイト)、我々がそれを簡単に入れ替えることができますので、11スタート時。



サイドノート:コードを説明する必要はありませんが、プログラムが何をしているのかを知っておくといいでしょう。
GB

@GB:プログラムの完全な説明を行いました(クラックの仕組みの説明を含む)。


6

Python 2、83バイト、クラック

#((()))****+,,---/2289;==oppppppqqqqqw~~
lambda n:pow(n,65537,10998167423251438693)

これは他の答えと似ています。ただし、これは64ビットRSAを使用し、暗号的には非常に脆弱です。この答えを奪うことができれば、十分な時間を与えられれば、理論的には他の答えも奪うことができます。



5

Python 2、47バイト、クラック

lambda x:x**2or (iron() and saxifrage.extend())

この関数のドメインは{x∈ℤ| x> 0}。入力を二乗します。


nmjcman101は目的のソリューションを見つけました。

lambda x:sorted(a**2for a in range(x)).index(x)


1
ハハ、作成された関数呼び出しが大好き
FlipTack

1
ひび割れそれは楽しかった、私は私が残したソートされたアナグラムに引っかかった!
nmjcman101

5

JavaScript(ES6)、46バイト、クラック

x=>Math.log(x+(+String(t=985921996597669)[5]))

この関数はln(x+1)、where xが負でない数を返します。

使用法

(x=>Math.log(x+(+String(t=985921996597669)[5])))(5)

注:浮動小数点数の性質上、f(g(x))正確には等しくない場合がありxます。例:f(g(4))=3.9999999999999996


割れた。それは本当に楽しかったです:
ETHproductions





4

J、29バイト(マイルでクラック

5#.[:,(3 5&#:(-$]-)7)#.inv"0]

これは、入力として正の整数をとる動詞であり、次のことを行います。

  1. 基数2および4に変換します。
  2. base-2表現と同じ長さになるように、base-4表現に0を埋め込みます。
  3. 2つの表現を連結します(ベース2が最初)。
  4. 連結を基数5の表現として解釈し、整数に変換します。

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

私の解決策

ロジックはクラックの場合とほとんど同じです。ランク接続詞"は、実際にはソリューションで何も実行しないため、多くの異なる場所でスタックする可能性があります(そして、不要な0を取り除くために使用します3

(7-5)#.[:(]-:&#$,)5#.inv"0 3]

私はJを理解していませんが、私の実験はこれが実際にベース2と4の整数を取ることを示しています。これらのゼロは意図されていますか?
ウォルフラム

@Wolframゼロは意図的なものであり、それが私が「同時に」言いたいことです。そうでなければ私はそれが可逆的だとは思わない。
ズガルブ

@Wolframより明確な説明を追加しました。
ズガルブ


4

処理(java)、59バイト、SAFE

float igetuwebaoli(int p){return p*(((17*-4*-3)))+0+0;}//,,

この関数は、入力に20417*-4*-3=204)を掛けます。入力としてintを受け取り、floatを出力します。予想どおり、逆は入力をで除算します204。注:両方のプログラムは、入力としてintを受け取り、フロートを出力します。

この回答は、他の回答がProcessing.jsで記述されていることを除いて、他の回答とまったく同じです。Javaのそれほど冗長ではないいとこであるProcessing-javaをご覧ください。Processing 、processing.orgからダウンロードできます。

クラック

float ap(int i){return i*pow(blue(get(0,0)),-1);}//++7*4*-3

このプログラムは、引数をで除算します204。しかし、どのように?関数の内部に入りましょう。

i *                              //multiply i by
         blue( get(0, 0) )       //this (evaluates to 204)
    pow(                  , -1)  //raises to the -1 power (ie its reciprocal)

簡単ですが、どのようにblue( get(0, 0) )なり204ますか?これがこの提出物の中心です。まず、(処理スケッチで常に開くウィンドウの左上隅)にget(0,0)あるピクセルの色を取得し(0,0)ます。次に、blue()そのピクセルの青の値、つまり204

この投稿を思いつくために、私はによって得られた色のさまざまな属性を印刷することにより実験しましたget(0,0)。私は赤、緑、青、アルファ値であることを見出した204204204および255それぞれ。このことから、私はこの番号で簡単な操作を行うことにし、この投稿で終わりました。


KotlinはJavaのそれほど冗長ではないと思いました!...私は言語のCファミリーはかなり大きいことを認めるん...しかし、どのような家系図は、実際には次のようになります
CAD97

私はあなたがそれを作ったと信じています、誰もあなたの投稿をクラックしていない、そしてそれは一週間でした。
マイル

3

JavaScript(ES6)、Ilmari Karonenによってクラックされた 63バイト

x=>eval(atob`eCp4KzEvLyAgfXBModLS4TvEn4wp1iys9YRRKC85KLIhNMC=`)

いくつかのatobナンセンスのための時間。この関数はx*x+1、where xが負でない数を返します。

使用法

(x=>eval(atob`eCp4KzEvLyAgfXBModLS4TvEn4wp1iys9YRRKC85KLIhNMC=`))(5)

意図されました

x=>eval(atob`Lyp5fMRwICAgKi9NYXRoLnBvdyh4LTEsMC41KS8veCp4KzE=`)

多数の潜在的な解決策がありますが、私は主要なキャラクターがこれを難しくするのに十分なバイトオーダーを捨てることを望んでいました。C'est laatob



意図したソリューションとしてチャレンジコードを誤って再投稿しましたか?:)
イルマリカロネン

@IlmariKaronenありがとう、コピー/ペーストすることを教えてくれます... lolそうそう:P
SLuck49


2

Python 2、225バイト、Sp3000クラック

#((()))****+,,---/000555666888;==oppppppqqqqqw~~
lambda n:pow(n,65537,9273089718324971160906816222280219512637222672577602579509954532420895497077475973192045191331307498433055746131266769952623190481881511473086869829441397)

この関数の領域は[0、n)です。ここで、nは上記の膨大な数です。はい、この機能はこのドメインで可逆です。そして、私が混乱しない限り、この答えを破ることは512ビットRSAを破ることと同じくらい難しい。


1
必要な定数のおおよそのアナグラムがすでにあるため、これをブルートフォースRSAよりもブルートフォースはかなり簡単です。一方、実際には管理するのは依然として困難すぎる可能性があります。

4
CNRの無作為化に関するメタポストがあることに留意してくださいすることは挑戦:meta.codegolf.stackexchange.com/questions/10793/...
KritixiのLithos

5
@KritixiLithos私の答えには、ランダム化、ハッシュ、組み込みの暗号コードは含まれていません。文字通り1つのモジュラーべき乗です。
-orlp

2
あなたの答えは、解決が難しいことがわかっている問題を意図しており、メタ投稿と一致しています(特にRSAに直接言及しているため)。メタ抜け穴があったとしても、あなたのスクリプトはまだ私の支持に値すると思います。
クリストフ


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