Nó sẽ dừng lại? (Cướp)


46

Đây là chủ đề của bọn cướp. Chủ đề của cảnh sát là ở đây .

Thách thức của bạn là bẻ khóa đệ trình của cảnh sát bằng cách tìm một đầu vào khiến nó dừng lại. Bạn không cần phải tìm hiểu lý do tại sao, hoặc tất cả các yếu tố đầu vào khiến nó dừng lại nếu có nhiều hơn một hoặc đầu vào mà cảnh sát dự định, chỉ cần một đầu vào sẽ làm.

Khi bạn đã bẻ khóa một bài gửi, hãy gửi một liên kết đến nó trong một bình luận hoặc chỉnh sửa bài đăng của cảnh sát. Bạn cũng có thể gắn cờ bài đăng của mình cho một mod để chỉnh sửa nó trong bài đăng của cảnh sát. Ngoài ra, đăng đầu vào được sử dụng và một liên kết đến bài đăng của cảnh sát trong một câu trả lời trong chủ đề này. Tên cướp nào phá được nhiều bài nhất sẽ thắng.

Nhiều người có thể đăng các vết nứt lên cùng một cảnh sát, miễn là chúng khác nhau.

(Nếu SE chuyển đổi câu trả lời trùng lặp của bạn thành một nhận xét, bạn có thể muốn bỏ phiếu cho yêu cầu tính năng này )


Tìm kiếm đệ trình không bị theo dõi?

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
Có khác nhau có nghĩa là đầu vào khác nhau (giả sử, tất cả các đầu vào kết thúc bằng 2 lần bẻ khóa của cảnh sát - bạn có thể những người khác nhau đăng các số khác nhau kết thúc bằng 2 không?) Hoặc các họ đầu vào khác nhau hoặc các loại đầu vào khác nhau?
Stephen

1
Nhiều người có thể đăng các vết nứt lên cùng một cảnh sát đệ trình ... Vui lòng xác định khác nhau .
Dennis

Câu trả lời:


49

Malbolge, Doorknob

Dùng thử trực tuyến (Cảm ơn Dennis !)

Đầu vào cho Windows: F_⌠1234567890

Nhập liệu trên hệ thống dựa trên Linux bằng ISO-8559-1: F_ô1234567890

Trọng tâm của cách chương trình Malbolge hoạt động là nó phụ thuộc vào hành vi của trình thông dịch Malbolge gây ra một vòng lặp vô hạn nếu nó gặp bất kỳ lệnh nào không nằm trong khoảng từ 33 đến 126. Chương trình được xây dựng sao cho đầu vào của bạn cho phép bạn sửa đổi một hướng dẫn duy nhất.

Tôi đã sửa đổi trình thông dịch để bỏ trạng thái bộ nhớ chương trình khi bắt đầu thực thi và cũng tạo ra mã nguồn 'chuẩn hóa' có dạng danh sách các mã op sẽ được chạy trong quá trình thực thi chương trình. Với thông tin đó, bạn có thể (từ từ) xác định rằng mặc dù chương trình chỉ lấy 13 đầu vào, đầu vào thứ 1 và thứ 3 thực sự quan trọng.

Nhìn qua mã thông thường và kết xuất bộ nhớ (và một chút trợ giúp của trình gỡ lỗi) tôi đã nghĩ ra những điều sau:

a = op (đầu vào 1, 29524)

b = op (đầu vào 3, a)

c = op (486, b)

d = op (c, 37)

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

e phải từ 33 đến 126

Trường hợp opđược gọi là "op" tritwise được mô tả trong đặc tả. Sử dụng thông tin này, bạn có thể viết một chương trình đơn giản lặp lại các đầu vào có thể (0 đến 255) và tìm tất cả các giải pháp đáp ứng các tiêu chí trên. Tôi đã tìm thấy 2219 giải pháp khả thi, một số giải pháp có thể sẽ không hoạt động (bạn không thể nhập các ký tự được yêu cầu). Cụ thể các đầu vào trên được dựa trên giải pháp:

(Input 1 = 70, Input 3 = 244)


Tôi không có đại diện để bình luận bẻ khóa trên bài viết của cảnh sát. Ai đó có thể làm điều đó cho tôi?
KBRON111

