Tạm biệt thế giới tàn nhẫn!


49

Lý lịch

Xin chào các gôn thủ! Tôi muốn học tất cả các ngôn ngữ lập trình! Nhưng tôi có một khoảng chú ý ngắn ... và sao chép tất cả các ví dụ Hello World trở nên nhàm chán ... nhưng tôi thích lửa! ^ w ^

Thử thách

Vì vậy, đây là kế hoạch! Tôi muốn tất cả các bạn viết mã nhỏ nhất sẽ biên dịch, in Goodbye Cruel World!và sau đó sụp đổ. Hoặc, như một thách thức xoắn thưởng, in Hello World!và sụp đổ vớiGoodbye Cruel World!

Quy tắc

  • Điểm của bạn sẽ là tổng số ký tự được sử dụng. Câu trả lời phải là toàn bộ chương trình thực thi.
  • Chương trình của bạn phải in Goodbye Cruel World!ra đầu ra, sau đó gặp sự cố (lỗi không mong muốn).
    • Để có điểm thưởng, bạn phải in Hello World!ra đầu ra thay thế, nhưng thông báo lỗi cũng phải có Goodbye Cruel World!. Nếu bạn hoàn thành thử thách tiền thưởng, bạn có thể chia điểm của mình cho 2. (Bao gồm a! Vào cuối điểm của bạn nếu bạn đang nhận phần thưởng!)
  • Miễn là đầu ra tiêu chuẩn vẫn in và lỗi tiêu chuẩn vẫn in, thứ tự không thành vấn đề. Chỉ cần không thể ngăn chặn người khác xảy ra.
  • Đầu ra phải chứa các nội dung trên; "không nên xuất hiện ở đầu ra.
  • Đầu ra phải chứa chuỗi được chỉ định và không có gì khác.
  • Báo cáo sự cố có thể chứa bất cứ điều gì, nhưng để nhận phần thưởng, regex sau phải khớp /Goodbye Cruel World!/mi(aka, chứa, bỏ qua trường hợp / văn bản xung quanh))
  • Các chuỗi Hello World!Goodbye Cruel World!không phân biệt chữ hoa chữ thường, nhưng nếu không thì sẽ xuất hiện chính xác như trên.
  • Nếu ngôn ngữ có khả năng bị sập (nó không thể thay đổi mã thoát), nó cần phải bị sập. Mặt khác, sử dụng "báo cáo lỗi" tiêu chuẩn (nghĩa là STDERR) cho ngôn ngữ.

Tôi có thể đánh sập Python 3, vì vậy tôi đã đưa vào ví dụ câu trả lời Python 3! Bây giờ hãy để tất cả đốt cháy thế giới! ^


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Dennis

as a bonus twist challenge, print "Hello World!" and crash with "Goodbye Cruel World!"?
Bạch tuộc ma thuật Urn

Giả sử tôi đang làm việc trong một ngôn ngữ như Java, trong đó STDOUT và STDERR, tất nhiên, được in trong các luồng khác nhau. Điều này có nghĩa là, mặc dù chương trình, theo thứ tự, in "Hello world" và sau đó gặp sự cố, có thể dấu vết ngăn xếp sẽ được in trước ... Điều đó có được phép không?
Phượng hoàng Socrates

@SocPhoenix Miễn là STDOUT vẫn in và STDERR vẫn in, thứ tự không thành vấn đề. Chỉ cần không thể ngăn chặn người khác xảy ra.
Tezra

1
Điều này thật thú vị, tôi không thể ngừng đưa ra giải pháp!
Adám

Câu trả lời:


36

Thạch , 12 byte

“¿µƝɓṭỵae»Ȯ:

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

Giải trình:

“¿µƝɓṭỵae»Ȯ:

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

Vì phép chia số nguyên là một dyad, nó sẽ hoàn toàn lấy giá trị hiện tại của chuỗi làm cả hai đối số - là một chuỗi. Sự cố vì nó mong đợi số nguyên.


7
Chào mừng đến với PPCG!
Dennis

