มันจะหยุดหรือไม่ (โจร)


46

นี่คือเธรดของโจร ด้ายตำรวจเป็นที่นี่

ความท้าทายของคุณคือการแตกการส่งของตำรวจโดยการค้นหาอินพุตที่ทำให้หยุด คุณไม่จำเป็นต้องค้นหาสาเหตุหรืออินพุตทั้งหมดที่ทำให้หยุดถ้ามีมากกว่าหนึ่งหรืออินพุตตำรวจตั้งใจเพียงหนึ่งอินพุตจะทำ

เมื่อคุณทำการส่งแตกให้โพสต์ลิงค์ในความคิดเห็นหรือแก้ไขโพสต์ของตำรวจ คุณสามารถตั้งค่าสถานะการส่งของคุณสำหรับ 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 ได้ไหม?) หรือครอบครัวของอินพุตที่แตกต่างกัน
Stephen

1
ผู้ใช้หลายคนสามารถโพสต์รอยแตกที่จะส่งตำรวจเดียวกัน ...โปรดกำหนดที่แตกต่างกัน
Dennis

คำตอบ:


49

Malbolge, Doorknob

ลองออนไลน์ (ขอบคุณเดนนิส !)

อินพุตสำหรับ Windows: F_⌠1234567890

อินพุตบนระบบที่ใช้ Linux โดยใช้ ISO-8559-1: F_ô1234567890

หัวใจของการทำงานของโปรแกรม 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"op" ที่เรียกว่า tritwise อยู่ที่ไหนที่อธิบายไว้ในข้อมูลจำเพาะ การใช้ข้อมูลนี้คุณสามารถเขียนโปรแกรมอย่างง่ายซึ่งวนซ้ำอินพุตที่เป็นไปได้ (0 ถึง 255) และค้นหาวิธีแก้ปัญหาทั้งหมดที่ตรงตามเกณฑ์ข้างต้น ฉันพบวิธีแก้ปัญหาที่เป็นไปได้ 2219 ข้อซึ่งบางวิธีอาจไม่ใช่วิธีแก้ปัญหาที่ใช้งานได้ (คุณไม่สามารถป้อนอักขระที่ต้องการได้) อินพุตข้างต้นจะขึ้นอยู่กับวิธีการแก้ปัญหา:

(Input 1 = 70, Input 3 = 244)


ฉันไม่มีตัวแทนในการแสดงความคิดเห็นแตกในโพสต์ตำรวจ มีคนทำอย่างนั้นกับฉันได้ไหม
KBRON111

4
ยินดีต้อนรับสู่ PPCG! เยี่ยมมาก! ฉันคิดว่าด้วยรอยแตกนี้คุณจะมีตัวแทนมากพอ :)
สตีเฟ่น

1
ฉันแสดงความคิดเห็นทั่ว และใช่งานที่ยอดเยี่ยม; ฉันคาดหวังว่าครึ่งหนึ่งของ Malbolge เมื่อสัปดาห์ที่แล้ว!
Veedrac

6
เยี่ยมมาก! TIO ใช้ UTF-8 แต่โดยการห่อไว้ใน Bash รอยแตกของคุณยังสามารถตรวจสอบได้ tio.run/…คุณไม่ต้องการอะไรนอกจากจะเป็นไปF_ôตามนั้น
Dennis

1
ตอนนี้ฉันสามารถนอนหลับได้อีกครั้ง
Juan Tonina

16

JavaScript (ในเบราว์เซอร์)

document.all

นี่เป็นสิ่งที่ผิดพลาดอย่างน่าประหลาดใจ

แก้ไข: ทำไมเป็นdocument.allเท็จ ?


4
ฉันพูดไม่ออก
Dennis

3
อ๊ะ ... จาวาสคริปต์ที่ทุกอย่างแปลก
Juan Tonina

1
ใช่ นั่นเป็นคำตอบเดียวที่ถูกต้องที่นี่!
tsh

13

JS (ES6), Juan Tonina

+0,-0

ใช้เวลาดูเล็กน้อยในObject.isการค้นหา โดยทั่วไป+0 === -0ตั้งแต่===การตรวจสอบพวกเขาเป็นตัวเลขและ0มี จำกัด แต่Object.isเห็น+0และ-0เป็นวัตถุที่แตกต่างกัน ตำรวจที่ฉลาดมาก :)

