ลาก่อนอำมหิต!


49

พื้นหลัง

สวัสดีนักกอล์ฟ! ฉันต้องการเรียนรู้ภาษาการเขียนโปรแกรมทั้งหมด! แต่ฉันก็มีความสนใจสั้น ๆ ... และการคัดลอกตัวอย่าง Hello World ทั้งหมดน่าเบื่อ ... แต่ฉันชอบไฟ! ^ W ^

ท้าทาย

ดังนั้นนี่คือแผน! ฉันต้องการให้คุณทุกคนเขียนโค้ดที่เล็กที่สุดที่จะคอมไพล์พิมพ์Goodbye Cruel World!และขัดข้อง หรือเป็นความท้าทายในการบิดโบนัสพิมพ์Hello World!และขัดข้องด้วยGoodbye Cruel World!

กฎระเบียบ

  • คะแนนของคุณจะถูกนับรวมตัวอักษรที่ใช้ คำตอบจะต้องเป็นโปรแกรมที่ปฏิบัติการได้ทั้งหมด
  • โปรแกรมของคุณต้องพิมพ์Goodbye Cruel World!ออกมาแล้วเกิดข้อผิดพลาด (ข้อผิดพลาดที่ไม่คาดคิด)
    • สำหรับคะแนนโบนัสคุณต้องพิมพ์Hello World!เพื่อส่งออกแทน Goodbye Cruel World!แต่ข้อผิดพลาดจะต้องมี หากคุณทำโบนัสให้เสร็จคุณอาจแบ่งคะแนนของคุณเป็น 2 (รวม! ในตอนท้ายของคะแนนถ้าคุณอ้างสิทธิ์โบนัส!)
  • ตราบใดที่เอาต์พุตมาตรฐานยังพิมพ์ออกมาและข้อผิดพลาดมาตรฐานยังคงพิมพ์ออกมาลำดับนั้นก็ไม่สำคัญ ตราบใดที่ไม่สามารถปิดกั้นไม่ให้เกิดขึ้น
  • ผลลัพธ์จะต้องมีเนื้อหาข้างต้น; "ไม่ควรปรากฏในผลลัพธ์
  • ผลลัพธ์ควรมีสตริงที่ระบุและไม่มีอะไรอื่น
  • รายงานข้อขัดข้องสามารถมีอะไรก็ได้ แต่เพื่ออ้างสิทธิ์โบนัส regex ต่อไปนี้ควรตรงกัน/Goodbye Cruel World!/mi(aka, บรรจุ, ละเว้นตัวพิมพ์เล็ก / ใหญ่)
  • สตริงHello World!และGoodbye Cruel World!ไม่คำนึงถึงขนาดตัวพิมพ์ แต่อย่างอื่นควรปรากฏตามที่อธิบายไว้ด้านบน
  • หากภาษามีความสามารถในการทำงานล้มเหลว (ไม่สามารถเปลี่ยนรหัสออกได้) จะต้องขัดข้อง มิฉะนั้นให้ใช้ "รายงานข้อผิดพลาด" มาตรฐาน (เช่น, STDERR) สำหรับภาษา

ฉันสามารถชน Python 3 ได้ดังนั้นฉันจึงรวมตัวอย่างคำตอบของ Python 3 ไว้ด้วย! ตอนนี้ให้ทุกคนทำให้โลกลุกเป็นไฟ! ^ W ^


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
Dennis

as a bonus twist challenge, print "Hello World!" and crash with "Goodbye Cruel World!"?
Magic Octopus Urn

สมมติว่าฉันทำงานในภาษาเช่น Java ซึ่ง STDOUT และ STDERR อยู่แน่นอนพิมพ์ในหัวข้อที่แตกต่างกัน ซึ่งหมายความว่าถึงแม้ว่าโปรแกรมจะพิมพ์คำว่า "Hello world" และขัดข้องเป็นไปได้ว่าเป็นไปได้ว่าการติดตามสแต็กจะถูกพิมพ์ก่อน ... อนุญาตหรือไม่
Socratic ฟีนิกซ์

@SocialPhoenix ตราบใดที่ STDOUT ยังพิมพ์อยู่และ STDERR ยังคงพิมพ์ออกมาลำดับนั้นไม่สำคัญ ตราบใดที่ไม่สามารถปิดกั้นไม่ให้เกิดขึ้น
Tezra

1
มันสนุกมากฉันไม่สามารถหยุดแก้ปัญหาได้!
อดัม

คำตอบ:


36

เยลลี่ 12 ไบต์