Cảm ơn bạn! Tôi đã ẩn nấp được một lúc rồi nhưng đây là lần đầu tiên tôi tìm thấy một thử thách mà tôi cảm thấy như mình thực sự có thể giải quyết dứt khoát!
phân tán

28
Câu trả lời ấn tượng, mặc dù gần như tất cả các câu trả lời của Jelly đều ấn tượng, cả vì độ dài và thực tế là bạn đã học được Jelly.
Gryphon - Tái lập Monica

4
A base-250 encoded stringĐó là cả một điều đáng sợ mà bạn có thể làm điều đó. X3
Tezra

3
Đoạn phim này ngắn hơn đáng kể so với chuỗi "Tạm biệt thế giới tàn khốc!" (20 byte). Điên rồ ...
Adam Plocher

35

C, 43 byte

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

In chuỗi và sau đó cố gắng sử dụng giá trị trả về làm con trỏ đến một chuỗi khác sẽ được in, điều này gây ra lỗi phân đoạn.

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

C, 42 byte

Cảm ơn @Ruslan!

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

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

Chỉ để giải trí: C (trên Linux 64 bit), 149 byte

Được sửa đổi từ chương trình Hello World này tại đây .

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

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


Tôi thích cách tiếp cận này, nhưng các hướng dẫn có thể nói,The answer must be a whole executable program.
Cody

1
main(i){i=puts("Goodbye Cruel World!")/0;}dải một byte tắt.
Ruslan

1
Bạn không cần i. puts("")/0;là một tuyên bố chính xác về mặt cú pháp.
rici

1
@rici Có, nhưng nó không bị sập (ít nhất là trên TIO).
Steadybox

1
@Steadybox: đó là tối ưu hóa cho bạn.
rici

11

SOGL , 15 25 17 byte / 2 = 8,5!

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

Giải trình:

...‘           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) sử dụng thực tế là SOGL sử dụng STDERR làm đầu ra gỡ lỗi, vì vậy trong đó có rất nhiều văn bản, cùng với dòng

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

Nếu bạn chuyển STDOUT của bản phác thảo Xử lý vào một tệp, "Tạm biệt thế giới tàn khốc!" Sẽ ở đó.


Vì thách thức đề cập đến " Các chuỗi Hello World!Goodbye Cruel World!không phân biệt chữ hoa chữ thường, nhưng nếu không thì sẽ xuất hiện chính xác như trên. ", Bạn có thể đánh mã mã của mình bằng cách loại bỏ hoàn toàn chức năng và chỉ xuất ra tất cả chữ thường.
Kevin Cruijssen

@KevinCruijssen oh huh, cảm ơn!
dzaima

10

> <> , 25 byte

"!dlroW leurC eybdooG">o<

Về cơ bản, nó thêm chuỗi vào ngăn xếp (Backwards, cuối cùng ở đầu ra) và sau đó thực hiện tương đương với:

while(1):
  pop the stack
  print the character

Khi không còn ký tự nào trên ngăn xếp (Toàn bộ chuỗi đã được in) xuất hiện ngăn xếp sẽ báo lỗi


+1. Đã đến #o<"Goodbye Cruel World!", về cơ bản là giống nhau.
hakr14

9

sed, 32 byte

iGoodbye Cruel World!
w/dev/full

ichèn một dòng và wghi vào một tập tin. /dev/fulltrong trường hợp này bởi vì tất cả ghi vào nó trở lại ENOSPC("Không còn chỗ trống trên thiết bị").

Nó vẫn cần một dòng đầu vào để làm việc, mặc dù.

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

3
Thậm chí không biết có tồn tại một thiết bị như vậy!
Ruslan

9

Lua, 31 , 30 byte

a=-print'Goodbye Cruel World!'

đầu tiên in ra 'Tạm biệt thế giới tàn nhẫn!' và sau đó gặp sự cố khi cố gắng thêm giá trị 0 và 0.

Đầu ra:

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

Tín dụng cho GalladeGuy cho ít hơn 1 byte


2
nó in ra 'Tạm biệt thế giới tàn khốc!' và sau đó sụp đổ mặc dù tôi chỉ nghĩ rằng nó chỉ đơn giản là phải sụp đổ để được chấp nhận.
eniallator