ลองออนไลน์!


Ninja ได้มาในขณะที่ฉันกำลังเข้าสู่ระบบยิง
3033745

แก้ไขได้เร็วกว่าเวลาที่ฉันคิดถึงโค้ด: 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)

เราเพิ่งนิยามความเท่าเทียมกันใหม่เพื่อให้ทำงานตามที่ต้องการเพื่อให้โปรแกรมหยุดทำงาน


แม้ว่าฉันคิดว่าฉันสามารถกำหนด__eq__ให้raise...
g.rocket

ฉันกำลังจะส่งโดยเพิ่งกลับมา0: p
Jonathan Allan

@JonathanAllan มันทำงานยังไง?
g.rocket

1
ค่อนข้างมั่นใจclass A:__eq__=lambda s,o:0และf(A())ทำงานได้ดี
Jonathan Allan

1
ใช่แล้วต้องมีการปฏิเสธ> _ <
Jonathan Allan


8

PHP, Sisyphus

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

ฟังก์ชัน parse_str เปลี่ยนช่องว่างและอักขระอื่น ๆ เป็นขีดล่าง หากคุณใส่ [ใช้สำหรับตัวคั่น Array โดยไม่ปิดจะเป็นการเปลี่ยนเป็นขีดล่าง แต่มีผลที่จะไม่แปลช่องว่างต่อไปนี้ (ฉันไม่ทราบสาเหตุ)

ลองออนไลน์!


WTF ?! นั่นมันบ้า ...
Veedrac

7

JavaScript (Node.js), Adnan

[]และ[]ดูเหมือนว่าจะทำงาน ฉันพยายามพวงของพวกเขารวมทั้งnull, undefined, NaN...

[] >= [] && [] <= [] && [] != [] ประเมินเป็นจริง

คุณธรรมของเรื่อง: JavaScript เป็นที่แปลก

ลองออนไลน์!


ใช่อาร์เรย์เป็นเพียงวัตถุ
programmer5000

และวัตถุที่ถูกโยนให้สตริงสำหรับการเปรียบเทียบประเภทนี้
Conor O'Brien

7

JavaScript (ES7), Arnauld

มาตรฐาน

"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!=-2962963เป็นfalse

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

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

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

ลำดับความสำคัญของผู้ประกอบการ

~ bitwise ไม่ใช่ครั้งแรก

** exponentiation ที่สอง

/ division ที่สาม


6

Bash, Veedrac

LD_TRACE_LOADED_OBJECTS

ลองออนไลน์!

จากld.so(8)manpage:

LD_TRACE_LOADED_OBJECTS

หากตั้งค่า (เป็นค่าใด ๆ ) ทำให้โปรแกรมแสดงรายการการพึ่งพาแบบไดนามิกของมันราวกับว่าทำงานโดยldd(1)แทนที่จะทำงานตามปกติ


ฉันคิดว่านี่จะนานกว่านี้! ทำงานได้ดีมาก
Veedrac

1
@Veedrac: ฉันเดาว่าเมื่อคุณระบุทุบตีมันไม่น่าเป็นไปได้ที่คุณจะพบการเชื่อมโยงแบบคงที่ (เช่น busybox?) /bin/yesแต่เป็นไปได้ซึ่งในกรณีนี้ env var จะถูกละเว้น
Peter Cordes

6

Mathematica, JungHwan Min

Unevaluated@Throw@"hammertime"

ไม่มีเงื่อนงำว่านี่เป็นทางออกที่ตั้งใจหรือไม่ แต่มันผ่านไปในนิพจน์ที่ไม่ได้รับการประเมินจนกว่าจะมีการอ้างอิงว่า#ภายในฟังก์ชั่นซึ่งจะทำให้มันกลับมาจากฟังก์ชั่นทันทีโดยไม่ต้องทำการประเมินเพิ่มเติมใด ๆ คุณสามารถเห็นได้ว่าฟังก์ชั่นนั้นถูกเรียกจริง ๆ (แทนที่จะแค่โยนข้อยกเว้นก่อนที่จะเรียกใช้ฟังก์ชั่น) โดยเปลี่ยนฟังก์ชั่นเป็น:

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

ซึ่งแน่นอนจะพิมพ์stopก่อนที่จะโยนข้อผิดพลาด


บิงโก! (จริง ๆ แล้วฉันต้องการUnevaluated[Abort[]]แต่สิ่งเดียวกัน)
จองฮมินมิน


5

ทับทิม

exit

ไม่มี newline 3.send('exit')แน่นอนไม่เท่ากับ5แต่ดำเนินการKernel#exit:

เริ่มต้นการยกเลิกสคริปต์ Ruby โดยเพิ่มข้อยกเว้น SystemExit

มันเป็นไปได้ที่จะเรียกexitใน3 เพราะ :

โมดูลเคอร์เนลถูกรวมไว้ในคลาสอ็อบเจ็กต์ดังนั้นเมธอดจะพร้อมใช้งานในทุกอ็อบเจ็กต์ Ruby [เป็นเมธอดส่วนตัว]

abort ยังใช้งานได้:

ยุติการประมวลผลทันทีโดยเรียก Kernel.exit (false) อย่างมีประสิทธิภาพ หากได้รับ msg มันจะถูกเขียนไปยัง STDERR ก่อนที่จะยุติ


5

JavaScript (Node.js) , programmer5000

แตกแล้ว แต่ของฉันแตกต่างออกไปเล็กน้อย :) อย่ามีตัวแทนมากพอที่จะแสดงความคิดเห็นในตำรวจ โพสต์ครั้งแรกที่นี่ด้วย