4
Chào mừng đến với PPCG! Làm tốt lắm! Tôi nghĩ với vết nứt này, bạn sẽ sớm có đủ đại diện :)
Stephen

1
Tôi nhận xét trên. Và vâng, công việc tuyệt vời; Tôi đã mong đợi một nửa Malbolge sẽ kéo dài trong tuần!
Veedrac

6
Công việc tốt đẹp! TIO sử dụng UTF-8, nhưng bằng cách gói nó vào Bash, vết nứt của bạn vẫn có thể được xác minh. Nhân tiện, bạn dường như không cần bất cứ thứ gì ngoài F_ônhân tiện.
Dennis

1
Bây giờ tôi có thể ngủ lại
Juan Tonina


13

JS (ES6), Juan Tonina

+0,-0

Mất một chút tìm kiếm Object.isđể tìm. Về cơ bản, +0 === -0===kiểm tra chúng là số, và 0là hữu hạn, nhưng Object.isnhìn +0-0như các đối tượng khác nhau. Cảnh sát rất thông minh :)

Hãy thử trực tuyến!


Ninja đã nhận nó trong khi tôi đăng nhập. Bắn.
dùng3033745

Chết tiệt, giải quyết nhanh hơn thời gian tôi nghĩ về mật mã: D
Juan Tonina

11

Python, Siphor

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

a = A()
f(a)

Chúng tôi chỉ xác định lại sự bình đẳng để hành xử chính xác theo yêu cầu để khiến chương trình chấm dứt.


Mặc dù tôi cho rằng tôi có thể vừa xác định __eq__raise...
g.rocket

Tôi chuẩn bị nộp chỉ khi trở về 0: p
Jonathan Allan

@Jonathan ALLan Nó hoạt động thế nào?
g.rocket

1
Khá chắc chắn chỉ class A:__eq__=lambda s,o:0f(A())làm công việc.
Jonathan Allan

1
À đúng rồi cần phủ định> _ <
Jonathan Allan


8

PHP, Sisyphus

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

Hàm parse_str thay đổi khoảng trắng và các ký tự khác thành dấu gạch dưới. Nếu bạn đặt [được sử dụng cho dấu phân cách mảng mà không đóng, nó sẽ thay đổi thành dấu gạch dưới nhưng có tác dụng không dịch các khoảng trắng sau (tôi không biết tại sao).

Hãy thử trực tuyến!


WTF?! Điều đó thật điên rồ ...
Veedrac

7

JavaScript (Node.js), Ad Nam

[][]dường như làm việc Tôi đã thử một bó của họ bao gồm null, undefined, NaN...

[] >= [] && [] <= [] && [] != [] đánh giá là đúng.

Đạo đức của câu chuyện: JavaScript thật kỳ lạ .

Hãy thử trực tuyến!


Đúng, mảng chỉ là đối tượng.
lập trình

Và các đối tượng được truyền thành chuỗi cho các loại so sánh này.
Conor O'Brien

7

JavaScript (ES7), Arnauld

Tiêu chuẩn

"8e7" là giải pháp

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

var key = "8e7"

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

Gian lận

Không cần tính số này, chúng tôi có thể xác định lại lengthtài sản

Cái này đặt ~x/x.length**3!=-2962963thànhfalse

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

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

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

Ưu tiên người vận hành

~ bitwise không phải là đầu tiên

** exponentiation thứ hai

/ division ngày thứ ba


6

Bash, Veedrac

LD_TRACE_LOADED_OBJECTS

Hãy thử trực tuyến!

Từ ld.so(8)trang hướng dẫn:

LD_TRACE_LOADED_OB DỰ ÁN

Nếu được đặt (thành bất kỳ giá trị nào), sẽ khiến chương trình liệt kê các phụ thuộc động của nó, như thể chạy theo ldd(1), thay vì chạy bình thường.


Tôi nghĩ rằng điều này sẽ kéo dài lâu hơn! Công việc tuyệt vời
Veedrac

1
@Veedrac: Tôi đoán vì bạn đã chỉ định bash, không chắc là bạn sẽ tìm thấy một liên kết tĩnh (ví dụ: busybox?) /bin/yes, Nhưng điều đó là có thể, trong trường hợp này, env var sẽ bị bỏ qua.
Peter Cordes

6

Toán học, JungHwan Min

Unevaluated@Throw@"hammertime"

Không biết đây có phải là giải pháp dự định hay không, nhưng nó chuyển qua một biểu thức không được đánh giá cho đến khi nó được tham chiếu như #bên trong hàm, điều này sẽ khiến nó quay trở lại từ hàm ngay lập tức mà không cần đánh giá thêm. Bạn có thể thấy rằng hàm thực sự được gọi (thay vì chỉ ném ngoại lệ trước khi gọi hàm) bằng cách thay đổi hàm thành:

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

Mà thực sự sẽ in stoptrước khi ném lỗi.


Chơi lô tô! (Tôi thực sự đã đi Unevaluated[Abort[]], nhưng điều tương tự.)
JungHwan Min


5

Hồng ngọc

exit

không có dòng mới. 3.send('exit')chắc chắn không bằng 5, nhưng nó thực thi Kernel#exit:

Bắt đầu chấm dứt tập lệnh Ruby bằng cách tăng ngoại lệ SystemExit

Có thể gọi exittiếp 3 :

Mô-đun Kernel được bao gồm bởi lớp Object, vì vậy các phương thức của nó có sẵn trong mọi đối tượng Ruby [dưới dạng phương thức riêng tư].

abort cũng hoạt động:

Chấm dứt thực thi ngay lập tức, hiệu quả bằng cách gọi Kernel.exit (false). Nếu thông báo được đưa ra, nó được ghi vào STDERR trước khi kết thúc.


5

JavaScript (Node.js) , lập trình viên5000

Đã bị bẻ khóa, nhưng của tôi hơi khác một chút :) Đừng có đủ đại diện để bình luận trong cảnh sát. Cũng cảm thấy tự do để chỉnh sửa để sửa định dạng, bài viết đầu tiên của tôi ở đây.

