止まりますか?(強盗)


46

これが強盗のスレッドです。警官のスレッドはこちらです。

あなたの挑戦は、それを停止させる入力を見つけることによって警官の提出をクラックすることです。理由や、複数の入力がある場合に停止するすべての入力、または警官が意図した入力を見つける必要はありません。1つの入力だけで実行できます。

提出をクラックしたら、コメントへのリンクを投稿するか、警官の投稿を編集します。また、MODの提出物にフラグを立てて、警官の投稿で編集することもできます。また、使用した入力と警官の投稿へのリンクをこのスレッドの回答に投稿します。ほとんどの提出物をクラックする強盗が勝ちます。

異なる限り、複数の人が同じ警官の提出物にクラックを投稿できます。

(SEが重複した回答をコメントに変換した場合、この機能リクエストに投票することをお勧めします)


クラックされていない提出物をお探しですか?

fetch("https://api.stackexchange.com/2.2/questions/135363/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=>!i.body_markdown.toLowerCase().includes("cracked")).map(x=>{const matched = /^ ?##? ?(?:(?:(?:\[|<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).forEach(ans=>{var tr = document.createElement("tr");var add = (lang, link)=>{var td = document.createElement("td");var a = document.createElement("a");a.innerText = 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>


2
異なるとは、異なる入力(たとえば、2で終わるすべての入力が警官の投稿をクラックすることを意味します-別の人が2で終わる異なる数字を投稿できますか?)
スティーブン

1
複数の人が同じ警官の提出物にクラックを投稿できます... 異なるを定義してください。
デニス

回答:


49

マルボルジ、ドアノブ

オンラインで試してくださいデニスに感謝!)

Windowsの入力: F_⌠1234567890

ISO-8559-1を使用したLinuxベースのシステムでの入力: F_ô1234567890

Malbolgeプログラムの動作の中心は、Malbolgeインタープリターの動作に依存することです。Malbolgeインタープリターは、33〜126以外の命令に遭遇すると無限ループを引き起こします。単一の命令。

インタープリターを変更して、実行の開始時にプログラムのメモリ状態をダンプし、プログラムの実行中に実行されるopコードのリストの形式をとる「正規化された」ソースコードも生成しました。その情報を使用すると、プログラムが13個の入力を受け取ったにもかかわらず、実際に重要なのは1番目と3番目の入力のみであると(ゆっくりと)判断できます。

正規化されたコードとメモリダンプ(および少しのデバッガーヘルプ)を調べて、以下を考案しました。

a = op(入力1、29524)

b = op(入力3、a)

c = op(486、b)

d = op(c、37)

e = d / 4 + d%3 * 3 ^ 9

eは33から126の間でなければなりません

op仕様書に記載されている、いわゆるtritwise「op」はどこにありますか。この情報を使用して、可能な入力(0〜255)を反復処理し、上記の条件を満たすすべてのソリューションを見つける簡単なプログラムを作成できます。私は2219の可能な解決策を見つけましたが、そのうちのいくつかはおそらく機能する解決策ではないでしょう(必要な文字を入力することはできません)。具体的には、上記の入力はソリューションに基づいています。

(Input 1 = 70, Input 3 = 244)


私は警官の投稿でクラックされたコメントをする担当者を持っていません。誰かが私のためにそれをすることができますか?
-KBRON111

4
PPCGへようこそ!よくやった!この亀裂があれば、すぐに十分な担当者がいると思います:)
スティーブン

1
私はコメントしました。そして、はい、素晴らしい仕事です。私はマルボルジが今週続くと予想していた半分でした!
-Veedrac

6
よくやった!TIOはUTF-8を使用しますが、Bashでラップすることにより、クラックを検証できます。tio.run/…必要なのF_ôは、ちなみに他にはないようです。
デニス

1
今、私は再び眠ることができます
フアントニーナ


13

JS(ES6)、Juan Tonina

+0,-0

少し調べて探しましObject.isた。基本的には+0 === -0===それらを数値としてチェックし、0有限であるため、異なるオブジェクトとObject.is見なします。非常にスマートな警官:)+0-0

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


ログインしている間に忍者が手に入れました。
user3033745

くそー、より速く、私はコードを考えて過ごした時間よりも解か:D
フアンTonina

11

Python、Siphor

class A:
    i = True
    def __eq__(self, a):
        self.i = not self.i
        return self.i

a = A()
f(a)

プログラムを終了させるために必要な動作をするように、平等を再定義するだけです。


私はちょうど定義されている可能性が想定ものの__eq__raise...
g.rocket

0:pを返すだけで提出しようとしていた
ジョナサンアラン

@JonathanAllanそれはどのように機能しますか?
g.rocket

1
かなり確信してばかりclass A:__eq__=lambda s,o:0f(A())仕事をしていません。
ジョナサンアラン