@Trebuchette Yêu cầu là "Chương trình của bạn phải in Goodbye Cruel World! Để xuất, rồi sụp đổ", OP không chỉ định liệu "đầu ra" có nghĩa là stderr, stdout, hộp thông báo hay bất kỳ nội dung nào ở trên không.
Pharap

@Pharap ơi, tôi hiểu rồi. STDERR chỉ quan trọng nếu bạn đang nhận tiền thưởng. Cảm ơn!
Trebuchette

@Trebuchette Không. Nó viết "Hoặc, như một thử thách xoắn thưởng, in Hello World! Và gặp sự cố với Goodbye Cruel World!". 'Tai nạn' không nhất thiết ngụ ý stderr, 'crash' cũng có thể có nghĩa (trong số những thứ khác) một ngoại lệ được ném ra. Trừ khi OP định nghĩa nó hơn nữa, nó sẽ mở để giải thích. Ngoài ra, một số ứng dụng của Lua không có khái niệm về stderr (ví dụ: Lua được nhúng làm ngôn ngữ kịch bản cho các trò chơi) và thay vào đó sẽ in vào hộp thông báo hoặc tệp nhật ký, v.v.
Pharap

1
Bạn có thể lưu một byte bằng cách thực hiện việc này thay vào đó:a=-print"Goodbye Cruel World!"
GalladeGuy

8

Trăn 3 | Điểm: 24,5! 23 22!

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

In "Hello World", hơn là sử dụng toán tử không hợp lệ '+' trên "Goodbye Cruel World!" đến phần tử trả về noneType. (cắt ra \ n \ r từ phiên bản trước)

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

Trăn 3 | Điểm: 34 30

+print("Goodbye Cruel World!")

In Tạm biệt, hơn là thực hiện thao tác unary + không hợp lệ trên kết quả in (Không có Loại)

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


+"Goodbye Cruel World!"ngắn hơn 3 byte và xuất ra TypeError.
Gábor Fekete

print("Goodbye Cruel World!")/0ngắn hơn cho cái thứ hai (3 byte?)
matjoyce

@matsjoyce Mình sợ rằng sẽ bị sập trước khi in. Nhưng vì nó được in trước, tôi sẽ chỉ đơn giản là in 'kết quả': 3
Tezra

24
2.585e + 22 là một số điểm khá lớn ... bạn có chắc là bạn không thể đánh gôn nhiều hơn không?
tuskiomi

1
@tuskiomi Cái '!' có nghĩa là điểm số cuối cùng được sửa đổi bởi thử thách tiền thưởng.
Tezra



6

CJam , 34 byte, điểm 17!

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

Hãy thử trực tuyến! (Xem bảng gỡ lỗi cho STDERR)

Giải trình

"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.

Trên TIO, nó tạo ra thông báo lỗi này:

"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

Bộ tiền xử lý, 27 byte

#error Goodbye Cruel World!

Đầu ra:

fatal error C1189: #error:  Goodbye Cruel World!

1
Bạn có thể rút ngắn hơn nữa chỉ với#Goodbye Cruel World!
cậu bé mai

@apricotboy Điều đó vẫn gây ra lỗi nhưng thông báo lỗi đầy đủ "tạm biệt thế giới tàn khốc" không được trình biên dịch (ít nhất là trên MSVC)
Govind Parmar

@Gorvind Parmar ah. Chà, nó chắc chắn làm trên gcc: i.imgur.com/qmGnoJv.png
cậu bé mai

6

APL (Dyalog) , 17,5 byte

Không có tiền thưởng, 20 byte

Goodbye Cruel World!

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

Lưu ý rằng mã không được trích dẫn, vì vậy APL cố gắng thực thi nó nhưng Worldkhông được xác định, gây ra sự cố GIÁ TRỊ LRI với dòng mã vi phạm có trong thông báo lỗi.

Với tiền thưởng, 35 2 = 17,5 byte

'Hello World!'
Goodbye Cruel World!

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

Đầu tiên in chuỗi yêu cầu, sau đó gặp sự cố như chương trình trên.