Chủ yếu tôi đặt __proto__bằng một hàm ném. Lấy từ việc nhìn vào trang Mozilla cho proto. (Xin lỗi, đại diện thấp, không thể đăng một liên kết.)

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

Hãy thử trực tuyến!

EDIT: Có một số đại diện, vì vậy đây là liên kết: Mozilla__proto__


Tôi nhận xét về cảnh sát cho bạn.
Stephen

1
Cảm ơn! Cũng cảm ơn tất cả các up, đoán tôi có thể bình luận ngay bây giờ!
Haumed Rahmani

1
Chào mừng bạn đến với PPCG: D
Conor O'Brien


5

R, Jarko Dubbeldam

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

Lần đầu tiên đóng góp bất cứ điều gì, vì vậy hãy gọi ra bất kỳ sai lầm nào tôi đã làm ở định dạng.

Khá chắc chắn rằng điều này là hợp lệ. Chỉ là một bản phát hành lại của is.list (), phải không?


Ngẫu nhiên, tôi không có đại diện để nhận xét về bản gốc nên một bàn tay sẽ được đánh giá cao nếu nó hợp lệ.
CriminallyVulgar

Bình luận cho bạn.
TheLethalCoder

Không phải là giải pháp dự định, nhưng hoạt động. Làm tốt lắm.
JAD

5

Javascript, lập trình viên5000

Độ dài chuỗi tối đa

Sử dụng một chuỗi có độ dài ít hơn một chuỗi so với công cụ của bạn hỗ trợ. Khi thêm "h"vào chuỗi này, một lỗi được đưa ra. Hãy thử trực tuyến!

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());

Khối nguồn gốc chéo

Lấy cảm hứng mạnh mẽ từ câu trả lời từ @ jadkik94 , nhưng hoạt động ở mọi nơi. Tạo iframe có nguồn gốc chéo, sau đó vượt qua .contentWindowiframe đã nói. Điều này không thành công khi hàm cố gắng sử dụng giá trị do an toàn nguồn gốc chéo.

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);

Giá trị nguyên thủy

Biến thể của .toString()câu trả lời - điều này chỉ sử dụng toPrimitivethay thế. Nó trả về một đối tượng là giá trị nguyên thủy, mà Javascript không biết cách xử lý (vì vậy nó sẽ gây ra lỗi). Hãy thử trực tuyến!

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

Công việc tốt, nhưng vẫn không có ý định giải pháp! Rất thông minh!
lập trình