“¿µƝɓṭỵae»Ȯ:

ลองออนไลน์!

คำอธิบาย:

“¿µƝɓṭỵae»Ȯ:

          Ȯ     Print
“¿µƝɓṭỵae       A string...
         »      Decoded from base-250
           :    Integer division

เนื่องจากการหารจำนวนเต็มเป็น dyad โดยปริยายมันจะรับค่าปัจจุบันของ chain เป็นอาร์กิวเมนต์ทั้งคู่ซึ่งเป็นสตริง ล้มเหลวเนื่องจากคาดว่าจะเป็นจำนวนเต็ม


7
ยินดีต้อนรับสู่ PPCG!
Dennis

ขอขอบคุณ! ฉันซุ่มซ่อนอยู่พักหนึ่งแล้ว แต่นี่เป็นครั้งแรกที่ฉันพบความท้าทายที่ฉันรู้สึกว่าฉันสามารถแก้ปัญหาได้อย่างเหมาะสมจริง ๆ !
กระจาย

28
คำตอบที่น่าประทับใจแม้ว่าคำตอบของเจลลี่เกือบทั้งหมดนั้นน่าประทับใจ แต่ก็เป็นเพราะความยาวและความจริงที่ว่าคุณสามารถเรียนรู้เจลลี่ได้
Gryphon - Reinstate Monica

4
A base-250 encoded stringนั่นเป็นทั้งความน่ากลัวที่คุณสามารถทำได้ X3
Tezra

3
นี่สั้นกว่าสตริงอย่างมาก "Goodbye cruel world!" (20 ไบต์) บ้า ...
Adam Plocher

35

C, 43 ไบต์

main(){puts(puts("Goodbye Cruel World!"));}

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

ลองออนไลน์!

C, 42 ไบต์

ขอบคุณ @Ruslan!

main(i){i=puts("Goodbye Cruel World!")/0;}

ลองออนไลน์!

เพื่อความสนุกสนาน: C (บน Linux 64 บิต), 149 ไบต์

ดัดแปลงจากนี้ -program Hello World ที่นี่

const int main[]={-443987883,440,113408,-1922629632,4149,1358336,84869120,15544,266023168,1869563654,1702453860,1970422560,1461742693,1684828783,33};

ลองออนไลน์!


ฉันชอบวิธีการนี้ แต่คำแนะนำจะบอกว่าThe answer must be a whole executable program.
Cody

1
main(i){i=puts("Goodbye Cruel World!")/0;}แยกหนึ่งไบต์ออก
Ruslan

1
iคุณไม่จำเป็นต้อง puts("")/0;เป็นคำสั่งที่ถูกต้องทางไวยากรณ์
rici

1
@rici ใช่มันเป็น แต่มันก็ไม่ได้ผิดพลาด
Steadybox

1
@Steadybox: นั่นเป็นการเพิ่มประสิทธิภาพสำหรับคุณ
rici

11

SOGL , 15 25 17 ไบต์ / 2 = 8.5!

Q7┌θ/²?‘■←#c℮‘o0n

คำอธิบาย:

...‘           push "goodbye cruel world!"
    ...‘       push "hello world!"
         o     output "Hello World!"
           0n  attempt to make an array where each line is 0 characters long, making the array
               required to be infinite, which crashes (OutOfMemoryError)

(Ab) ใช้ความจริงที่ว่า SOGL ใช้ STDERR เป็นเอาต์พุตดีบักดังนั้นในนั้นจะมีข้อความจำนวนมากพร้อมกับบรรทัด

`∑`@22: ["goodbye cruel world!"]

หากคุณไพพ์ STDOUT ของร่างการประมวลผลไปยังไฟล์ "Goodbye Cruel World!" จะมี


เนื่องจากความท้าทายกล่าวถึง " สตริงHello World!และGoodbye Cruel World!ตัวพิมพ์เล็กและตัวพิมพ์เล็กแต่ควรปรากฏอย่างตรงตามที่กล่าวข้างต้น " คุณสามารถตีโค้ดของคุณโดยกำจัดฟังก์ชั่นโดยสิ้นเชิงและส่งออกเป็นตัวพิมพ์เล็กทั้งหมด
Kevin Cruijssen

@KevinCruijssen โอ้โหขอบคุณ!
dzaima

10

> <> , 25 ไบต์

"!dlroW leurC eybdooG">o<

โดยพื้นฐานแล้วมันจะเพิ่มสตริงลงในสแต็ก (ย้อนกลับ, เข้าก่อนออกก่อน) แล้วจึงเทียบเท่า:

while(1):
  pop the stack
  print the character

เมื่อไม่มีตัวอักษรเหลืออยู่บนสแต็ก (พิมพ์ทั้งสตริง) การ p กองซ้อนจะทำให้เกิดข้อผิดพลาด


+1 มา#o<"Goodbye Cruel World!"ซึ่งโดยพื้นฐานแล้วจะเหมือนกัน
hakr14

9

sed, 32 ไบต์

iGoodbye Cruel World!
w/dev/full

iแทรกบรรทัดและwเขียนไปยังไฟล์ /dev/fullในกรณีนี้เพราะทั้งหมดเขียนไปส่งคืนENOSPC("ไม่มีพื้นที่เหลือบนอุปกรณ์")

มันยังคงต้องการอินพุตเพียงบรรทัดเดียวในการทำงาน

$ echo 1 | sed -f crash.sed
Goodbye, cruel world!
sed: couldn't flush /dev/full: No space left on device

3
ไม่รู้ด้วยซ้ำว่ามีอุปกรณ์ดังกล่าวอยู่!
Ruslan

9

Lua, 31 , 30 ไบต์

a=-print'Goodbye Cruel World!'

พิมพ์ครั้งแรก 'Goodbye Cruel World!' แล้วขัดข้องเมื่อพยายามเพิ่มค่าศูนย์และ 0

เอาท์พุท:

Goodbye Cruel World!
input:1: attempt to perform arithmetic on a nil value

ให้เครดิตกับGalladeGuyน้อยกว่า 1 ไบต์


2
มันพิมพ์ 'Goodbye Cruel World!' แล้วก็เกิดปัญหาซึ่งฉันคิดว่ามันจะต้องผิดพลาดที่จะได้รับการยอมรับ
จัดการ

@Trebuchette ข้อกำหนดคือ "โปรแกรมของคุณจะต้องพิมพ์ Goodbye Cruel World! to output แล้วจึงเกิดความผิดพลาด" OP ไม่ได้ระบุว่า "output" หมายถึง stderr, stdout, messagebox หรือข้อความใด ๆ ข้างต้น
Pharap

@Phap โอ้ฉันเข้าใจแล้ว สตอร์เดรดนั้นสำคัญหากคุณจะได้รับโบนัส ขอบคุณ!
Trebuchette

@ Trebuchette Nope มันบอกว่า "หรือเป็นความท้าทายในการบิดโบนัสพิมพ์ Hello World! และชนกับ Goodbye Cruel World!" 'ความผิดพลาด' ไม่ได้หมายความถึง stderr ที่ไม่จำเป็น 'ความผิดพลาด' อาจหมายถึงข้อยกเว้นที่ถูกโยนทิ้งไป นอกเสียจากว่า OP จะกำหนดให้มันเปิดกว้างต่อการตีความ นอกจากนี้แอปพลิเคชันบางอย่างของ Lua ยังไม่มีแนวคิดของ stderr (เช่น Lua ฝังตัวเป็นภาษาสคริปต์สำหรับเกม) และจะพิมพ์ลงในกล่องข้อความหรือล็อกไฟล์แทน
Pharap

1
คุณสามารถบันทึกไบต์โดยทำสิ่งนี้แทน:a=-print"Goodbye Cruel World!"
GalladeGuy

8

Python 3 | คะแนน: 24.5! 23 22!

print("Hello World!")+"Goodbye Cruel World!"

พิมพ์ "Hello World" มากกว่าใช้โอเปอเรเตอร์ที่ไม่ถูกต้อง '+' ใน "Goodbye Cruel World!" ไปยังองค์ประกอบ ReturnType (ตัดออก \ n \ r จากรุ่นก่อนหน้า)

ลองออนไลน์!

Python 3 | คะแนน: 34 30

+print("Goodbye Cruel World!")

พิมพ์ Goodbye ไม่ใช่การดำเนินการ unary + ที่ไม่ถูกต้องกับผลการพิมพ์ (NoneType)

ลองออนไลน์!


+"Goodbye Cruel World!"สั้นลง 3 ไบต์และส่งออก TypeError
Gábor Fekete

print("Goodbye Cruel World!")/0สั้นลงสำหรับอันที่สอง (3 ไบต์?)
matsjoyce

@ matsjoyce ฉันกลัวว่าจะผิดพลาดก่อนที่จะพิมพ์ แต่เนื่องจากมันพิมพ์ออกมาก่อนฉันจะทำสิ่งที่แตกต่างกันในผลลัพธ์ 'ผลลัพธ์': 3
Tezra