ส่วนใหญ่ฉันจะตั้งค่า__proto__เท่ากับฟังก์ชั่นที่พ่น นำมาจากการดูที่หน้า Mozilla สำหรับโปรโต (ขออภัยตัวแทนต่ำไม่สามารถโพสต์ลิงก์ได้)

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

ลองออนไลน์!

แก้ไข: มีตัวแทนบางส่วนดังนั้นนี่คือลิงค์: Mozilla__proto__


ฉันแสดงความคิดเห็นกับตำรวจสำหรับคุณ
Stephen

1
ขอบคุณ! นอกจากนี้ขอขอบคุณทุกท่านที่คาดหวังว่าฉันสามารถแสดงความคิดเห็นได้ในตอนนี้!
Haumed Rahmani

1
ยินดีต้อนรับสู่ PPCG: D
Conor O'Brien


5

R, Jarko Dubbeldam

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

เป็นครั้งแรกที่มีส่วนร่วมในสิ่งใดดังนั้นโปรดแจ้งข้อผิดพลาดใด ๆ ที่ฉันทำในรูปแบบ

ค่อนข้างแน่ใจว่าถูกต้อง เพียงแค่การปรับปรุงใหม่ของ is.list () ใช่ไหม


อนึ่งฉันไม่มีตัวแทนที่จะแสดงความคิดเห็นเกี่ยวกับต้นฉบับดังนั้นมือจะได้รับการชื่นชมถ้ามันถูกต้อง
CriminallyVulgar

แสดงความคิดเห็นสำหรับคุณ
TheLethalCoder

ไม่ใช่โซลูชันที่ตั้งใจ แต่ทำงานได้ ทำได้ดีมาก
JAD

5

Javascript, programmer5000

ความยาวสตริงสูงสุด

ใช้สตริงที่มีความยาวน้อยกว่าที่เครื่องยนต์ของคุณรองรับ เมื่อเพิ่ม"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 ข้ามจุดกำเนิดจากนั้นส่งผ่าน.contentWindowiframe ที่กล่าวมา สิ่งนี้จะล้มเหลวเมื่อฟังก์ชันพยายามใช้ค่าเนื่องจากความปลอดภัยข้ามทาง

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 เป็นสองอินพุต ฉันไม่เข้าใจด้วยซ้ำว่าวิธีการนี้ทำงานอย่างไร

ต่อไปนี้เป็นวัตถุที่น่าอัศจรรย์ของ JS เปรียบเทียบ logics:

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

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


Yup ว่าเป็นทางออกที่ตั้งใจ :)
Adnan

4

JavaScript (Babel Node) , Conor O'Brien

(โพสต์ใหม่ใส่ตำรวจโดยไม่ตั้งใจ) ไม่แน่ใจว่ามีจุดประสงค์อะไร แต่เป็นทศนิยมที่เป็นบวกซึ่งไม่ได้มีขนาดใหญ่มาก

นอกจากนี้ฉันคิดว่าฉันยังไม่สามารถแสดงความคิดเห็นใน Cops

