Crash IRB (Ruby แบบโต้ตอบ)


18

Ruby มาพร้อมกับ REPL ในตัวซึ่งค่อนข้างมีประโยชน์

สกรีนช็อตของ IRB

ความท้าทายของคุณคือการชนมันในจำนวนน้อยที่สุดของรหัส!

คำจำกัดความของ "crash" คือ "ทำให้มันออกในแบบที่ไม่ได้ตั้งใจ " ซึ่งหมายความว่าexit, quit, abort, irb_exit, irb_quit, et อัล ไม่ใช่คำตอบที่ถูกต้อง

นอกจากนี้คุณต้องไม่ก่อให้เกิดผลข้างเคียงใด ๆ กับส่วนอื่น ๆ ของระบบ ตัวอย่างเช่น`rm -rf /`ไม่ถูกต้องเช่นกัน

เวอร์ชัน 1.9.3 หรือสูงกว่าใด ๆ ที่ถูกต้อง หากรหัสของคุณใช้งานได้กับทับทิมเฉพาะรุ่นเท่านั้นคุณสามารถระบุได้ในคำตอบ

ข้อ จำกัด ขั้นสุดท้ายคือคุณไม่สามารถพึ่งพาอัญมณีใด ๆ

นี่คือดังนั้นรหัสที่สั้นที่สุดที่เกิดปัญหา IRB จะชนะ!


ฉันสามารถฮาเซลนักเขียนบทละครได้มั้ย?
Digital Trauma

3
ว้าว. ฉันไม่รู้ทับทิมและหลังจากอ่านคำตอบเหล่านี้ฉันจะไม่เรียนรู้เลย
izabera

"คำจำกัดความของ 'ความผิดพลาด' คือ 'ทำให้มันออกไปในทางที่ไม่ตั้งใจ'" เราควรจะเขียนโค้ดที่ตั้งใจจะทำสิ่งที่ไม่ตั้งใจได้อย่างไร? ฉันโหวตให้ปิดอย่างไม่ชัดเจนในสิ่งที่คุณถาม
msh210

คำตอบ:


6

5 ตัวอักษร

ENV=0

(ได้แรงบันดาลใจจากคำตอบของ@daniero )


ไม่ได้ผลสำหรับฉัน:irb(main):001:0> ENV=0 (irb):1: warning: already initialized constant ENV
Brian Minton

@BrianMinton มีเพียง 1.9.3p194 ในมือและมัน "ทำงาน" กับรุ่นนั้น
Howard

อ้าเวอร์ชันของฉันค่อนข้างเก่า:irb 0.9.6(09/06/30)
Brian Minton

1
@BrianMinton ที่เป็นรุ่นล่าสุดของ irb
DarkHeart

17

16 ตัวอักษร

String=0
String=0

ไม่ใช่สั้นที่สุด แต่ฉันคิดว่ามันตลกที่จะไม่ผิดพลาดจนกว่าจะถึงบรรทัดที่สอง สร้างข้อความประมาณ 20 บรรทัดก่อนออกจาก IRB 2.times{String=0}ด้วยเหตุผลบางอย่างมันไม่สามารถลงไปเช่น


แก้ไข

จากคำตอบทั้งหมดจนถึงตอนนี้เป็นคำตอบเดียวที่ได้ผลสำหรับฉัน (และใช้ได้กับทุกเวอร์ชั่นที่ฉันสามารถทำได้) และฉันได้ทดสอบทั้งหมดในเวอร์ชันเหล่านี้:

ฉันจะได้รับลีนุกซ์ชนิดใดเมื่อsshเข้ามหาวิทยาลัย:
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]
ruby 1.8.5 (2006-08-25) [x86_64-linux]
ค่าเริ่มต้นของ Mac OS X Mavericks:
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
ติดตั้งผ่าน Homebrew บน OS X:
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]

แก้ไข 2

7 ตัวอักษร

การรวมเวอร์ชั่นแรกของฉัน (และ / หรือคำตอบของ@ Howardสำหรับการอ้างอิงโยงสูงสุด) กับคำตอบของ@ chinese perl goth :

STDIN=0

Array=0ล้มเหลวทันที
โม่

1
@primo เจ๋ง แต่ฉันไม่สามารถทำให้มันทำงาน: / (ดูการแก้ไขของฉัน)
daniero

เหมือนกันที่นี่เพียงแค่นี้และคำตอบที่ปิด stdin ทำงานคนอื่น ๆ ทั้งหมดให้คำเตือนเท่านั้น
user12205