24
2.585e + 22 เป็นคะแนนที่ค่อนข้างใหญ่ ... คุณแน่ใจหรือไม่ว่าไม่สามารถตีมันลงอีก
tuskiomi

1
@tuskiomi The '!' หมายความว่าคะแนนสุดท้ายได้รับการแก้ไขโดยการท้าทายโบนัส
Tezra

7

R, 22 20! ไบต์(44/2) (40/2)

cat("Hello World!")
`Goodbye Cruel World!`

ลองออนไลน์!

เอาท์พุท:

สวัสดีชาวโลก!

ข้อผิดพลาด: วัตถุ 'Goodbye Cruel World!' ไม่พบ

บันทึกสองจุดด้วยdigEmAll


คุณสามารถย่อให้สั้นลงเพื่อ40/2 ลองออนไลน์ได้!
digEmAll


6

CJam , 34 ไบต์, คะแนน 17!

"Goodbye Cruel World!"D>"Hello"ooo

ลองออนไลน์! (ดูแผงดีบักสำหรับ STDERR)

คำอธิบาย

"Goodbye Cruel World!"              e# Push "Goodbye Cruel World!".
                      D>            e# Slice after index 13: " World!".
                        "Hello"o    e# Push "Hello" and print it.
                                o   e# Print " World!".
                                 o  e# Attempt to print from an empty stack. Crashes.

บน TIO จะสร้างข้อความแสดงข้อผิดพลาดนี้:

"Goodbye Cruel World!"D>"Hello"ooo
                                 ^
RuntimeException: The stack is empty
Java exception:
java.lang.RuntimeException: The stack is empty
    at net.aditsu.cjam.CJam.pop(CJam.java:75)
    at net.aditsu.cjam.Op1.run(Op1.java:10)
    at net.aditsu.cjam.Block.run(Block.java:304)
    at net.aditsu.cjam.CJam.runCode(CJam.java:210)
    at net.aditsu.cjam.CJam.main(CJam.java:240)

6

ตัวประมวลผลล่วงหน้า C ขนาด 27 ไบต์

#error Goodbye Cruel World!

เอาท์พุท:

fatal error C1189: #error:  Goodbye Cruel World!

1
คุณอาจสามารถย่อให้สั้นลงด้วย just#Goodbye Cruel World!
apricot boy

@apricotboy ยังคงมีข้อผิดพลาดเกิดขึ้น แต่ข้อความแสดงข้อผิดพลาดเต็มรูปแบบ "ลาก่อนโหดร้าย" ไม่ได้ส่งออกโดยคอมไพเลอร์ (บน MSVC อย่างน้อย)
Govind Parmar

@Gorvind Parmar ah แน่นอนมันทำใน gcc: i.imgur.com/qmGnoJv.png
เด็กชายแอพริค็อท

6

APL (Dyalog)ขนาด 17.5 ไบต์

ไม่มีโบนัส 20 ไบต์

Goodbye Cruel World!

ลองออนไลน์!

โปรดทราบว่ารหัสนั้นไม่มีการอ้างอิงดังนั้น APL จึงพยายามเรียกใช้งาน แต่Worldไม่ได้กำหนดไว้ทำให้เกิดข้อผิดพลาดของ VALUE ERROR ด้วยบรรทัดที่มีรหัสผิดในรหัสข้อผิดพลาด

ด้วยโบนัส 35 ÷ 2 = 17.5 ไบต์

'Hello World!'
Goodbye Cruel World!

ลองออนไลน์!

ก่อนอื่นให้พิมพ์สตริงที่ต้องการแล้วขัดข้องเหมือนโปรแกรมด้านบน

เวอร์ชันโบนัสที่ซับซ้อนยิ่งขึ้น 35 ÷ 2 = 17.5 ไบต์

'Goodbye Cruel',5↓⎕←'Hello World!'

ลองออนไลน์!

พิมพ์สตริงแรกจากนั้นปล่อยอักขระห้าตัวแรกจากนั้น ( 5↓) จากนั้นเชื่อมต่อ ( ,) กับคำนำหน้าใหม่แล้วพยายามเรียกใช้งาน ( ) นั้นทำให้เกิดข้อผิดพลาดเช่นเดียวกับด้านบน


1
@Cyoce Typo ขอบคุณ
Adám

5

ทุบตี20.5! 18.5!