1
ああ、否定が必要です> _ <
ジョナサンアラン


8

PHP、Sisyphus

(-0[0)> deal with it=1

parse_str関数は、スペースおよびその他の文字をアンダースコアに変更します。閉じずに配列区切り文字に使用される[を置くと、アンダースコアに変更されますが、次のスペースを変換しないという効果があります(理由はわかりません)。

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


WTF ?! それは非常識です
...-Veedrac

7

JavaScript(Node.js)、Adnan

[]そして動作する[]ようです。私はそれらを含むの束を試してみましたnullundefinedNaN...

[] >= [] && [] <= [] && [] != [] trueと評価されます。

物語の教訓:JavaScriptは奇妙です。

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


はい、配列は単なるオブジェクトです。
Programmer5000

そして、オブジェクトはこれらのタイプの比較のために文字列にキャストされます。
コナーオブライエン

7

JavaScript(ES7)、アーノールド

標準

"8e7" 解決策です

var crack_me = (x=0)=>{for(;~x/x.length**3!=-2962963;);}

var key = "8e7"

crack_me(key)
console.log("stopped :)")

ハック

この数を計算する必要はありません。lengthプロパティを再定義できます

このセット~x/x.length**3!=-2962963false

var crack_me = (x=0)=>{for(;~x/x.length**3!=-2962963;);}

var key = {toString:()=>"2962962",length:"1"}

crack_me(key)
console.log("stopped :)")

オペレーターの優先順位

~ ビット単位ではない最初のものです

** exponentiation 第二

/ division 三番


6

バッシュ、Veedrac

LD_TRACE_LOADED_OBJECTS

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

ld.so(8)マンページから:

LD_TRACE_LOADED_OBJECTS

(任意の値に)設定すると、プログラムldd(1)は通常の実行ではなく、によって実行されるかのように、動的な依存関係をリストします。


これはもっと長くなると思いました!素晴らしい仕事。
-Veedrac

1
@Veedrac:bashを指定したので、静的リンク(たとえばbusybox?)を見つける可能性は低いと思います/bin/yesが、それは可能です。その場合、このenv varは無視されます。
ピーターコーデス

6

Mathematica、ジョンファンミン

Unevaluated@Throw@"hammertime"

これが意図した解決策であるかどうかはわかりませんが#、関数内で参照されるまで評価されない式を渡します。これにより、さらに評価することなく、関数からすぐに戻ります。関数を次のように変更することにより、関数が実際に呼び出されることがわかります(関数を呼び出す前に例外をスローするだけではありません)。

#0[Print@"stop";#;$IterationLimit=∞]&

実際に印刷されます stopエラーをスローする前に出力します。


ビンゴ!(私は実際に行きましたUnevaluated[Abort[]]が、同じことです。)
ジョンファンミン


5

ルビー

exit

改行なし。3.send('exit')確かにに等しくありません5が、実行されますKernel#exitます:

SystemExit例外を発生させることにより、Rubyスクリプトの終了を開始します

これは、呼び出すことが可能ですexit上の3 理由

KernelモジュールはObjectクラスに含まれているため、そのメソッドはすべてのRubyオブジェクトで[プライベートメソッドとして]利用できます。

abort また動作します:

効果的にKernel.exit(false)を呼び出して、すぐに実行を終了します。msgが指定されている場合、終了する前にSTDERRに書き込まれます。


5

JavaScript(Node.js)プログラマー

すでにひびが入っていますが、私とは少し異なります:)警官にコメントするのに十分な担当者がいません。また、フォーマットを修正するために自由に編集してください。最初の投稿はこちらです。

主に__proto__、スローする関数に等しく設定します。プロト用のMozillaページを見ることから取られました。(申し訳ありませんが、低い担当者はリンクを投稿できません。)

x = {}
let No = function () { throw 'halted' }
x.__proto__ = new No()
f = x=>{while(x.__proto__);}

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

編集:いくつかの担当者を得たので、ここにリンクがあります:Mozilla__proto__


私はあなたのために警官にコメントしました。
スティーブン

1
ありがとう!また、すべてのupsに感謝します、私は今コメントできると思います!
Haumed Rahmani

1
PPCG:Dへようこそ
コナーオブライエン


5

R、ヤルコ・ダッベルダム

function(x)if(is.list(x))return(1)

初めて何かを寄付するので、私がフォーマットで犯した間違いを声に出してください。

これが有効であることを確認してください。is.list()の再ラッピングだけですよね?


ちなみに、私は元にコメントする担当者がいないので、それが有効であれば手が高く評価されるでしょう。
CriminallyVulgar

あなたのためにコメントしました。
TheLethalCoder

意図したソリューションではありませんが、機能します。よくやった。
JAD

5

Javascript、プログラマー 5000

最大ストリング長

エンジンがサポートする長さよりも1つ短い文字列を使用します。"h"この文字列に追加すると、エラーがスローされます。オンラインでお試しください!

function getAlmostMaxLenStr() {
  var prevBases = [];
  var base = "a";
  try {
    while(true) {
      prevBases.push(base);
      base += base;
    }
  } catch(e) {}
  for (var i = prevBases.length-1; i>=0; --i) {
    try {
      base += prevBases[i];
    } catch (e) {}
  }
  return base;
}
f(getAlmostMaxLenStr());

クロスオリジンブロック

@ jadkik94からの回答に大きな影響を受けていますが、どこでも動作します。クロスオリジンiframeを作成してから、そのiframeを渡し.contentWindowます。クロスオリジンの安全性により、関数が値を使用しようとすると失敗します。

let f=x=>{
  try {
    console.log(x+"h"); // we don't want to lock up your browser, do we ;)
  } catch (e) { console.log("Halted!\n",e); }
}
let iframe=document.createElement("iframe");
const url = location.host.indexOf("google") === -1 ? "https://google.com" : "https://stackexchange.com";
iframe.src=url;
iframe.onload=a=>f(iframe.contentWindow);
document.body.appendChild(iframe);

プリミティブ値

.toString()回答のバリエーション-これはtoPrimitive代わりに使用します。オブジェクトをプリミティブ値として返しますが、Javascriptはその処理方法を知りません(エラーがスローされます)。オンラインでお試しください!

f({
  [Symbol.toPrimitive](){return {}}
});

いい仕事ですが、まだ意図した解決策ではありません!非常に賢い!
Programmer5000

4

Node.js、Adnan

{} そして {}又は任意の2つのオブジェクトは、2つの入力です。私はこれがどのように機能するかさえ理解していません。

JSの素晴らしいオブジェクト比較ロジックは次のとおりです。

console.log({} == {});
console.log({} === {});
console.log({} > {});
console.log({} < {});
console.log(!!{});

console.log({} >= {});
console.log({} <= {});


うん、それは意図された解決策でした:)
アドナン