4

Node.js, Ad Nam

{}{}hoặc bất kỳ 2 đối tượng là hai đầu vào. Tôi thậm chí không hiểu làm thế nào điều này hoạt động.

Đây là đối tượng tuyệt vời của JS so sánh logic:

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

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


Yup, đó là giải pháp dự định :)
Adnan


4

Javascript (KHÔNG node.js) , lập trình viên5000

Điều này không thể được thêm vào bởi vì nó tạo ra một đối tượng không có toString vì một Setnguyên mẫu mới không có từ nguyên mẫu Object.

đầu vào:

new Set()

Hãy thử trực tuyến!


Đây có lẽ là giải pháp dự định, từ giờ tôi sẽ giữ nó trong túi của mình: P
Stephen

Xin lỗi điều này dường như không làm việc cho tôi? Hãy thử trực tuyến!
Haumed Rahmani

@HaumedRahmani đã thêm nút thử trực tuyến. Tôi đã sử dụng khỉ nhện, không phải babel.
Cấp Davis

Không phải là giải pháp dự định, nhưng công việc tốt đẹp!
lập trình



4

Con trăn 2, Foon

__import__("os")._exit(0)

Những gì nó nói trên tin, về cơ bản.

Hãy thử trực tuyến.


Thật thú vị, trên TIO lần này ra cho tôi; trong Windows (cụ thể là winpty python inputbad.py và dán vào dòng), nó thoát ra như mong muốn ... và vâng, không ngạc nhiên khi schtict của tôi đã khai thác "đầu vào dưới Python 2 không hoạt động dưới bit"
Foon

@Foon Hmm, nó hoạt động tốt trên TIO cho tôi. Xem liên kết trong câu trả lời.
Veedrac

Thật kỳ lạ ... Tôi phải nhấn play và sau đó nhập dữ liệu vào liên kết TIO của tôi và không nhận ra điều đó
Foon

Tôi khá chắc chắn rằng điều này sẽ phá vỡ mọi đệ trình trăn ..
enderland

@enderland Chỉ khi họ đánh giá đầu vào của bạn, mà hầu hết trong số họ không.
Veedrac


4

Python 3, Siphor

Đây là niềm vui Chúng ta cần thực hiện type(x) != strkiểm tra vượt qua, vì vậy chúng ta cần kiểm soát giá trị trả về của type(). Chúng ta phải ghi đè __class__thuộc tính và thay thế nó bằng một đối tượng tùy chỉnh, mở rộng type, có __ne__phương thức được thay thế bằng một phương thức luôn trả về false. Điều này làm cho nó vượt qua kiểm tra loại, nhưng tìm kiếm sẽ thất bại vì okhông phải là một str.

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

Chào mừng đến với trang web! :)
DJMcMayhem

4

C #, TheLethalCoder

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

Hoặc bất kỳ lớp nullable khác.



3

Mã số (ES6)

"   "

Bất kỳ ký tự nào có mã dưới 10 sẽ hoạt động; Tôi đã sử dụng một tabký tự ở trên, SE chuyển đổi thành khoảng trắng.



Xin lỗi :( cộng với tôi nghĩ bạn cần trích dẫn xung quanh nó để nó là một chuỗi
Stephen

@ lập trình5000, vì vậy tôi thấy :(
Shaggy

Không có vấn đề, @StepHen; bản chất của trò chơi. Tôi đã trích dẫn để ẩn, nhưng tôi sẽ chỉnh sửa chúng.
Shaggy

@Shaggy Tôi không biết phán quyết là gì, nhưng f(<tab>)là cú pháp hợp lệ (đầu vào trống) và chúng tôi phải phân biệt giữa f(1)f("1")dù sao đi nữa
Stephen


3

CQuents, Bước Hen

Bất cứ điều gì theo sau là một khoảng trắng và một số nguyên dương. Không gian ngăn cách các đầu vào và đầu vào thêm trở thành số của thuật ngữ đầu ra.

Hãy thử trực tuyến!


Tôi vừa mới đăng bài a 1! Bạn ninja tôi: /
Ông Xcoder

@ Mr.Xcoder Tôi đã gõ cái này trên điện thoại di động, hy vọng rằng không ai sẽ ninja tôi: P
PurkkaKoodari

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.