Phiên bản thưởng tinh vi hơn, 35 2 = 17,5 byte

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

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

In chuỗi đầu tiên, sau đó thả năm ký tự đầu tiên từ đó ( 5↓), sau đó nối chuỗi đó ( ,) thành tiền tố mới và sau đó thử thực thi ( ), gây ra lỗi tương tự như trên.


1
@ Tyoce Typo. Cảm ơn
Adám

5

Bash 20,5! 18,5!

Tôi sẽ không bash thạch, nhưng tôi có một chút bash của bash của tôi tại bash ra một kịch bản bash nhanh chóng. 18.5 không quá tệ đối với một ngôn ngữ không chơi gôn. (Lưu ý đây phải là một tập lệnh, bash tương tác sẽ cố gắng diễn giải !như một tra cứu lịch sử)

echo Hello World!
Goodbye\ Cruel\ $_

Trả về với mã lỗi 127 và:

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

Theo yêu cầu không có "... bất cứ nơi nào :). Theo đề xuất của apricot boytôi, bây giờ tôi tìm kiếm đối số cuối cùng của lệnh trước đó để lưu 4 byte.


Tôi đã cố gắng đánh bại bạn và thất bại với 21! byte. :) W=\ World\!;echo Hello$W;"Goodbye Cruel$W"
reitermarkus

1
Bạn có thể có thể thay đổi dòng thứ hai thành Goodbye\ Cruel\ !$, không phải 100% nhưng khá chắc chắn đó !$là "từ cuối cùng của lệnh cuối cùng"
cậu bé hoa mai

Nhưng chuyện gì sẽ xảy ra nếu một người thực thi tên là "Goodbye Cruel World!" tồn tại trong ĐƯỜNG? :)
nhổ

Đã xác minh OK trên TIO.run ... đánh bại câu trả lời zsh của tôi: /
roblogic

4

TeX, 19!

Hello World!#\bye Goodbye Cruel World!

Để buộc TeX thực sự tạo ra tệp dvi / pdf mà không cần can thiệp thủ công, hãy biên dịch với -interaction=nonstopmode.

Nó in Hello World!, đưa ra lỗi #khi sử dụng khi bạn không cần phải dừng và sau đó dừng biên dịch \bye. Tuy nhiên, bất cứ điều gì sau đó \byevẫn là đầu ra trong thông báo lỗi, vì vậy nó được áp dụng cho phần thưởng.


4

WinDBG (Gỡ lỗi hạt nhân cục bộ Windows XP / Vista), 33 byte

.echo Goodbye Cruel World!;.crash

Cảnh báo: Điều này sẽ làm sập toàn bộ máy, không chỉ chương trình.

Gỡ lỗi kernel cục bộ chỉ được phép trên Windows XP và Vista (nhưng không được bật theo mặc định trong Vista). Hộp thoại WinDBG về gỡ lỗi kernel cục bộ không đề cập đến bất kỳ HĐH Windows nào khác vì vậy tôi cho rằng nó thậm chí không thể được kích hoạt cho những cái đó. Có lẽ đối với các HĐH Windows khác, bạn có thể gắn vào một máy từ xa để gỡ lỗi kernel, nhưng đó là máy từ xa sẽ bị sập nên tôi không nghĩ giải pháp này được tính ở đó.


Gỡ lỗi kernel cục bộ cũng được hỗ trợ trên Windows 7 và tôi không nghe nói rằng nó đã bị xóa kể từ đó (nhưng tôi có thể đã bỏ lỡ nó).
Cody Grey

4

JS (ES5), 46/2 = 23 byte!

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

Cảnh báo Hello, World!, sau đó lỗi vớiUncaught TypeError: Cannot read property 'Goodbye Cruel World!' of undefined


4

PowerShell, 26 byte

'Goodbye Cruel World!';1/0

Tôi nghĩ chia cho 0 là cách dễ nhất để đưa ra lỗi.

PowerShell, 35/2 = 17,5 byte

"Hello World!";Goodbye Cruel World!

bởi TessellatingHeckler , đưa ra lỗi như vậy:

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!

Không nên $w='World!'(với một !)?
gmatht