ฉันจะไม่ทุบตีเจลลี่ แต่ฉันก็อายเล็กน้อยที่ทุบตีสคริปสคริปต์ฉบับย่อ 18.5 ไม่เลวสำหรับภาษาที่ไม่ใช่กอล์ฟ (โปรดทราบว่านี่จะต้องเป็นสคริปต์ทุบตีแบบโต้ตอบจะพยายามตีความ!เป็นการค้นหาประวัติ)

echo Hello World!
Goodbye\ Cruel\ $_

ส่งคืนพร้อมรหัสข้อผิดพลาด 127 และ:

Hello World!
bash.sh: line 2: Goodbye Cruel World!: command not found

ตามที่ร้องขอไม่มี"'s ... :)ที่ใดก็ได้ ตามที่แนะนำโดยapricot boyตอนนี้ฉันค้นหาอาร์กิวเมนต์สุดท้ายของคำสั่งก่อนหน้าเพื่อบันทึก 4 ไบต์


ฉันพยายามที่จะเอาชนะคุณ ... และล้มเหลวด้วย 21! ไบต์ :) W=\ World\!;echo Hello$W;"Goodbye Cruel$W"
reitermarkus

1
คุณอาจเปลี่ยนบรรทัดที่สองเป็นGoodbye\ Cruel\ !$ไม่ใช่ 100% แต่ค่อนข้างแน่ใจว่านั่น!$คือ "คำสุดท้ายของคำสั่งสุดท้าย"
apricot boy

แต่จะเป็นอย่างไรถ้าผู้ปฏิบัติการที่ชื่อว่า "Goodbye Cruel World!" มีอยู่ใน PATH หรือไม่ :)
spuck


4

TeX, 19!

Hello World!#\bye Goodbye Cruel World!

เพื่อบังคับให้เท็กซ์จริงผลิตไฟล์ DVI / pdf -interaction=nonstopmodeโดยปราศจากการแทรกแซงรวบรวมกับ

มันพิมพ์Hello World!โยนข้อผิดพลาดในการใช้เมื่อคุณไม่ควรจะแล้วหยุดการสะสมด้วย# \byeอย่างไรก็ตามสิ่งใดก็ตามที่\byeยังคงส่งออกในข้อความแสดงข้อผิดพลาดดังนั้นจึงใช้กับโบนัส


4

WinDBG (การดีบักเคอร์เนลของ Windows XP / Vista Local), 33 ไบต์

.echo Goodbye Cruel World!;.crash

คำเตือน: สิ่งนี้จะทำให้เครื่องทั้งหมดขัดข้องไม่ใช่เฉพาะโปรแกรม

การดีบักโลคัลเคอร์เนลได้รับอนุญาตเฉพาะใน Windows XP และ Vista (แต่ไม่ได้เปิดใช้งานโดยค่าเริ่มต้นใน Vista) กล่องโต้ตอบ WinDBG ในการดีบักเคอร์เนลไม่ได้พูดถึงระบบปฏิบัติการ Windows อื่น ๆ ดังนั้นฉันคิดว่ามันไม่สามารถเปิดใช้งานได้ สำหรับ Windows OS อื่น ๆ คุณสามารถแนบกับเครื่องระยะไกลเพื่อแก้ไขข้อบกพร่องเคอร์เนล แต่เป็นเครื่องระยะไกลที่จะล้มเหลวดังนั้นฉันไม่คิดว่าวิธีการแก้ปัญหานี้นับมี


การดีบักเคอร์เนลในเครื่องยังรองรับ Windows 7 และฉันไม่เคยได้ยินว่ามันถูกลบไปตั้งแต่นั้น (แต่ฉันอาจจะพลาด)
โคดี้เกรย์

4

JS (ES5), 46/2 = 23 ไบต์!

alert("Hello, World!")["Goodbye Cruel World!"]

แจ้งเตือนHello, World!แล้วเกิดข้อผิดพลาดด้วยUncaught TypeError: Cannot read property 'Goodbye Cruel World!' of undefined


4

PowerShell ขนาด 26 ไบต์

'Goodbye Cruel World!';1/0

ฉันคิดว่าการหารด้วย 0 เป็นวิธีที่ง่ายที่สุดในการโยนข้อผิดพลาด

PowerShell, 35/2 = 17.5 ไบต์

"Hello World!";Goodbye Cruel World!

โดยTessellatingHeckler จะพ่นข้อผิดพลาดดังนี้:

PS C:\Users\Connor> "Hello World!";Goodbye Cruel World!
Hello World!
Goodbye : The term 'Goodbye' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:16
+ "Hello World!";Goodbye Cruel World!