f(0.1)
console.log('done')

ลองออนไลน์!


ลืมเกี่ยวกับสิ่งนั้นเช่นกันสิ่งที่ดี
Conor O'Brien

4

Javascript (ไม่ใช่ node.js) , programmer5000

นี้ไม่สามารถเพิ่มเพราะมันสร้างวัตถุที่ไม่มี toString เพราะใหม่ไม่ได้ต้นแบบจากธรรมชาติจากSetObject

การป้อนข้อมูล:

new Set()

ลองออนไลน์!


นี่อาจเป็นทางออกที่ตั้งใจไว้ฉันจะเก็บมันไว้ในกระเป๋าหัวของฉันนับจากนี้ไป: P
Stephen

ขออภัยนี่ดูเหมือนจะไม่เหมาะกับฉันใช่ไหม ลองออนไลน์!
Haumed Rahmani

@HaumedRahmani เพิ่มปุ่มลองออนไลน์ ฉันใช้ลิงแมงมุมไม่ใช่บาเบล
Grant Davis

ไม่ใช่ทางออกที่ตั้งใจ แต่เป็นงานที่ดี!
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

ฉันค่อนข้างแน่ใจว่าเรื่องนี้จะแตกทุก ๆไพ
ธ อน

@enderland เฉพาะในกรณีที่พวกเขาประเมินอินพุตของคุณซึ่งส่วนใหญ่ไม่ได้
Veedrac


4

Python 3, Siphor

มันสนุกมาก เราจำเป็นต้องให้ผ่านการตรวจสอบดังนั้นเราจึงจำเป็นต้องควบคุมค่าตอบแทนของtype(x) != str type()เราต้องแทนที่__class__คุณลักษณะและแทนที่ด้วยวัตถุที่กำหนดเองที่ขยายtypeซึ่งมี__ne__วิธีการแทนที่ด้วยหนึ่งที่มักจะส่งกลับเท็จ สิ่งนี้ทำให้มันผ่านการตรวจสอบประเภท แต่การค้นหาจะล้มเหลวเพราะoไม่ใช่ str

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

ยินดีต้อนรับสู่เว็บไซต์! :)
DJMcMayhem


3

จอตา

ขึ้นบรรทัดใหม่ตามด้วย1ผลงาน ฉันพบมันทันที


1

ลองออนไลน์


นาทีโดย
นินจา

@Cowsquack คำถามที่กล่าวว่าอนุญาตให้มีการแคร็กหลายรายการสำหรับโพสต์ตำรวจเดียวกัน
mbomb007

ฉันรู้ว่าฉันควรลบบรรทัดใหม่ออกจากอินพุตเป็นขั้นตอนแรก
PunPun1000

3

JS (ES6)

"   "

อักขระใด ๆ ที่มีรหัสน้อยกว่า 10 ควรทำงานได้ ฉันใช้tabตัวละครด้านบนซึ่ง SE แปลงเป็นช่องว่าง



ขอโทษ :( บวกฉันคิดว่าคุณจะต้องใส่เครื่องหมายอัญประกาศรอบตัวเพื่อให้เป็นสตริง
Stephen

@ programmer5000 ดังนั้นฉันเห็น :(
Shaggy

ไม่มีปัญหา @StepHen; ลักษณะของเกม ฉันใช้คำพูดเป็นนัย แต่ฉันจะแก้ไขมัน
Shaggy

@Shaggy ฉันไม่ทราบว่าการพิจารณาคดีคืออะไร แต่f(<tab>)เป็นไวยากรณ์ที่ถูกต้อง (การป้อนข้อมูลที่ว่างเปล่า) และเราจะต้องแยกความแตกต่างระหว่างf(1)และf("1")ต่อไป
Stephen


3

cQuents, Step Step

สิ่งใดก็ตามตามด้วยช่องว่างและจำนวนเต็มบวก ช่องว่างแยกอินพุตและอินพุตพิเศษจะกลายเป็นจำนวนคำศัพท์ไปยังเอาต์พุต

ลองออนไลน์!


ฉันเพิ่งจะโพสต์a 1! คุณนินจาฉัน: /
นาย Xcoder

@ Mr.Xcoder ฉันพิมพ์มันบนมือถือโดยหวังว่าจะไม่มีใครนินจาฉัน: P
PurkkaKoodari

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.