"Hello World!";Goodbye Cruel World!là 17,5 byte, ném ra một ngoại lệ vì Goodbye không được nhận dạng là một lệnh và thông báo ngoại lệ bao gồm dòng đầy đủ để nó khớp với regex ..
TessellatingHeckler

1
Sử dụng logic giống như câu trả lời 17,5b, 'Goodbye Cruel World!';xsẽ tiết kiệm hai byte cho 24
Veskah



4

Node.js, Điểm: 25,5 24,5!

Đã lưu 1 điểm nhờ vào ETHproductions

Một chương trình đầy đủ chính xác về mặt cú pháp bị treo khi chạy vì console.log()không trả về hàm.

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

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


Đáng buồn thay, không có giai thừa cho 25.5...: ((
Ông Xcoder

@ Mr.Xcoder Đó là Gamma(26.5), như với định nghĩa Mathicala .
dùng202729

1
@ user202729 ai nói Mathicala không bị hỏng? :)))
Ông Xcoder

Bạn có thể loại bỏ X(và thậm chí có thể là dòng mới)?
Sản phẩm ETH

@ETHproductions Có thực sự. Cảm ơn!
Arnauld

3

Aceto , điểm: 21,5!

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

In Hello World!, sau đó gặp sự cố với

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

Bình thường, 28 24 byte

"GOODBYE CRUEL WORLD!"hY

In một chuỗi, sau đó cố gắng để có được phần tử đầu tiên của danh sách trống.

Thử đi!


3

AHK, 50/2 = 25! (không cạnh tranh)

Không cạnh tranh vì một yêu cầu bổ sung làm cho câu trả lời không hợp lệ. Tôi không thể tìm cách biên dịch, xuất văn bản và sập. Bất cứ điều gì tôi cố gắng đều thất bại ít nhất một trong những yêu cầu đó.


Send,Hello World!
OutputDebug,Goodbye Cruel World!

Đây là giải pháp nhàm chán nhất mà tôi có thể nghĩ ra. Nó không thực sự sụp đổ nhưng về mặt kỹ thuật không phải là một yêu cầu. Tất cả những gì nó phải làm là xuất một thông báo ra cửa sổ gỡ lỗi. Nó làm điều đó bởi vì tôi bảo nó làm như vậy.


Điều này hiện không hợp lệ. OP tuyên bố rằng chương trình phải bị sập nếu ngôn ngữ có khả năng nếu đó là AHK.
internet_user

@pycoder À, đã được thêm 40 phút sau khi tôi đăng. Tôi sẽ cập nhật cho quy tắc mới nhưng nó sẽ tốn byte.
Kỹ sư Toast

3

Japt , 22 byte

°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

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

Đã lưu 3 byte nhờ obarakon và ETHproductions


Bạn có thể nén chuỗi bằng cách sử dụng Oc"<string>"và sau đó thay thế chuỗi hiện tại bằng phiên bản đã nén và được bao quanh bởi các backticks.
Lu-ca

Một lời giải thích sẽ tốt đẹp.
iFreilicht

1
@iFreilicht giải thích thêm.
Tom

3

C #, 116/2 = 58 byte!

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

Phiên bản bình thường cho 94 87 byte:

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

Đã lưu 7 byte nhờ @KevinCruijssen.


int n=0;n/=n;là ngắn hơn cho câu trả lời đầu tiên của bạn.
Kevin Cruijssen

@KevinCruijssen Điểm hay, tôi đã gặp rắc rối với việc biên dịch nó mà không chia cho lỗi không liên tục.
TheLethalCoder

Vâng, trong Java bạn chỉ có thể làm int n=1/0;, nhưng dường như điều đó không thể thực hiện được trong C # (đây thực sự là một điều tốt cho ngôn ngữ, nhưng lại không tốt cho việc mã hóa). Btw, tại sao không phải là tiền thưởng ở đầu? Cái đó ngắn hơn.
Kevin Cruijssen

@KevinCruijssen Tôi không chắc nó có đủ điều kiện hay không vì tôi không rõ khi tôi đăng câu trả lời của mình, vì nó đã được làm rõ thêm tôi đã chuyển chúng xung quanh.
TheLethalCoder