มันควรจะเป็น$w='World!'(กับ!) หรือไม่?
gmatht

"Hello World!";Goodbye Cruel World!เป็น 17.5 ไบต์พ่นยกเว้นเพราะลาไม่ได้รับการยอมรับเป็นคำสั่งและข้อความแสดงข้อยกเว้นรวมถึงสายเต็มเพื่อให้มันตรงกับ regex ไม่ ..
TessellatingHeckler

1
การใช้ตรรกะเดียวกันกับคำตอบ 17.5b 'Goodbye Cruel World!';xจะประหยัดสองไบต์สำหรับ 24
Veskah



4

Node.js คะแนน: 25.5 24.5!

บันทึก 1 คะแนนต้องขอบคุณ ETHproductions

โปรแกรมเต็มรูปแบบที่ถูกต้องทางวากยสัมพันธ์ซึ่งขัดข้องตอนรันไทม์เพราะconsole.log()ไม่ได้ส่งคืนฟังก์ชัน

console.log('Hello World!')`Goodbye Cruel World!`

ลองออนไลน์!


น่าเศร้าที่ไม่มีปัจจัยสำหรับ25.5... : ((
นาย Xcoder

@ Mr.Xcoder มันเป็นGamma(26.5)เช่นเดียวกับความหมาย Mathematica
user202729

1
@ user202729 ใครบอกว่า Mathematica ไม่พัง :)))
Mr. Xcoder

คุณสามารถลบX(และอาจจะขึ้นบรรทัดใหม่) ได้หรือไม่
ETHproductions

@ETHproductions ใช่แน่นอน ขอบคุณ!
Arnauld

3

Acetoคะแนน: 21.5!

yeru
b Ce+
do l"d
GoWorl
"!dl
p"or
HeW
"llo

พิมพ์Hello World!แล้วขัดข้องด้วย

Traceback (most recent call last):
  File "/Users/l3viathan/bin/aceto", line 230, in _plus
    self.push(y+x)
TypeError: unsupported operand type(s) for +: 'int' and 'str'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/l3viathan/bin/aceto", line 811, in <module>
    A.run()
  File "/Users/l3viathan/bin/aceto", line 104, in run
    raise e
  File "/Users/l3viathan/bin/aceto", line 98, in run
    self.step()
  File "/Users/l3viathan/bin/aceto", line 152, in step
    method(self, cmd)
  File "/Users/l3viathan/bin/aceto", line 233, in _plus
    raise CodeException(f"Can't add {x!r} to {y!r}")
__main__.CodeException: Can't add 'Goodbye Cruel World' to 0


3

AHK, 50/2 = 25! (ที่ไม่ใช่การแข่งขัน)

ไม่แข่งขันเนื่องจากข้อกำหนดเพิ่มเติมทำให้คำตอบไม่ถูกต้อง ฉันไม่สามารถหาวิธีที่จะรวบรวมออกข้อความและความผิดพลาด สิ่งที่ฉันพยายามล้มเหลวอย่างน้อยหนึ่งข้อกำหนดเหล่านั้น


Send,Hello World!
OutputDebug,Goodbye Cruel World!

นี่เป็นทางออกที่น่าเบื่อที่สุดที่ฉันคิดได้ มันไม่ได้ผิดพลาดจริง ๆ แต่นั่นไม่ใช่ข้อกำหนดทางเทคนิค สิ่งที่ต้องทำก็คือส่งข้อความไปที่หน้าต่างดีบั๊ก มันเป็นเช่นนั้นเพราะฉันบอกให้ทำ


ปัจจุบันนี้ไม่ถูกต้อง OP ระบุว่าโปรแกรมจะต้องหยุดทำงานหากภาษาสามารถใช้งานได้หาก AHK นั้นเป็นภาษาใด
internet_user

@pycoder อ่านั่นถูกเพิ่ม 40 นาทีหลังจากที่ฉันโพสต์ ฉันจะอัปเดตกฎใหม่ แต่จะมีค่าใช้จ่ายเป็นไบต์
Engineer Toast

3

Japt , 22 ไบต์

°Oo`!dlžW ¤¨C eybºoG`w
°Oo`!dl&#158;W ¤¨C eybºoG`w
 Oo                            output
   `!dl&#158;W ¤¨C eybºoG`     the compressed string "!dlroW leurC eybdooG"
                          w    reversed.
°                              ° transpiles to ++, causing an error; a string can't be incremented