ใช่ stdin อันนั้นก็เหมาะกับฉันเช่นกัน มันถูกโพสต์หลังจากการแก้ไขของฉัน
daniero

1
คุณสามารถย่อบรรทัดที่สองให้สั้นลง=และยังคงขัดข้องได้
Fraxtil

10

12 ตัวอักษร

ruby นั้นไม่ใช่ถ้วยชาของฉัน แต่ฉันเพิ่งพบว่า irb ทำตัวตลกเมื่อฉันปิด stdin :)

$stdin.close

ทดสอบกับ irb 0.9.6 (09/06/30) และ ruby ​​1.9.3p194


5
STDIN.closeทำงานเกินไปและมันเป็น 1 ถ่านน้อยลง!
Kavu

+1 เพราะเห็นได้ชัดเมื่อคุณมองว่ามันจะทำให้เกิดปัญหา :) คำตอบของฉันน่าจะเป็นข้อผิดพลาดมากกว่า แต่สำหรับคนนี้คุณไม่สามารถคาดหวัง IRB ให้ทำสิ่งที่ฉลาดได้ มันเหมือนใน Star Trek หรืออะไรก็ตามเมื่อพวกเขาถามคำถามที่เป็นไปไม่ได้กับหุ่นยนต์อัจฉริยะที่ยอดเยี่ยมสุดและมันจะระเบิด
daniero

ที่เกี่ยวข้อง: $>.close.
Jordan

7

10 9 ตัวอักษร

ตัวแปรที่สั้นกว่าสำหรับคำตอบของ @ daniero:

String=1
-

สิ่งนี้ใช้ได้ผลอย่างน้อยที่สุดในค่าเริ่มต้นของ OS X Mavericks Ruby (2.0.0)

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

เนื่องจาก "บั๊ก" อยู่ในโทเค็นเซอร์บรรทัดแรกจะไม่ล้มเหลวเนื่องจากบรรทัดจะมีผลเฉพาะหลังจากการแยกวิเคราะห์เสร็จสิ้น ดังนั้นจะมีผลกับบรรทัดที่ตามมาเท่านั้น บรรทัดต่อมาต้องมีตัวดำเนินการบางประเภทเพื่อดูความล้มเหลว


+1 สำหรับคำอธิบาย แต่เดนนิโรคนนี้คือใคร? ;)
daniero

@daniero: ฉันขอโทษฉันดูเหมือน lysdexic วันนี้
nneonneo

6

5 ตัวอักษร

$>=$<

ตั้งค่า stdout เป็น stdin ซึ่งมีข้อผิดพลาดพยายามเปิด stdin สำหรับการเขียนและขัดข้อง irb


โปรดทราบว่านี่คือการทดสอบในทับทิม 2.3.0p0
photoionized


4

12 ตัวอักษร

def send;end

เท่าที่ฉันรู้มีสี่วิธีในคลาส Object ซึ่งแสดงพฤติกรรมแบบนี้:

send
method_missing
respond_to?
respond_to_missing?

4
ใน IRB ของฉันเพียงแค่คืนnilและดำเนินการต่อ
daniero

@daniero 1.8.6 และ 1.9.3 ผิดพลาดทั้งคู่
โม่

@primo ไม่มีปัญหาอีกต่อไปเมื่อวันที่ 2.0.0
drusepth

4

5 ตัวอักษร

IRB=0

ไม่มีอะไรรบกวน IRB ที่ค่อนข้างเหมือนนิยาม IRB ใหม่


ใช่ สิ่งนี้ไม่ผิดพลาด แต่พิมพ์ 20 บรรทัดข้อผิดพลาดหลังจากทำอะไร!
Mega Man

อาจเป็น IRB รุ่นที่แตกต่างกันในตอนนี้ @ MegaMan ดังนั้นโดยตอนนี้ YMMV แน่นอน
vgoff

ทั้งคู่ดูเท่ห์!
Mega Man



0

26 + 1 = 27 ตัวอักษร

นี่มันไม่ค่อยเล่นกอล์ฟ แต่ฉันรู้สึกสนุกที่ค้นพบมันโดยบังเอิญและคิดว่าคนอื่นอาจสนุกกับมัน

class Fixnum;def +;end end

ฉันเพิ่ม +1 ในคะแนนเพราะคุณต้องกด Enter เป็นครั้งที่สองหลังจากป้อนข้างบน (แต่ไม่ใช่ +2 เพราะไม่มีใครนับ Enter อีก)

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