4

Javascript(node.jsではありません)、プログラマー5000

new Setはfromからの固有のプロトタイプではないため、toStringを持たないオブジェクトを作成するため、これは追加できませんObject

入力:

new Set()

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


P:これは意図したソリューションは、私がこれからの私の頭の袋にそれをしておこう、おそらくだった
スティーブン・

申し訳ありませんが、これは私には機能しないようです。オンラインでお試しください!
Haumed Rahmani

@HaumedRahmaniがオンライン試用ボタンを追加しました。バベルではなく、クモザルを使用しました。
グラントデイビス

意図したソリューションではありませんが、素晴らしい仕事です!
Programmer5000



4

Python 2、Foon

__import__("os")._exit(0)

それは基本的に錫に何を言っているのか。

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


おもしろいことに、TIOでこれがタイムアウトになりました。Windows環境下で(特にwinptyのpython inputbad.pyとラインに貼り付けて)必要に応じて、それが終了しない...と、ええ、驚くことではないが、私のschtictは、「Pythonの2の下の入力はボンネットの下にevalをする」ビットを利用した
FOON

@Foonうーん、私にとってはTIOでうまく機能しています。回答のリンクを参照してください。
-Veedrac

奇妙な...私はプレイをヒットし、TIOリンクに入力を入力しなければならず、それを認識していなかった
-Foon

私はこれがすべての pythonの提出をクラックすることを確信しています
。– enderland

@enderland彼らがあなたの入力を評価する場合のみ、それらのほとんどは評価しません。
Veedrac


4

Python 3、シファー

これは楽しかった。我々は確認する必要がありtype(x) != str、我々はの戻り値を制御する必要があるので、チェックパスtype()。私たちは、オーバーライドする必要が__class__属性をして拡張するカスタムオブジェクト、と交換しtypeている、__ne__メソッドは常にfalseを返すものに置き換え。これにより、型チェックに合格しoますが、strではないため、検索は失敗します。

class m(type):
    def __ne__(a,b):
        return False
class c:pass
o=c()
o.__class__=m("",(c,),{})
f(o)

サイトへようこそ!:)
DJMcMayhem

4

C#、TheLethalCoder

System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]

または、その他のNULL可能クラス。



3

JS(ES6)

"   "

コードが10未満の文字はすべて機能します。tab上記の文字を使用しましたが、SEはスペースに変換します。



申し訳ありません:(プラス私はそれが文字列であるためにあなたがそれを囲む引用符を必要とすると思う
スティーブン

@ programmer5000、だから私は見る:(
シャギー

問題ありません、@ StepHen。ゲームの性質。引用は暗黙的であると考えましたが、編集します
シャギー

判決はあるが、何知らん@Shaggy I f(<tab>)有効な構文(空の入力)であり、我々は区別する必要があると思いますf(1)し、f("1")とにかくを
スティーブン



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