ลองออนไลน์!

บันทึกแล้ว 3 ไบต์ด้วย obarakon และ ETHproductions


คุณสามารถบีบอัดสตริงโดยใช้Oc"<string>"แล้วแทนที่สตริงปัจจุบันด้วยเวอร์ชันที่บีบอัดและล้อมรอบด้วย backticks
ลุค

คำอธิบายจะดี
iFreilicht

1
@iFreilicht เพิ่มคำอธิบายแล้ว
Tom

3

C #, 116/2 = 58 ไบต์!

using System;class P{static void Main(){Console.Write("Hello World!");throw new Exception("Goodbye Cruel World!");}}

รุ่นปกติสำหรับ94 87 ไบต์:

class P{static void Main(){System.Console.Write("Goodbye Cruel World!");int n=0;n/=n;}}

บันทึกแล้ว 7 ไบต์ขอบคุณ @KevinCruijssen


int n=0;n/=n;สั้นลงสำหรับคำตอบแรกของคุณ
Kevin Cruijssen

@KevinCruijssen จุดที่ดีฉันมีปัญหากับการรวบรวมโดยไม่มีข้อผิดพลาดคงที่ศูนย์
TheLethalCoder

ใช่ใน Java คุณสามารถทำได้int n=1/0;แต่เห็นได้ชัดว่าเป็นไปไม่ได้ใน C # (ซึ่งเป็นสิ่งที่ดีสำหรับภาษา แต่ไม่ดีสำหรับ codegolfing) แต่ทำไมโบนัสถึงไม่ติดอยู่ข้างบน? อันนั้นสั้นกว่า
Kevin Cruijssen

@KevinCruijssen ฉันไม่แน่ใจว่ามันมีคุณสมบัติหรือไม่เพราะฉันยังไม่ชัดเจนเมื่อฉันโพสต์คำตอบของฉันเพราะมันได้รับการชี้แจงเพิ่มเติมฉันได้เปลี่ยนพวกเขาไปรอบ ๆ
TheLethalCoder

3

เยลลี่ 10.5! ไบต์

“,ḷṅḳȦ»¹“¿µƝɓṭỵae»+/R

ลองออนไลน์!

วิธีการนี้ใช้ประโยชน์จากพฤติกรรมที่ไม่ได้กำหนดโดยใช้สตริง Python (สตริง) แทนสตริงเยลลี่ (รายการของสตริง 1-char) การแปลงจะทำโดยการลดสตริง Jelly ด้วยการบวกและ Python +เชื่อมสองสายเข้าด้วยกันดังนั้นการรวมสองสายเข้าด้วยกันจึงเป็นการรวม Python-wise จากนั้นจะใช้ monad ที่เหมาะสม (ช่วง) เพื่อให้ ธเรียกว่าในสตริงส่งผลให้เกิดข้อผิดพลาดที่มักจะมีintGoodbye Cruel World!

คำอธิบาย:

“,ḷṅḳȦ»¹“¿µƝɓṭỵae»+/R Main Link, niladic.
“,ḷṅḳȦ»¹              Print "Hello World!"
        “¿µƝɓṭỵae»+/  Convert "Goodbye Cruel World!" to a Python string
                    R Make a range out of it

3

Ruby, 43 42 ไบต์ / 2 = 21!

puts"Hello World!"
-"Goodbye cruel World!"

ที่บันทึกไว้ครึ่งไบต์ด้วยความช่วยเหลือของอเล็กซิสเซนโดยการเปลี่ยนด้วย"String"/0 -"String"นี่เป็นเพียง "งาน" ที่มีทับทิมรุ่นต่ำกว่า 2.3 เท่านั้นซึ่งวิธีการลบแบบยูนารีนั้นถูกเพิ่มไปยังคลาส String!

ด้วยทับทิม <2.3:

$ ruby -e 'puts"Hello World!";-"Goodbye cruel World!"'
Hello World!
-e:1:in `<main>': undefined method `-@' for "Goodbye cruel World!":String (NoMethodError)

ด้วย Ruby> = 2.3:

$ ruby -e 'puts"Hello World!";"Goodbye cruel World!"/0'
hello world!
-e:1:in `<main>': undefined method `/' for "Goodbye cruel World!":String (NoMethodError)

คุณสามารถบันทึก (ครึ่ง) ไบต์โดยใช้-เชือกแทน/เช่น-"Goodbye crueld World!"
อเล็กซิสเซน