3

Thạch , 10,5! byte

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

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

Điều này khai thác hành vi không xác định, sử dụng chuỗi Python (chuỗi) thay vì chuỗi Jelly (danh sách chuỗi 1-char). Việc chuyển đổi được thực hiện bằng cách giảm chuỗi Jelly bằng cách thêm vào và Python +nối liền hai chuỗi, vì vậy hai chuỗi được thêm vào với nhau là Python-khôn ngoan được nối. Sau đó, nó sử dụng đơn vị (phạm vi) thích hợp để Python intđược gọi trên chuỗi, dẫn đến một lỗi luôn chứa Goodbye Cruel World!.

Giải trình:

“,ḷṅḳȦ»¹“¿µƝɓṭỵ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 byte / 2 = 21!

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

Tiết kiệm được nửa byte với sự trợ giúp của Alexis Andersen, bằng cách thay thế "String"/0bằng -"String". Điều này chỉ "hoạt động" với các phiên bản Ruby thấp hơn 2.3, trong đó phương thức trừ đơn nguyên đã thực sự được thêm vào lớp String!

Với Ruby <2.3:

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

Với 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)

bạn có thể tiết kiệm (một nửa) một byte bằng cách sử dụng -trên chuỗi thay vì /tức là-"Goodbye crueld World!"
Alexis Andersen

@AlexisAndersen cảm ơn! Hôm nay tôi cũng đã tìm hiểu về một phương thức mới trong lớp String (xem bài đăng cập nhật)
daniero

3

Mã nhị phân x86-64 (với các cuộc gọi hệ thống Linux), 43 byte

Tháo gỡ:

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

Chương trình này gói dữ liệu cần thiết (chuỗi "Goodbye Cruel World!\n") vào mã riêng của nó. Nó tải một con trỏ tới chuỗi đó bằng cách sử dụng ripđịa chỉ tương đối và gọi writetrực tiếp tòa nhà thay vì thông qua trình bao bọc glibc, do đó nó hoàn toàn độc lập với vị trí và chúng ta có thể dễ dàng kiểm tra nó bằng cách nhúng mã vào constchuỗi và truyền chuỗi đó vào hàm con trỏ. Để đánh sập chương trình, tôi kết thúc nó bằng mộthlt lệnh, với các đặc quyền của vòng 0 sẽ làm im lặng bộ xử lý mãi mãi (hoặc ít nhất là cho đến khi ngắt tiếp theo xuất hiện), nhưng với các đặc quyền của vòng 3 (điển hình cho các chương trình người dùng), chúng tôi sẽ giảm được rất nhiều kịch tínhSegmentation Fault .

Chương trình kiểm tra:

#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;
}

Đầu ra:

Code bytes: 43
Now running the code:

Goodbye Cruel World!
Segmentation fault

Lưu ý rằng mã 43 byte một chương trình hoàn chỉnh như được chỉ định bởi thử thách, không chỉ là một hàm. Nó không phụ thuộc vào mainchức năng của chương trình thử nghiệm để hoạt động chính xác; nó vẫn sẽ in chuỗi và sập nếu được tải và nhảy trực tiếp bởi trình tải.


Lưu một vài byte bằng cách sử dụng push/ popđể tải các thanh ghi. Ví dụ, hai hướng dẫn đầu tiên có thể là push 1+ pop rax, ngắn hơn 1 byte. Sau đó, hai hướng dẫn tiếp theo có thể được thay thế bằng mov edi, eax, ngắn hơn 2 byte. Cùng push/ popmẹo có thể được áp dụng cho hướng dẫn 6 và 7: push 0x15+ pop rdx.
Cody Grey


3

Pyth , 38/2 = 19 byte! 36/2 = 18 byte!

"Hello World!"v"Goodbye Cruel World!

Kiểm tra nó trực tuyến!

Giải thích

Nó in Hello World! , sau đó thử đánh giáGoodbye Cruel World! . Nó không làm điều đó, bởi vì chuỗi đó không phải là một mã hợp lệ.

Kết quả là:

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
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.