@AlexisAndersen ขอบคุณ! วันนี้ผมยังได้เรียนรู้เกี่ยวกับวิธีการใหม่ในชั้นเรียน String (ดูโพสต์ปรับปรุง)
daniero

3

x86-64 รหัส Binary (ด้วยการเรียกระบบ Linux), 43 ไบต์

ถอดชิ้นส่วน:

0:  31 c0                   xor    eax,eax
2:  ff c0                   inc    eax            ; write syscall number = 1
4:  31 ff                   xor    edi,edi
6:  ff c7                   inc    edi            ; stdout file descriptor = 1
8:  48 8d 35 07 00 00 00    lea    rsi,[rip+0x7]  ; load the string at offset 16 into rsi
f:  31 d2                   xor    edx,edx
11: b2 15                   mov    dl,0x15        ; 21 byte string
13: 0f 05                   syscall
15: f4                      hlt
16: 47 6f 6f 64 62 79 65 20 43 72 75 65 6c 20 57 6f 72 6c 64 21 0a .ascii "Goodbye Cruel World!\n"

Note: 0x16 code bytes + 0x15 string bytes = 0x2B = 43 total bytes

โปรแกรมนี้รวมข้อมูลที่ต้องการ (สตริง"Goodbye Cruel World!\n") ลงในรหัสของตัวเอง มันโหลดตัวชี้ไปยังสตริงนั้นโดยใช้ripการกำหนดแอดเดรสแบบสัมพันธ์และเรียกwritesyscall โดยตรงแทนที่จะผ่าน glibc wrapper ดังนั้นจึงเป็นตำแหน่งที่ไม่ขึ้นต่อกันทั้งหมดและเราสามารถทดสอบได้อย่างง่ายดายโดยการฝังโค้ดลงในconstสตริงและส่งสตริงนั้นไปยังฟังก์ชัน ตัวชี้ ในการที่จะเกิดความผิดพลาดของโปรแกรมฉันก็จบลงด้วยhltคำสั่งซึ่งด้วยสิทธิ์ ring 0 จะเงียบโปรเซสเซอร์ตลอดไป (หรืออย่างน้อยก็จนกว่า interrupt ต่อไปจะเข้ามา) แต่ด้วย ring 3 สิทธิพิเศษ (โดยทั่วไปสำหรับโปรแกรมผู้ใช้) Segmentation Faultน่าทึ่ง

โปรแกรมทดสอบ:

#include <stdio.h>

const char code[43] = "\x31\xC0\xFF\xC0\x31\xFF\xFF\xC7\x48\x8D\x35\x07\x00\x00\x00\x31\xD2\xB2\x15\x0F\x05\xF4Goodbye Cruel World!\n";

int main() {
    printf("Code bytes: %zi\nNow running the code:\n\n", sizeof(code));
    ((void(*)())code)();
    printf("Failed to crash, now exiting!\n");
    return 0;
}

เอาท์พุท:

Code bytes: 43
Now running the code:

Goodbye Cruel World!
Segmentation fault

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


บันทึกสองสามไบต์โดยใช้push/ popเพื่อโหลดการลงทะเบียน ตัวอย่างเช่นคำสั่งสองคำแรกสามารถเป็นpush 1+ pop raxซึ่งสั้นกว่า 1 ไบต์ จากนั้นคำสั่งสองคำสั่งถัดไปสามารถแทนที่ด้วยmov edi, eaxซึ่งสั้นกว่า 2 ไบต์ เดียวกันpush/ popเคล็ดลับที่สามารถนำไปใช้กับคำแนะนำที่ 6 และ push 0x157: pop rdx+
โคดี้เกรย์


3

Pyth , 38/2 = 19 ไบต์! 36/2 = 18 ไบต์!

"Hello World!"v"Goodbye Cruel World!

ทดสอบออนไลน์!

คำอธิบาย

มันพิมพ์แล้วพยายามที่จะประเมินHello World! Goodbye Cruel World!มันล้มเหลวในการทำมันเพราะสตริงนั้นไม่ใช่รหัสที่ถูกต้อง

ผลลัพธ์คือ:

Hello World!
Traceback (most recent call last):
  File "pyth.py", line 760, in <module>
  File "<string>", line 4, in <module>
  File "/app/macros.py", line 1085, in Pliteral_eval
  File "/app/.heroku/python/lib/python3.4/ast.py", line 46, in literal_eval
  File "/app/.heroku/python/lib/python3.4/ast.py", line 35, in parse
  File "<unknown>", line 1
    Goodbye Cruel World!
                ^
SyntaxError: invalid syntax
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.