"Chào thế giới!"


419

Vì vậy, ... ờ ... điều này hơi xấu hổ. Nhưng chúng ta không có một câu "Xin chào, Thế giới!" thách thức chưa (mặc dù có 35 biến thể được gắn thẻ và đếm). Mặc dù đây không phải là môn đánh gôn thú vị nhất trong các ngôn ngữ phổ biến, nhưng việc tìm ra giải pháp ngắn nhất trong một số esolang nhất định có thể là một thách thức nghiêm trọng. Ví dụ, theo hiểu biết của tôi, không biết liệu giải pháp Brainfuck ngắn nhất có thể đã được tìm thấy chưa.

Hơn nữa, trong khi tất cả Wikipedia (mục Wikipedia đã bị xóa nhưng có một bản sao tại archive.org ), esolangRosetta Code có danh sách "Xin chào, Thế giới!" các chương trình, không ai trong số này quan tâm đến việc có thời gian ngắn nhất cho mỗi ngôn ngữ (cũng có kho lưu trữ GitHub này ). Nếu chúng tôi muốn trở thành một trang web quan trọng trong cộng đồng golf mã, tôi nghĩ chúng ta nên thử và tạo ra danh mục cuối cùng ngắn nhất "Xin chào, Thế giới!" các chương trình (tương tự như cách thử thách quine cơ bản của chúng tôi chứa một số câu hỏi ngắn nhất được biết đến trong các ngôn ngữ khác nhau). Vì vậy, hãy làm điều này!

Những quy định

  • Mỗi bài nộp phải là một chương trình đầy đủ.
  • Chương trình phải không có đầu vào và in Hello, World!ra STDOUT (luồng byte chính xác này, bao gồm cả viết hoa và dấu chấm câu) cộng với một dòng mới theo dõi tùy chọn và không có gì khác.
  • Chương trình không được ghi bất cứ điều gì vào STDERR.
  • Nếu bất cứ ai muốn lạm dụng điều này bằng cách tạo ra một ngôn ngữ mà chương trình trống in ra Hello, World!, thì xin chúc mừng, họ chỉ cần mở đường cho một câu trả lời rất nhàm chán.

    Lưu ý rằng phải có một thông dịch viên để trình có thể được kiểm tra. Được phép (và thậm chí được khuyến khích) tự viết trình thông dịch này cho một ngôn ngữ chưa được thực hiện trước đó.

  • Đệ trình được tính bằng byte , trong một mã hóa thích hợp (tồn tại trước), thường (nhưng không nhất thiết) UTF-8. Một số ngôn ngữ, như Thư mục , hơi khó để ghi điểm - nếu nghi ngờ, vui lòng hỏi trên Meta .
  • Đây không phải là về việc tìm kiếm các ngôn ngữ với ngắn nhất "Hello, World!" chương trình. Đây là về việc tìm kiếm ngắn nhất "Xin chào, thế giới!" chương trình trong mọi ngôn ngữ. Do đó, tôi sẽ không đánh dấu bất kỳ câu trả lời nào là "được chấp nhận".
  • Nếu ngôn ngữ bạn chọn là một biến thể tầm thường của ngôn ngữ khác (có khả năng phổ biến hơn) đã có câu trả lời (nghĩ theo phương ngữ BASIC hoặc SQL, shell Unix hoặc dẫn xuất Brainfuck tầm thường như Alphuck), hãy xem xét thêm ghi chú vào câu trả lời hiện có cùng hoặc một giải pháp rất giống nhau cũng là ngắn nhất trong ngôn ngữ khác.

Là một lưu ý phụ, vui lòng không tải xuống các câu trả lời nhàm chán (nhưng hợp lệ) bằng các ngôn ngữ không có nhiều để chơi gôn - những câu hỏi này vẫn hữu ích cho câu hỏi này khi nó cố gắng biên dịch một danh mục đầy đủ nhất có thể. Tuy nhiên, chủ yếu thực hiện các câu trả lời trong các ngôn ngữ mà các tác giả thực sự phải nỗ lực để đánh gôn.

Để có cảm hứng, hãy kiểm tra Hello World Collection .

Danh mục

Đoạn trích Stack ở cuối bài đăng này tạo ra danh mục từ các câu trả lời a) dưới dạng danh sách các giải pháp ngắn nhất cho mỗi ngôn ngữ và b) dưới dạng bảng xếp hạng tổng thể.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

## Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Nếu bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ của thông dịch viên), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

## Perl, 43 + 2 (-p flag) = 45 bytes

Bạn cũng có thể đặt tên ngôn ngữ thành liên kết sau đó sẽ hiển thị trong đoạn trích:

## [><>](https://esolangs.org/wiki/Fish), 121 bytes


2
@isaacg Không, không. Tôi nghĩ rằng sẽ có một số ngôn ngữ thú vị mà việc kiểm tra tính nguyên thủy là không thể.
Martin Ender

6
Nếu cùng một chương trình, chẳng hạn như "Hello, World!", là ngắn nhất trong nhiều ngôn ngữ khác nhau và không liên quan, nó có nên được đăng riêng?
aditsu

2
@ mbomb007 Theo mặc định, nó bị ẩn bởi vì ba khối mã chiếm rất nhiều không gian. Tôi có thể thu nhỏ chúng sao cho chúng là một dòng duy nhất, nhưng tôi muốn giữ mã duy trì trong trường hợp có lỗi.
Martin Ender

7
@ETHproductions "Không giống như các quy tắc thông thường của chúng tôi, vui lòng sử dụng ngôn ngữ (hoặc phiên bản ngôn ngữ) ngay cả khi nó mới hơn thử thách này." Xuất bản ngôn ngữ thực hiện trước khi đăng nó chắc chắn sẽ hữu ích.
Martin Ender

2
@MartinEnder ... Hầu như. Nếu hai giải pháp BF có cùng kích thước, thì một giải pháp có thứ tự từ điển nhỏ hơn sẽ lấy số byte nhỏ hơn trong Unary. Tất nhiên, giải pháp Unary nhỏ nhất được dịch sang BF được đảm bảo là nhỏ nhất.
dùng202729

Câu trả lời:


442

Bị kẹt, 0 byte

Chà, không thể rút ngắn hơn thế nữa ... Một chương trình trống sẽ xuất ra Hello, World!trong Stuck .


57
Chết tiệt, tôi đã trễ 20 phút! : P
Kade

33
Noooo c'mon súng nhanh nhất trong hiệu ứng phía tây;)
Beta Decay

30
@Zuck Vâng, Stuck được tạo ra để chơi gôn, giống như CJam / GolfScript / Pyth. Thứ Hello, World!này chỉ là thứ tôi đã đặt vào vị trí đầu tiên trong quá trình phát triển. Tôi đã không có ý định để nó quá lâu, chỉ là không bao giờ có thể gỡ bỏ nó.
Kade

132
Tôi đã cố gắng đưa ra một giải pháp ngắn hơn, nhưng tôi bị mắc kẹt.
Cyoce

51
-1 byte trong jQuery. Bạn đã thử jQuery chưa?
10 câu trả lời

244

PHP, 13 byte

Hello, World!

Đúng. Nó hoạt động.


261
Như thường lệ với PHP, bạn luôn tự hỏi làm thế nào nó có thể hoạt động
Fatalize

95
Tất nhiên, nó hoạt động vì không có <?phpmã, khiến nó không được PHP giải thích chút nào :)
Lynn

58
Điều đó có nghĩa đây chỉ là một câu trả lời HTML ...
Nelson

82
@Nelson không, nó không. PHP không nhất thiết phải được đặt vào HTML. Và hơn nữa, HTML không in ra thiết bị xuất chuẩn
georgeunix

26
Đây là câu trả lời vui nhộn nhất từ ​​trước đến nay
Oliver Ni

241

Brainfuck, 78 byte

Tiền thưởng kết thúc mở: Nếu bất cứ ai có thể cải thiện điểm số này, tôi sẽ chuyển tiền thưởng (+500) cho họ. @KSabđã tìm thấy mộtgiải pháp 76 72 byte!

--<-<<+[+[<+>--->->->-<<<]>]<<--.<++++++.<<-..<<.<+.>>.>>.<<<.+++.>>.>>-.<<<+.

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

28 byte đầu tiên --<-<<+[+[<+>--->->->-<<<]>]khởi tạo băng với mối quan hệ lặp lại sau (mod 256):

f n = 171 · (-f n-1 - f n-2 - f n-3 + 1) , với f 0 = 57 , f 1 = 123f 2 = 167 .

Hệ số 171 phát sinh vì 3 -1 171 (mod 256) . Khi giá trị hiện tại được dịch, một ô trở lại (thông qua <+>---) trừ đi 3 lần mỗi lần nhân giá trị hiệu quả lên 171.

Tại n = 220 , giá trị được dịch là 0 và lặp lại dừng. Mười byte trước điểm dừng là như sau:

[130, 7, 43, 111, 32, 109, 87, 95, 74, 0]

Điều này chứa tất cả các thành phần cần thiết để sản xuất Hello, World!, theo kiểu săn tìm, với những điều chỉnh nhỏ.

Tôi cũng đã tìm thấy một giải pháp 78 byte thay thế:

-[++[<++>->+++>+++<<]---->+]<<<<.<<<<-.<..<<+.<<<<.>>.>>>-.<.+++.>>.>-.<<<<<+.

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

Tôi coi cái này tốt hơn cái đầu tiên vì nhiều lý do: nó sử dụng ít ô còn lại của nhà, nó sửa đổi tổng số ô ít hơn và chấm dứt nhanh hơn.


Thêm chi tiết

Quan hệ tái phát có những đại diện ngắn gọn đáng ngạc nhiên trong Brainfuck. Bố cục chung như sau:

{...s3}<{s2}<{s1}[[<+>->{c1}>{c2}>{c3...}<<<]>{k}]

đại diện:

f n = c 1 · f n-1 + c 2 · f n-2 + c 3 · f n-3 + ... + k

với

f 0 = s 1 , f 1 = s 2 + c 1 · f 0 + k , f 2 = s 3 + c 2 · f 0 + c 1 · f 1 + k , v.v.

Ngoài ra, <+>có thể thay đổi để nhân phạm vi với một hằng số mà không ảnh hưởng đến điểm dừng và một thuật ngữ có thể được thêm vào trước khi >{k}thay đổi phạm vi theo một hằng số, một lần nữa mà không ảnh hưởng đến điểm dừng.


Những ví dụ khác

Chuỗi Fibonacci

+[[<+>->+>+<<]>]

Số N-gonal

Số tam giác

+[[<+>->++>-<<]>+]

Được xác định là f n = 2 · f n - 1 - f n - 2 + 1 , với f 0 = 0 , f 1 = 1 .

Số vuông

+[[<+>->++>-<<]>++]

Số ngũ giác

+[[<+>->++>-<<]>+++]

Vân vân.


BF giòn

Tôi đã xuất bản mã mà tôi đã sử dụng để tìm một số giải pháp này trên github . Yêu cầu .NET 4.0 trở lên.

Usage: bfcrunch [--options] text [limit]

Arguments
------------------------------------------------------------
  text              The text to produce.
  limit             The maximum BF program length to search for. If zero, the length of the
                    shortest program found so far will be used (-r). Default = 0

Options
------------------------------------------------------------
  -i, --max-init=#  The maximum length of the initialization segment. If excluded, the
                    program will run indefinitely.
  -I, --min-init=#  The minimum length of the initialization segment. Default = 14
  -t, --max-tape=#  The maximum tape size to consider. Programs that utilize more tape than
                    this will be ignored. Default = 1250
  -T, --min-tape=#  The minimum tape size to consider. Programs that utilize less tape than
                    this will be ignored. Default = 1
  -r, --rolling-limit
                    If set, the limit will be adjusted whenever a shorter program is found.
  -?, --help        Display this help text.

Đầu ra được đưa ra trong ba dòng:

  1. Tổng thời lượng của chương trình được tìm thấy và phân đoạn khởi tạo.
  2. Đường dẫn được thực hiện, bắt đầu với con trỏ băng hiện tại. Mỗi nút tương ứng với một ký tự đầu ra, được biểu diễn dưới dạng (con trỏ, chi phí).
  3. Sử dụng phân khúc băng.

Ví dụ: kết quả cuối cùng cho bfcrunch "hello world" 70 -r -i23:

64: ++++[[<+>->+++++>+<<]>]
49, (45, 5), (44, 3), (45, 6), (45, 1), (45, 4), (42, 4), (43, 5), (45, 3), (45, 4), (46, 2), (44, 4)
32, 116, 100, 104, 108, 132, 0, 0, 132, 0

Điều này tương ứng với chương trình đầy đủ:

++++[[<+>->+++++>+<<]>]<<<<.<+.>++++..+++.<<<.>+++.>>.+++.>.<<-.

Hồ sơ khác

Chào thế giới!

Gói, 78 byte :

--<-<<+[+[<+>--->->->-<<<]>]<<--.<++++++.<<-..<<.<+.>>.>>.<<<.+++.>>.>>-.<<<+.

hoặc là

-[++[<++>->+++>+++<<]---->+]<<<<.<<<<-.<..<<+.<<<<.>>.>>>-.<.+++.>>.>-.<<<<<+.

Không gói, 87 byte (trước đây là 92 byte (mitchs) ):

--->->->>+>+>>+[++++[>+++[>++++>-->+++<<<-]<-]<+++]>>>.>-->-.>..+>++++>+++.+>-->[>-.<<]

Chào thế giới!

Gói, 80 byte :

++<-[[<+>->+>--->-<<<]>+++]>+.<<<<<<<++.>>>..>.<<--.<<<--.>>+.>>>.+++.<.<<<-.<+.

Không gói, 81 byte (trước đây là 92 byte (hirose) ):

+>---->->+++>++>->+[++++++++[>++++++++>>+++++<<<-]<]>>.>++>.>..+>>.+>-->--[>-.<<]

Chào thế giới!

Bao bọc, 74 byte :

-<++[[<+>->->+++>+<<<]->]<<.---.<..<<.<<<---.<<<<-.>>-.>>>>>.+++.>>.>-.<<.

Không gói, 84 byte :

---->+++>++>->->++[+++++++[>+++++[>++>>+<<<-]<-]++<]>>>>.---.>---..+>->.+>-->+>[-.<]

Phiên bản Esolang

Xin chào thế giới! \ N

Bao bọc, 76 byte :

+[++[<+++>->+++<]>+++++++]<<<--.<.<--..<<---.<+++.<+.>>.>+.>.>-.<<<<+.[<]>+.

Điều này sử dụng một ô còn lại của nhà, và do đó sẽ được coi là 77.

Không gói, 83 byte :

->+>>>+>>---[++++++++++[>++++++>+++>+<<<-]-<+]>+>+.>.->--..>->-.>[>.<<]>[+>]<<.>++.

Rdebath đã được phê duyệt . đầu ra profilebf:

Hello World!
Program size 83
Final tape contents:
 :   0   0  73 101 109 115 112  88  33  10   0
                                         ^
Tape pointer maximum 10
Hard wrapping would occur for unsigned cells.
Counts:     +: 720          -: 79           >: 221          <: 212
Counts:     [: 9            ]: 84           .: 13           ,: 0
Total:         1338

đảo ngược.ru (Peter Karpov)

Chào thế giới!

Bao bọc, 70 byte (trước đây là 78 1 ):

+[++[<+++>->+++<]>+++++++]<<<--.<.<--..<<---.<+++.<+.>>.>+.>.>-.<<<<+.

Không gói, 77 byte (trước đây là 89?):

->+>>>+>>-[++++++[>+++++++++>+++++>+<<<-]<+]>>.>--.->++..>>+.>-[>.<<]>[>]<<+.

Tác giả cho rằng đoạn mã ngắn nhất "Hello World!" là 89 byte, nhưng không cung cấp tài liệu tham khảo. Tôi cũng yêu cầu hồ sơ cho việc này.

Chào thế giới!

Bao bọc, 65 byte (trước đây là 66 byte):

+++[>--[>]----[----<]>---]>>.---.->..>++>-----.<<<<--.+>>>>>-[.<]

Điều này thực sự cũng được mã hóa bằng tay (tốt nhất tôi có thể tìm thấy bằng cách crunching là 68 byte ). Ô đầu tiên được khởi tạo thành 259 (3) và giảm 7 lần mỗi lần lặp, lặp lại 37 lần. Ô tiếp theo được giảm đi 6, kết quả là 256 - 6 · 37 = 34 . Phần còn lại của các ô được giảm 4 lần mỗi lần, thêm một ô mỗi lần lặp, với mỗi ô mới được inialized thành 252 (-4). Kết quả là như sau:

[  3,   0,   0,   0,   0,   0,   0, ...]
[252, 250, 248,   0,   0,   0,   0, ...]
[245, 244, 244, 248,   0,   0,   0, ...]
[238, 238, 240, 244, 248,   0,   0, ...]
[231, 232, 236, 240, 244, 248,   0, ...]
[224, 226, 232, 236, 240, 244, 248, ...]
...
[ 35,  64, 124, 128, 132, 136, 140, ...]
[ 28,  58, 120, 124, 128, 132, 136, ...]
[ 21,  52, 116, 120, 124, 128, 132, ...]
[ 14,  46, 112, 116, 120, 124, 128, ...]
[  7,  40, 108, 112, 116, 120, 124, ...]
[  0,  34, 104, 108, 112, 116, 120, ...]

1 Giải pháp đã cho (79 byte) có thể được giảm đáng kể bằng một:

-[>>+>+[++>-<<]-<+<+]>---.<<<<++.<<----..+++.>------.<<++.>.+++.------.>>-.<+.

39
Đây là các loại hạt. Một trong số các bạn nên gửi phiên bản 82 byte cho golf vô chính phủ.
Martin Ender

117
Giải pháp Java tốt nhất cho câu hỏi này là 76 byte. Chỉ còn 9 byte nữa để chứng minh các nhà phát triển Java nên chuyển sang Brainfuck.
Cấp sông St

9
@LevelRiverSt Một chữ cái nhỏ ngắn hơn 2 byte so với Java. Thời gian kết thúc đã đến.
Conor O'Brien

13
"Chỉ còn 9 byte nữa để chứng minh các nhà phát triển Java nên chuyển sang Brainfuck." interface a{static void main(String[]A){System.out.print("No!");}}
dorukayhan


222

ArnoldC , 71 byte

IT'S SHOWTIME TALK TO THE HAND "Hello, World!" YOU HAVE BEEN TERMINATED

Chỉ dành cho lols ..


4
Đã làm cho tôi. Hãy thử đặt giờ chiếu ở dòng đầu tiên và bạn đã bị chấm dứt ở dòng cuối cùng
JelloDude

72
Tôi thực sự cần phải học cách sử dụng ngôn ngữ này.
Buzz

3
Không phải một không gian và một dòng mới có cùng số byte? Và về mặt kỹ thuật, IT'S SHOWTIMETALK TO THE HANDnên ở dòng đầu tiên và cuối cùng.
wizzwizz4

5
@AlCode Nhưng nó chính xác hơn và chiếm cùng số byte và có nhiều khả năng tương thích hơn và nó trông đẹp hơn và tại sao tôi lại làm ầm lên đây là một thử thách golf mã trên PPCG và thật ngạc nhiên khi mã của bạn có thể đọc được và tốt bạn đã thực hiện một câu trả lời tốt có thể đọc được và +1.
wizzwizz4

11
@ wizzwizz4 cảm ơn bạn rất nhiều, tôi cố gắng trở nên chuyên nghiệp nhất có thể với ArnoldC ngôn ngữ của tương lai!
AlCode

204

Hạt giống , 6016 4234 4203 byte

20 854872453003476740699221564322673731945828554947586276010721089172712854441839676581917455319274850944955030258951339804246125714958815519550291630078076933441706558540342671975808828643360922071900333028778314875248417953197990571991784126564752005357199892690656368640420204822142316716413192024742766282266114842280731756458212469988291309261528542889299297601723286769284159107438930448971911102280330101196758384815655479640836157495863547199726234352265518586460633795171196315255736880028338460236768181141732764911402112878175632130129852788301009582463631290071329795384336617491655825493435803011947670180368458659271192428341035912236946048939139042310380278430049252171822721598175984923434205610723412240162418996808671543770639111617709604242882388664919702606792443015941265168129550718541372361144081848761690730764968771245566074501485020726368378675085908872608679630368472956274468410052703615106090238423979678950131481176272880569100533049143775921798055136871254424261001442543122666701145111965968366507060931708140304772342855064834334129143038575569044150428480231956133612367393837580345180691911525531699573096952433882387811884727975431823620782822755161559988205401134640722220804177812794328129589949692446031008866917615922944976151073653201316255518389496411696741029209242119521978920200314572718584995265523235225587228975886710511855501710470163649632761488899317729943053884132314641377747687975638119132094777769497069556255954031537245957811105217875011509899497752696062748928963281605780942517262774976217663461063680912331030221981433051827519906741285738915397005702326447635845195923640649166530310494885569783989508000344280715868581532826832242144647203531393142251025361866506821695860883605004105862208004440476654027574832078603305884731766236740069411566854496824754558761536201352147934963241039597221404341132342297870517293237489233057335406510464277610336142382379135365550299895416613763920950687921780736585299310706573253951966294045814905727514141733220565108490291792987304210662448111170752411153136765318541264632854767660676223663544921028492602135525959428999005153729028491208277493747933069008199074925710651071766675870081314909460661981433426167330215548196538791617762566403934129026219366764038390123622134753742930729751695349588862441999672547791630729398908283091638866715502470152431589429837867944760012419885615525232399584379209285060418518373512154801760060312646951597932345591416241634668119867158079946680321131213357200382937049485606706114467095019612014749723443159443363662563254359712162432143334612180576945072905749883870150120687696027984317320305291407322779803583395375616762530641605634303022155218169343410634115050596030685041633824154135240376022159918501703555881290333205131375705406831260759974112248490451605422031345264183102048614606636275942039438138959188478277971377232005036301145411215067576576667743288951344423152531417111852584846747428443123174595987315325304540564683047858415059703724263652136185848573853965992798725654430360647040362341567082462847275277303225817689141675391972818943419663764371222973269129542760661385278009266471167618553065823580448848795731295589715602705860758954890415040763604082216728159486423396295188510311881004469017351709060492844398219491990895826924575575549615118821417543037296628825303328056839433114519945243963946989899508355224823109677424196639930153649890175062456649384605721510239142861693109687536600667811037619175927995599388547421689316110236566026931360164495251160997857372500940728057700473763884480342708897319990346726967220426504612260565552531158509215849649565188655100774748485416791517853427613458459889062942881409801879085054494129489535044719193283409051007851153504224002807392992520076910314763705776345053922387355156981872691537772657428096384535960466923475731297217863371650154415835785630016335858514130863258775100537612371430357576913148500310344278511588325852376442503898849856566716198848377379400158332792027967216204970114516984638014129252882482309132898416484525230488700253065644547798869056136044415413099076332059572505138116227535024546891015836838323022822272664771489129085797354578016574544759934333471793

Chương trình Befunge-98 kết quả (dựa trên điều này ) là

"9!dlroW ,olleH"ck,@

35
Ồ Làm thế nào bạn tìm thấy điều này?
Sản phẩm ETH

31
Có gì . Điều đó thật điên rồ.
Conor O'Brien

47
BẠN ĐÃ LÀM GÌ NÀY?
Lemon phá hủy

40
Bạn đã đảo ngược kỹ sư twers mersenne? Và điều này có bất kỳ ý nghĩa bảo mật?
Primo

68
Tôi sẽ cung cấp cho bạn thêm 500 điểm để được giải thích chi tiết (lý thuyết).
primo

156

Lưỡi liềm Mornington , 3614 3568 byte

Cảm ơn NieDzejkob vì đã lưu 46 byte bằng cách sử dụng tên dòng ngắn hơn.

Take Northern Line to Hendon Central
Take Northern Line to Bank
Take Circle Line to Bank
Take District Line to Gunnersbury
Take District Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take Circle Line to Victoria
Take Circle Line to Bank
Take Circle Line to Hammersmith
Take Circle Line to Cannon Street
Take Circle Line to Hammersmith
Take Circle Line to Cannon Street
Take Circle Line to Bank
Take Circle Line to Hammersmith
Take District Line to Upminster
Take District Line to Hammersmith
Take District Line to Upminster
Take District Line to Gunnersbury
Take District Line to Paddington
Take District Line to Acton Town
Take Piccadilly Line to Holloway Road
Take Piccadilly Line to Acton Town
Take District Line to Acton Town
Take District Line to Gunnersbury
Take District Line to Hammersmith
Take Circle Line to Notting Hill Gate
Take District Line to Upminster
Take District Line to Notting Hill Gate
Take District Line to Upminster
Take District Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take Circle Line to Victoria
Take District Line to Upminster
Take District Line to Gunnersbury
Take District Line to Mile End
Take District Line to Hammersmith
Take Circle Line to Notting Hill Gate
Take District Line to Upminster
Take District Line to Upminster
Take District Line to Mile End
Take District Line to Paddington
Take Circle Line to Paddington
Take District Line to Acton Town
Take Piccadilly Line to Heathrow Terminals 1, 2, 3
Take Piccadilly Line to Holborn
Take Central Line to Holborn
Take Central Line to Mile End
Take District Line to Upminster
Take District Line to Hammersmith
Take District Line to Upminster
Take District Line to Barking
Take District Line to Hammersmith
Take District Line to Upminster
Take District Line to Gunnersbury
Take District Line to Barking
Take District Line to Gunnersbury
Take District Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Wood Lane
Take Circle Line to Victoria
Take Circle Line to Victoria
Take District Line to Gunnersbury
Take District Line to Hammersmith
Take District Line to Upminster
Take District Line to Gunnersbury
Take District Line to Paddington
Take Circle Line to Paddington
Take District Line to Mile End
Take Central Line to Fairlop
Take Central Line to Mile End
Take District Line to Barking
Take District Line to Upminster
Take District Line to Upminster
Take District Line to Hammersmith
Take Circle Line to Notting Hill Gate
Take District Line to Upminster
Take District Line to Mile End
Take District Line to Gunnersbury
Take District Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Hammersmith
Take District Line to Mile End
Take District Line to Richmond
Take District Line to Mile End
Take District Line to Paddington
Take Circle Line to Paddington
Take District Line to Richmond
Take District Line to Bank
Take Circle Line to Hammersmith
Take District Line to Upminster
Take District Line to Stepney Green
Take District Line to Hammersmith
Take District Line to Stepney Green
Take District Line to Upney
Take District Line to Notting Hill Gate
Take Circle Line to Notting Hill Gate
Take Circle Line to Notting Hill Gate
Take District Line to Upminster
Take District Line to Upney
Take District Line to Upminster
Take District Line to Bank
Take Circle Line to Bank
Take Northern Line to Charing Cross
Take Bakerloo Line to Charing Cross
Take Bakerloo Line to Paddington
Take Circle Line to Bank
Take Circle Line to Bank
Take Northern Line to Mornington Crescent

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

Điều này chắc chắn là tối ưu, nhưng nó chỉ bằng một nửa so với giải pháp trên esolang.

Hello, World được xây dựng thông qua việc cắt các tên trạm sau và nối các kết quả:

Hendon Central
▀▀
Holloway Road
  ▀▀▀
Heathrow Terminals 1, 2, 3
                       ▀▀
Wood Lane
▀▀
Fairlop
   ▀▀
Richmond
       ▀

Cuối cùng, tôi đang tính mã nhân vật !(2<<4)+1 == 33. Tất cả các bộ phận này được ghép nối trong Paddington và cuối cùng được in bằng Mornington Crescent.

Lưu ý: Ngôn ngữ không chỉ định liệu có thể di chuyển đến cùng một trạm hai lần liên tiếp hay không, nhưng trình thông dịch không cho phép, vì vậy tôi đã sử dụng ngôn ngữ đó.


44
Điều này thực sự tuyệt vời : D
Beta Decay

32
Tôi yêu ngôn ngữ này. Xin lỗi, trong khi tôi làm lập trình hệ thống bằng ngôn ngữ này.
mèo

4
Ở đâu trên EARTH ngôn ngữ này là tất cả cuộc sống của tôi?
ScottMcG sẵn sàng

30
@ScottMcG sẵn giữa Camden Town và Euston.
Martin Ender

3
Mornington Crescent hiện có trên TIO. tio.run/#mornington-crescent
Dennis

123

ác , 70 byte

aeeeaeeewueuueweeueeuewwaaaweaaewaeaawueweeeaeeewaaawueeueweeaweeeueuw

Nó sử dụng bốn lệnh sau:

a - increment the register
u - decrement the register
e - interweave the register's bits (01234567 -> 20416375)
w - write the value of the register as an ASCII character

61
Điều đó thật xấu xa ...
David Grinberg

61
Đặc biệt vì avatar của bạn là Black Hat.
TheDoctor

5
bạn có thể giải thích cho tôi quá trình đan xen
Kishan Kumar

4
@KishanKumar vâng
GRC

30
Nếu bạn đọc to chương trình này, nó nghe như tiếng bass dubstep.
Joe Z.

112

Brainfuck, 72 byte

+[-->-[>>+>-----<<]<--<---]>-.>>>+.>>..+++[.>]<<<<.+++.------.<<-.>>>>+.

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

Và giải pháp 76 byte không gói ban đầu :

+[+[<<<+>>>>]+<-<-<<<+<++]<<.<++.<++..+++.<<++.<---.>>.>.+++.------.>-.>>--.

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

Các giải pháp được biết đến ngắn nhất (theo hiểu biết của tôi) tôi đã tìm thấy

'Chào thế giới!' 77 byte:

+[+++<+<<->>>[+>]>+<<++]>>>>--.>.>>>..+++.>>++.<<<.>>--.<.+++.------.<<<-.<<.

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

'Chào thế giới!' 70 byte:

+[>>>->-[>->----<<<]>>]>.---.>+..+++.>>.<.>>---.<<<.+++.------.<-.>>+.

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


Chúng được tìm thấy bằng chương trình c ++ mà tôi đã viết ở đây: https://github.com/ksabry/bfbrute

Lưu ý: Ban đầu tôi muốn dọn sạch mã này trước khi tôi đăng nó để làm cho nó thực sự có thể đọc được và có thể sử dụng được, nhưng vì tôi đã không nhận được nó trong hơn một năm nên tôi nghĩ tôi sẽ chỉ đăng nó. Nó sử dụng rất nhiều các mẫu và các hằng số thời gian biên dịch cho bất kỳ tối ưu hóa tiềm năng nào và nó có một loạt các mã nhận xét từ thử nghiệm của tôi nhưng không có nhận xét hữu ích nào nên xin lỗi nhưng nó hơi kinh khủng.

Không có gì thông minh khủng khiếp về mã, nó là kẻ giả mạo tàn bạo ở cốt lõi của nó, tuy nhiên nó khá tối ưu. Tối ưu hóa chính là lần đầu tiên nó lặp qua tất cả các chương trình không có vòng lặp (không [hoặc ]) cho đến độ dài xác định (16 hiện tại) và lưu trữ một mảng tất cả các thay đổi mà nó sẽ thực hiện trên mảng dữ liệu. Nó sẽ chỉ lưu trữ một chương trình duy nhất cho mỗi mảng thay đổi duy nhất, ví dụ như chỉ có một >+<<-><->>+<sẽ được lưu trữ. Sau đó, nó lặp lại thông qua tất cả các chương trình có thể bao gồm bất kỳ chương trình nào trong bộ đệm này với bất kỳ sự kết hợp các vòng lặp giữa chúng. Sau khi thực hiện mỗi chương trình, nó thực hiện một cuộc săn lùng và tham lam đơn giản cho các nhân vật và nối nó vào cuối chương trình.

Sau khi chạy nó trong không gian của tất cả các chương trình, tôi nhận thấy rằng hầu hết tất cả các chương trình ngắn nhất (tối đa ~ 19) đều có dạng *[*[*]*]. Việc hạn chế tìm kiếm đối với các chương trình thuộc dạng này đã tăng tốc tìm kiếm đáng kể. Người giữ bản ghi hiện tại được tìm thấy ở độ dài 27. Cái này thực sự được tính là có độ dài 74, nhưng tôi nhận thấy một chuỗi cụ thể .>.>.>.đủ may mắn để có 0 trong ô dữ liệu cho phép nó được đơn giản hóa để [.>]<đưa nó xuống đến 72.

Tôi để nó chạy khá lâu và hoàn thành việc tìm kiếm với các tham số hiện tại lên đến chiều dài 29, tôi nghi ngờ sẽ khó đánh bại hiện tại bằng cách đơn giản là đi lên cao hơn, tôi nghĩ cách tiếp cận hứa hẹn nhất có lẽ sẽ làm tăng không gian tìm kiếm trong một số cách thông minh.


32
Làm thế nào trên trái đất bạn đã tìm thấy điều này?
Dennis

2
@Dennis Tôi có thể sẽ đăng một lời giải thích về quy trình của mình khi tôi có cơ hội, cùng với mã nguồn tôi đã sử dụng (một khi tôi dọn sạch nó)
KSab

32
Này, bạn đánh bại Java.
Chọc

18
Đó là một số thiết bị, nó thậm chí không yêu cầu bọc các ô ó_Ò
primo

5
Rất thích xem thuật toán đằng sau này :)
musicman523

84

Piet, 90 codel

nhập mô tả hình ảnh ở đây

Đây là hình ảnh 30 x 3. Ngoài ra, ở kích thước codel 10:

nhập mô tả hình ảnh ở đây

Việc sử dụng bố cục 3 cao để tôi chỉ cần trỏ một lần. Nếu điều này vẫn có thể chơi được thì có lẽ tôi có thể cạo râu ở hầu hết các cột khác, vì ở đó có một cửa sổ pop-pop no-op ở đó.

Chỉnh sửa: @ primo 84 giải pháp codel .


6
Đang cố gắng để lấy tiền thưởng của riêng bạn? Tôi đã nghĩ nhiều hơn về bạn Sp3000;)
Beta Decay

7
Hah, chỉ vì tôi đặt tiền thưởng không có nghĩa là tôi không thể tham gia vào cuộc vui: P
Sp3000

9
Push-pop không phải là không có đối với tôi. Đây là cái này .
mbomb007

1
"Ngôn ngữ" này là cái quái gì vậy? Tôi thích nó!
Zoltán Schmidt

8
"Push-pop no-op" hiện là cụm từ yêu thích của tôi
BobTheAwgie

82

Haystack , 17 byte

Haystack là ngôn ngữ lập trình 2D thực thi cho đến khi tìm thấy kim trong đống cỏ khô |, tất cả trong khi thực hiện các hoạt động dựa trên ngăn xếp. Tất cả các chương trình bắt đầu từ góc trên cùng bên trái và có thể sử dụng các ký tự định hướng ><^vđể di chuyển xung quanh chương trình. Hướng được kế thừa, do đó bạn không cần tiếp tục sử dụng >để đi đúng, hướng sẽ chỉ thay đổi khi nó chạm vào một nhân vật định hướng khác.

Theo mặc định, trình thông dịch đọc từ trên cùng bên trái sang phải, vì vậy chúng ta chỉ cần đặt "Xin chào, Thế giới!" lên ngăn xếp, sử dụng ođể in nó, sau đó đặt kim để hoàn thành việc thực hiện.

"Hello, World!"o|

Phần thưởng: Một phiên bản thú vị hơn:

v      >;+o|
v      "
v      !
v      d
v      l
v      r
>>"Hello, ">>>v
       W      v
       "      v
       ^<<<<<<<

Vì tò mò, điều gì xảy ra nếu bạn bao gồm một trong các ký tự trong một chuỗi?
Random832

@ Random832 Trong một chuỗi, các ký tự định hướng được coi là các ký tự thông thường, tức là bạn có thể đưa chúng vào một chuỗi.
Kade

38
>; + o
bjb568

3
Tôi ước mình thông minh bằng một nửa mọi người ở đây, nhưng trong "tài liệu" (đọc: bài đăng trên diễn đàn của một số người) nó nói okết quả đầu ra là một con số. Nó không nên cở cuối? Có tài liệu thích hợp ở bất cứ đâu? Điều này là siêu thú vị!
Người ủng hộ của quỷ

2
@Scott Siêu muộn để trả lời, bài viết diễn đàn đó có lẽ là tôi! oxuất ra mục ngăn xếp trên cùng, nghĩa là nếu có một số thì nó sẽ in ra. csẽ chỉ đơn giản là đúc nó cho một char. Vì vậy, nếu bạn có một chuỗi hoặc char trên đầu ngăn xếp osẽ là những gì bạn muốn :) Cuối cùng, các tài liệu này sẽ được cập nhật ..
Kade

70

Giúp tôi với, WarDoq! , 1 byte

H

Không chỉ giúp, WarDoq!được tích hợp sẵn cho hầu hết các cách viết phổ biến của cụm từ, nó thậm chí còn thỏa mãn định nghĩa thông thường của chúng ta về ngôn ngữ lập trình.

Hãy thử nó trong trình thông dịch trực tuyến chính thức (mã đi vào Input ).


7
Vì vậy, HQ9 ++, về cơ bản, eh? ;-)
admBorkBork

6
@TimmyD Không, không phải HQ9 ++ .
Dennis

30
Khóc to lên nào. Có bất cứ điều gì không phải là một esolang tại thời điểm này? :)
admBorkBork

97
"Space: Begin a comment. The next non-space character ends the comment and is interpreted as usual."Vì vậy, bạn chỉ có thể có ý kiến ​​làm bằng không gian sau đó ??? Tôi cho rằng ngay cả ngôn ngữ hữu ích nhất trên thế giới cũng phải có một tính năng không đáng tin cậy +1,
Level River St

29
@steveverrill Có thể nếu các tab cũng được coi là nhận xét, thì chúng ta có thể có các nhận xét được viết dưới dạng chương trình Khoảng trắng
Trình tối ưu hóa

66

MarioLANG , 259 249 242 240 235 byte

+>+>)+)+)+++)++++((((-[!)>->.
+"+"===================#+".")
+++!((+++++++++)++++++)<.---+
++=#===================")---.
++((.-(.)).+++..+++++++.<---
 !+======================---
=#>++++++++++++++.).+++.-!>!
  =======================#=#

Điều này đã được thử nghiệm trong quá trình thực hiện Ruby .

Sau khi xáo trộn "Xin chào, Thế giới!"trong MarioLANG tôi đã nhìn vào nó một chút. Trên đây là ngắn nhất tôi đã tìm thấy cho đến nay.

Như trước khi tôi bắt đầu từ một giải pháp Brainfuck, đặt bốn ô thành bội số gần nhất của 10 cho các ký tự He,và khoảng trắng và chuyển đổi nó thành MarioLANG . Sau đó, bạn có thể rút ngắn mã một chút bằng cách sử dụng tầng phụ trong vòng lặp gần như giảm một nửa chiều rộng của vòng lặp. Lưu ý rằng đáy chỉ được thực hiện ít hơn một lần so với đỉnh, vì vậy bạn không nhận được bội số chính xác của bộ đếm ban đầu trong cả 4 ô nữa.

Cuối cùng, tôi muốn tận dụng không gian bị lãng phí ở phía trước của vòng lặp, vì vậy tôi đã thêm một loạt các thang máy để sử dụng không gian thẳng đứng ở đó. Và sau đó tôi nhận ra rằng tôi có thể gấp mã sau vòng lặp (xem bản sửa đổi trước đó) bên dưới vòng lặp để sử dụng một số không gian dọc hơn, giúp tiết kiệm thêm năm byte.

Điều này có thể vẫn còn chưa hoàn hảo, nhưng tôi nghĩ đó là một sự cải thiện đáng kể so với giải pháp ngây thơ, tôi nghĩ vậy.

Metagolf

Thời gian cho một số tự động hóa ...

Tôi đã bắt đầu thiết lập một bộ giải trong Mathematica để tìm một giải pháp tối ưu. Hiện tại, giả định rằng cấu trúc của mã là cố định: bộ đếm được đặt thành 12, 4 ô để in, với sự gán cố định He,<space>và cùng thứ tự của các ô đó. Những gì nó thay đổi là số +s trong vòng lặp cũng như các sửa chữa cần thiết sau đó:

n = 12;
Minimize[
 {
  3(*lines*)+
   12(*initialiser base*)+
   Ceiling[(n - 6)/2] 3(*additional initialiser*)+
   8(*loop ends*)+
   18(*cell moves*)+
   26(*printing*)+
   43*2(*steps between letters in one cell*)+
   -2(*edge golf*)+
   4 Max[4 + a + d + g + j + 2 Sign[Sign@g + Sign@j] + 2 Sign@j + 2,
     4 + b + e + h + k + 2 Sign[Sign@h + Sign@k] + 2 Sign@k] +
   2 (Abs@c + Abs@f + Abs@i + Abs@l),
  a >= 0 && d >= 0 && g >= 0 && j >= 0 &&
   b >= 0 && e >= 0 && h >= 0 && k >= 0 &&
   n*a + (n - 1) b + c == 72 &&
   n*d + (n - 1) e + f == 101 &&
   n*g + (n - 1) h + i == 44 &&
   n*j + (n - 1) k + l == 32
  },
 {a, b, c, d, e, f, g, h, i, j, k, l},
 Integers
 ]

Hóa ra, đối với một bộ đếm ban đầu gồm 12 giải pháp thủ công của tôi là tối ưu. Tuy nhiên, sử dụng 11 thay vì tiết kiệm hai byte. Tôi đã thử tất cả các giá trị truy cập từ 6 đến 20 (đã bao gồm) với các kết quả sau:

6: {277,{a->7,b->6,c->0,d->16,e->1,f->0,g->0,h->9,i->-1,j->0,k->6,l->2}}
7: {266,{a->6,b->5,c->0,d->11,e->4,f->0,g->2,h->5,i->0,j->0,k->5,l->2}}
8: {258,{a->2,b->8,c->0,d->3,e->11,f->0,g->5,h->0,i->4,j->4,k->0,l->0}}
9: {253,{a->8,b->0,c->0,d->5,e->7,f->0,g->2,h->3,i->2,j->0,k->4,l->0}}
10: {251,{a->0,b->8,c->0,d->3,e->8,f->-1,g->4,h->0,i->4,j->3,k->0,l->2}}
11: {240,{a->1,b->6,c->1,d->1,e->9,f->0,g->4,h->0,i->0,j->3,k->0,l->-1}}
12: {242,{a->6,b->0,c->0,d->6,e->3,f->-4,g->0,h->4,i->0,j->0,k->3,l->-1}}
13: {257,{a->1,b->5,c->-1,d->6,e->2,f->-1,g->3,h->0,i->5,j->0,k->3,l->-4}}
14: {257,{a->1,b->4,c->6,d->0,e->8,f->-3,g->3,h->0,i->2,j->2,k->0,l->4}}
15: {242,{a->1,b->4,c->1,d->3,e->4,f->0,g->1,h->2,i->1,j->2,k->0,l->2}}
16: {252,{a->0,b->5,c->-3,d->4,e->2,f->7,g->0,h->3,i->-1,j->2,k->0,l->0}}
17: {245,{a->4,b->0,c->4,d->5,e->1,f->0,g->0,h->3,i->-4,j->0,k->2,l->0}}
18: {253,{a->4,b->0,c->0,d->1,e->5,f->-2,g->2,h->0,i->8,j->0,k->2,l->-2}}
19: {264,{a->0,b->4,c->0,d->5,e->0,f->6,g->2,h->0,i->6,j->0,k->2,l->-4}}
20: {262,{a->0,b->4,c->-4,d->5,e->0,f->1,g->2,h->0,i->4,j->0,k->2,l->-6}}

Lưu ý: Bộ giải này giả định rằng mã tuyến tính sau vòng lặp là tất cả trên dòng trên cùng và mã ở trên là giải pháp được gấp lại. Có thể có một giải pháp tổng thể ngắn hơn bằng cách làm cho người giải quyết biết việc gấp, bởi vì bây giờ tôi nhận được thêm 3 +giây trong phần đầu tiên miễn phí và 4 hướng dẫn tiếp theo sẽ chỉ tốn 1 byte thay vì 2.


2
@justhalf Bạn nên xem câu trả lời Pada của tôi. : P
Martin Ender

Martin tôi thích câu trả lời này. Bạn có muốn xem xét một bài viết về điều này tại diễn đàn chính thức của chúng tôi ? Chúng tôi sử dụng giống như trình soạn thảo stackexchange. Biên tập của chúng tôi muốn thêm nó vào Chọn lựa tiêu biểu Nhân viên .
Vitaliy Kaurov

61

Tối , 106 byte

+h hell
h$twist sign s
s$scrawl " Hello, World!
s$read
h$twist stalker o
o$stalk
o$personal
o$echo
h$empty

Tôi sẽ chỉ để một số trích dẫn từ đặc tả ngôn ngữ nói lên sự rực rỡ của esolang này:

Dark là một ngôn ngữ dựa trên việc thao túng toàn bộ thế giới và kích thước để đạt được mục tiêu và xây dựng thực tế tra tấn tốt nhất có thể.

Bất cứ khi nào xảy ra lỗi cú pháp, độ tỉnh táo của chương trình sẽ giảm đi 1. [...] Nếu độ tỉnh táo của chương trình bằng 0, trình thông dịch sẽ phát điên.

Tham nhũng lật một bit trong biến khi nó xảy ra.

Khi chủ chết, tất cả các biến đầy tớ gắn liền với chủ đó cũng chết. Điều này rất hữu ích cho việc nhóm và các biến giết hàng loạt.

Buộc một biến để tự sát, giải phóng nó (hãy nhớ rằng nó sẽ để lại sự phân rã).

Đặt một biến thành một giá trị ngẫu nhiên. Sử dụng Trình tạo hỗn loạn toàn cầu.

Nếu một kẻ theo dõi không được khởi tạo, bất kỳ nỗ lực nào để thực hiện IO sẽ dẫn đến việc thông báo lỗi được ghi vào bàn điều khiển.


37
Ngôn ngữ này là kim loại.
Alex A.

6
Nếu chúng ta phải liệt kê các ngôn ngữ lập trình theo thứ tự tà ác, Dark sẽ đứng đầu tà ác.
LukStorms

35
Có địa ngục trong xin chào
Khaled.K

siêu ác, bạn thậm chí có thể nuôi một đội quân đi bộ
bobrobbob

60

Gia đình , 58 byte

Universe net hatchery Hello,. World!  powers a b snowmelt 

Các không gian dấu là đáng kể.

Hãy để tôi kể cho bạn một câu chuyện. Đã từng có một nhà máy điện cung cấp trại giống cá hồi gần đó. Trại sản xuất cá hồi đã ấp nở một con cá hồi vô gia cư trẻ bắt đầu cuộc hành trình ngược dòng sông để tìm một mùa xuân. Nó đã tìm thấy một mùa xuân như vậy, với cái tên thơ mộng "Xin chào, Thế giới!", Nơi nó trưởng thành và sinh ra một con cá hồi trẻ mới. Cả hai con cá bây giờ bơi xuôi dòng, tìm kiếm đại dương rộng lớn. Nhưng ngay sát cửa sông, có một cái lưới trên sông - con cá trưởng thành đã bị bắt và chỉ con non mới bơi qua và đến được đại dương và phần còn lại của vũ trụ. Trong khi đó, trại giống đã ấp nở thêm cá hồi đã di chuyển ngược dòng và sinh sản, vân vân và vân vân.

Tuy nhiên, một lượng lớn tuyết tan chảy đã chảy xuống một nhánh sông khác. Và ngay sau con cá hồi non đầu tiên của chúng tôi từ suối "Xin chào, thế giới!" đã đến đại dương, tuyết rơi vào vũ trụ và ... uh ... đã phá hủy nó. Và họ sống hạnh phúc mãi mãi ... hoặc tôi đoán là họ đã không làm thế.

Đó thực sự là những ngữ nghĩa của chương trình trên. Ngôi nhà thật kỳ lạ.


15
Điều này thật ... kỳ lạ ...
kirbyfan64sos

10
Tôi đã tìm thấy một tàu khu trục vũ trụ cá hồi yêu thích mới ... uh ... ý tôi là "Xin chào, thế giới!" chương trình. +1
Sản phẩm ETH

7
Mỗi lần tôi trở lại chuyện này, tôi đều cười. Cảm ơn vì đã tạo ra Hello, World thú vị nhất! chương trình của mọi thời đại.
ETHproductions 14/03/2016

2
Đây là ngôn ngữ yêu thích mới của tôi.
Mega Man


59

Đầu bếp , 465 byte

H.

Ingredients.
72 l h
101 l e
108 l l
111 l o
44 l C
32 l S
87 l w
114 l r
100 l d
33 l X

Method.
Put X into mixing bowl.Put d into mixing bowl.Put l into mixing bowl.Put r into mixing bowl.Put o into mixing bowl.Put w into mixing bowl.Put S into mixing bowl.Put C into mixing bowl.Put o into mixing bowl.Put l into mixing bowl.Put l into mixing bowl.Put e into mixing bowl.Put h into mixing bowl.Pour contents of the mixing bowl into the baking dish.

Serves 1.

Đã thử nghiệm với trình thông dịch Ruby. Làm cho bảng chữ cái súp.

Tôi đã cố gắng tuân thủ thông số kỹ thuật ban đầu nhất có thể, vì vậy mặc dù trình thông dịch tôi đã sử dụng cho phép bạn bỏ thes trong Pour contentshướng dẫn, tôi vẫn không làm như vậy.

Bát trộn khá đắt tiền, vì vậy có thể có một cách tiếp cận tốt hơn. Tôi đã thử sử dụng chuyển đổi cơ sở để mã hóa tin nhắn, nhưng không may là thông số kỹ thuật không làm rõ việc Dividesử dụng phân chia số nguyên hay dấu phẩy động và trình thông dịch mà tôi đã sử dụng sau này. Cũng không có toán tử modulo, điều này cũng không giúp được gì.


19
Nếu ai đó có thể chơi gôn trong Chef it Sp.
Alex A.

11
Bây giờ hãy thử công thức chơi golf trong cuộc sống thực. : D
mbomb007

2
Lol, điều này không chỉ không tốt để ăn, mà còn sử dụng các đơn vị đo lường không chuẩn. XD
thepiercingarrow

53

Piet, 84 codel

Thế giới xin chào

28x3, ở đây hiển thị với chiều rộng codel 10.

Được tạo bằng PietDev , được thử nghiệm với npiet . Bố cục của chương trình như sau:

Bố cục

Màu vàng biểu thị các codel trong đó đường dẫn chồng lên nhau, màu cam cho biết các codel phải cùng màu, cho mục đích của luồng điều khiển.

Để hỗ trợ việc tạo ra điều này, tôi đã viết một trình thông dịch thô sơ cho một ngôn ngữ dựa trên ngăn xếp với các lệnh giống như piet, mà tôi đã đặt tên là "pasm" ( nguồn ). Đầu ra từ trình thông dịch này (với đầu vào này ) là như sau:

    1 nop     blu1 []
    4 push 3  blu2 [3]
    5 dup     grn2 [3, 3]
    6 add     cyn2 [6]
    7 dup     ylw2 [6, 6]
    8 mul     grn1 [36]
    9 dup     red1 [36, 36]
   10 dup     blu1 [36, 36, 36]
   11 add     mgn1 [36, 72]
H  12 putc    blu0 [36]
   15 push 3  blu1 [36, 3]
   16 sub     mgn2 [33]
   17 dup     cyn2 [33, 33]
   20 push 3  cyn0 [33, 33, 3]
   21 mul     blu2 [33, 99]
   22 push 1  blu0 [33, 99, 1]
   23 add     mgn0 [33, 100]
   24 dup     cyn0 [33, 100, 100]
   25 push 1  cyn1 [33, 100, 100, 1]
   26 add     blu1 [33, 100, 101]
e  27 putc    cyn0 [33, 100]
   28 dup     ylw0 [33, 100, 100]
   32 push 4  ylw1 [33, 100, 100, 4]
   33 dup     mgn1 [33, 100, 100, 4, 4]
   34 add     red1 [33, 100, 100, 8]
   35 add     ylw1 [33, 100, 108]
   36 dup     mgn1 [33, 100, 108, 108]
l  37 putc    blu0 [33, 100, 108]
   38 dup     grn0 [33, 100, 108, 108]
l  39 putc    ylw2 [33, 100, 108]
   40 dup     mgn2 [33, 100, 108, 108]
   43 push 3  mgn0 [33, 100, 108, 108, 3]
   44 add     red0 [33, 100, 108, 111]
   45 dup     blu0 [33, 100, 108, 111, 111]
o  46 putc    cyn2 [33, 100, 108, 111]
   47 dup     ylw2 [33, 100, 108, 111, 111]
   48 dup     mgn2 [33, 100, 108, 111, 111, 111]
   53 push 5  mgn0 [33, 100, 108, 111, 111, 111, 5]
   54 div     ylw0 [33, 100, 108, 111, 111, 22]
   55 dup     mgn0 [33, 100, 108, 111, 111, 22, 22]
   56 add     red0 [33, 100, 108, 111, 111, 44]
   57 dup     blu0 [33, 100, 108, 111, 111, 44, 44]
,  58 putc    cyn2 [33, 100, 108, 111, 111, 44]
   59 dup     ylw2 [33, 100, 108, 111, 111, 44, 44]
   60 add     grn2 [33, 100, 108, 111, 111, 88]
   64 push 4  grn0 [33, 100, 108, 111, 111, 88, 4]
   65 dup     red0 [33, 100, 108, 111, 111, 88, 4, 4]
   66 mul     ylw2 [33, 100, 108, 111, 111, 88, 16]
   67 dup     mgn2 [33, 100, 108, 111, 111, 88, 16, 16]
   68 add     red2 [33, 100, 108, 111, 111, 88, 32]
   69 putc    mgn1 [33, 100, 108, 111, 111, 88]
   70 push 1  mgn2 [33, 100, 108, 111, 111, 88, 1]
   71 sub     red0 [33, 100, 108, 111, 111, 87]
W  72 putc    mgn2 [33, 100, 108, 111, 111]
o  73 putc    blu1 [33, 100, 108, 111]
   76 push 3  blu2 [33, 100, 108, 111, 3]
   77 add     mgn2 [33, 100, 108, 114]
r  78 putc    blu1 [33, 100, 108]
l  79 putc    cyn0 [33, 100]
d  80 putc    grn2 [33]
!  81 putc    ylw1 []

Không có lệnh con trỏ, chuyển đổi hoặc cuộn được sử dụng. Không có codel nào bị lãng phí cả; trong thực tế hai được tái sử dụng.


Xin chúc mừng, bạn đã nhận được tiền thưởng của tôi :)
LegionMammal978

@ LegionMammal978 Cảm ơn, thật vui khi làm việc. Và giáng sinh vui vẻ :)
primo

7
Đây là những gì hollywood sẽ hiển thị trên màn hình "hacker".
Hubert Grzeskowiak

50

Khoảng trắng , 192 150 146 byte

Khoảng trắng chỉ cần khoảng trắng, tab và nguồn cấp trong khi các ký tự khác bị bỏ qua.
Mà có thể gây rắc rối để hiển thị trên đây.
Vì vậy, trong mã bên dưới khoảng trắng & tab đã được thay thế.
Và một ';' đã được đặt ở phía trước của các nguồn cấp dữ liệu cho rõ ràng.
Để chạy mã, đầu tiên thay thế. và> theo khoảng trắng và tab.

...;
..>>..>.>.;
..>>>>;
...>;
...>>>;
...>..;
..>>.>..;
..>>..>.>>;
..>>>>>>>;
...>..;
...>;
.;
...>>>.;
..>>...>>;
;
..;
.;
.;
>.>;
...>>.>.>>;
>...>;
..;
.;
;
;
..>;
;
;
;

Mã thập phân

00000000: 2020 200a 2020 0909 2020 0920 0920 0a20
00000010: 2009 0909 090a 2020 2009 0a20 2020 0909
00000020: 090a 2020 2009 2020 0a20 2009 0920 0920
00000030: 200a 2020 0909 2020 0920 0909 0a20 2009
00000040: 0909 0909 0909 0a20 2020 0920 200a 2020
00000050: 2009 0a20 0a20 2020 0909 0920 0a20 2009
00000060: 0920 2020 0909 0a0a 2020 0a20 0a20 0a09
00000070: 2009 0a20 2020 0909 2009 2009 090a 0920
00000080: 2020 090a 2020 0a20 0a0a 0a20 2009 0a0a
00000090: 0a0a

Mã lắp ráp khoảng trắng:

push 0      ;null
push -74    ;! chr(33)
push -7     ;d chr(100)
push 1      ;l chr(108)
push 7      ;r chr(114)
push 4      ;o chr(111)
push -20    ;W chr(87)
push -75    ;  chr(32)
push -63    ;, chr(44)
push 4      ;o
push 1      ;l
dup         ;l
push -6     ;e chr(101)
push -35    ;H chr(72)
p:
 dup jumpz e
 push 107 add printc
 jump p
e:
 exit

Nhận xét:

Tôi đã phải viết một chương trình chỉ để tính toán rằng việc thêm 107 mang lại cho golf tối ưu cho câu. Vì byteize mà một số nguyên lấy trong mã thay đổi. : 4 + int (abs (log2 ($ n)))
Mã vẫn sẽ chạy mà không có nhãn "e:" và phần thoát trên whitespace.kauaveel.ee . Nhưng điều đó có thể làm cho mã khoảng trắng không hợp lệ trên các trình biên dịch khoảng trắng khác. Vì vậy, các byte không được đánh ra từ giải pháp.

Cần lưu ý rằng

Như Kevin Cruijssen đã chỉ ra trong các bình luận, bằng cách cho phép "thoát do lỗi" theo meta, khoảng trắng có thể được mã hóa nhiều hơn tới 126 ký tự.

..>>..>.>.;
..>>>>;
...>;
...>>>;
...>..;
..>>.>..;
..>>..>.>>;
..>>>>>>>;
...>..;
...>;
.;
...>>>.;
..>>...>>;
;
..;
...>>.>.>>;
>...>;
..;
.;
;

Hội,, tổ hợp:

push -74
push -7
push 1
push 7
push 4
push -20
push -75
push -63
push 4
push 1
dup
push -6
push -35
label_0:
push 107
add 
printc
jmp label_0

Tôi biết đã được một lúc và tôi thấy bạn đang đề cập đến nó chạy mà không có nhãn thoát trên hầu hết các trình biên dịch, nhưng bạn có thể hạ thấp nó xuống 129 byte bằng cách thoát với lỗi sử dụng SSN(giá trị lỗi) thay vì SSSN(đẩy 0 ), được phép theo meta . Hãy thử trực tuyến (có thêm phần tô sáng và giải thích) hoặc thử trực tuyến .
Kevin Cruijssen 16/03/18

@KevinCruijssen Cuối cùng tôi đã kiểm tra phiên bản của bạn. Về cơ bản, đây là phiên bản cũ với phần lắp ráp dup jumpz ee: exitloại bỏ. Nhưng ít nhất là trên whitespace.kauaveel.ee nó cứ lặp đi lặp lại cho đến khi trình duyệt phàn nàn. Tôi không muốn thay đổi phiên bản của mình thành phiên bản đó, mặc dù golf thấp hơn và meta cho phép "thoát do lỗi". Nhưng bạn có thể gửi phiên bản của mình dưới dạng câu trả lời mới.
LukStorms

Không, tôi sẽ không đăng một câu trả lời riêng biệt. Về cơ bản nó giống như của bạn, chỉ ngắn hơn một chút do thoát do lỗi. Tôi cũng chỉ nhận ra rằng tôi có thể hạ thấp nó xuống 126 thay vì 129 bằng cách loại bỏ SSNlúc bắt đầu, trong trường hợp đó là lỗi với Không thể làm Infix Plus khi nó chỉ có một mục duy nhất trên ngăn xếp (107). ( Hãy thử trực tuyến. ) Tôi sẽ chỉ để lại nhận xét của mình ở đây khi bất kỳ ai có cùng đề xuất. Và tôi đã + 1-ed câu trả lời của bạn khoảng một năm trước tôi nghĩ. ;)
Kevin Cruijssen 27/03/18

1
@KevinCruijssen Trong trường hợp đó, giải pháp của bạn hiện đã được ghi nhận trong câu trả lời. Khoảng trắng là một trong những ngôn ngữ không thể chơi golf nhất. Nhưng để tiết kiệm byte, kết quả của bạn rất đáng được đề cập.
LukStorms

49

Java, 79

class H{public static void main(String[]a){System.out.print("Hello, World!");}}

Các phiên bản trước của Java có thể cho phép bạn sử dụng một khối tĩnh (51 byte), nhưng hiện tại tôi không biết cách bỏ qua mainphương thức này.


7
Sử dụng enumthay vì class.
Thomas Eding

6
@ThomasEding Trình biên dịch nào thực sự hoạt động trên? Tôi đã thử mẹo này trên một số và chưa bao giờ có thể lưu byte bằng nó.
Geobits

4
@Lum Ah, nó có thể đã làm việc cho 1,5. Mặc dù vậy, tôi sẽ không cài đặt nó để tìm hiểu, nhưng dính vào thứ gì đó được phát hành trong 10 năm qua. Nếu tôi không bao giờ gặp lại Java 5 thì đó sẽ là một cuộc sống tốt đẹp :)
Geobits

2
@TheDoctor Từ những gì tôi đã thấy, Xử lý thường được xem là một ngôn ngữ riêng biệt ở đây. Bạn nên đăng nó dưới dạng câu trả lời, hoặc ít nhất là yêu cầu làm rõ từ OP.
Geobits

5
Người dùng OptiFine đề nghị tiết kiệm 3 byte bằng cách sử dụng interfacevà bỏ qua trình publicxác định. Tôi đã từ chối chính sách chỉnh sửa sau đây nhưng vì họ không thể nhận xét, tôi nghĩ tôi sẽ cho bạn biết để bạn có thể sử dụng nó nếu bạn muốn.
Martin Ender

48

CSS, 30 byte

:after{content:"Hello, World!"

Cascading Style Sheets (CSS) không phải là ngôn ngữ lập trình thông thường, nhưng nó có thể thực hiện đầu ra cố định khá tốt. Điều này được thực hiện bằng cách tạo một phần tử giả sau mỗi phần tử có nội dung Hello, World!. Vì vậy, chỉ có một yếu tố ( <html>) được chọn, điều này giả định rằng chúng tôi đang sử dụng tài liệu HTML cơ bản nhất, nghĩa là

<html><style>:after{content:"Hello, World!"</style></html>

Điều này hoạt động trong hầu hết các trình duyệt chính, ngoại trừ đáng chú ý là Firefox, áp dụng bộ chọn cho các phần tử <html><body>. Đây cũng là lý do tại sao các đoạn mã Stack không hoạt động, bởi vì luôn có một yếu tố cơ thể cũng được tạo kiểu. Dưới đây là một phiên bản sửa đổi một chút để kiểm tra.

* :after{content:"Hello, World!"


3
Bạn cũng có thể sử dụng * *để chọn body.
jimmy23013

18
@ jimmy23013 Nghe có vẻ không hiệu quả. Cảm ơn
NinjaBearMonkey

1
Vì lý do gì * :aftercũng có vẻ làm việc.
jimmy23013

12
Tôi đang tự hỏi mình những chữ cái nào trong CSS là từ bỏ "ngôn ngữ".
Zaibis

10
@zaibis cùng một chữ cái cho PHP có thể :)
fcalderan

48

HTML, 13 byte

Hello, World!

Văn bản được tự động chèn vào <body>và được hiển thị.


159
Ồ Đó là một số kỹ năng mã hóa thực sự
khó khăn

46
HTML không phải là ngôn ngữ lập trình, mà là ngôn ngữ đánh dấu (đó là lý do tại sao nó kết thúc bằng ML).
CoDEmanX

31
Nhưng HTML không được in trong STDOUT.
Harshil Sharma

25
-1 HTML Không đáp ứng các yêu cầu cho một ngôn ngữ hợp lệ
Downgoat

123
-1 không đủ jQuery
Valentin Lorentz ngày

45

Mã máy x86_64 cho Linux, 32 byte

Khi Linux bắt đầu một quy trình mới, tất cả các thanh ghi (trừ RSP) đều bằng 0, vì vậy chúng ta có thể nhận RAX = 1 bằng cách chỉ sửa đổi byte thấp. Hệ thống x86-64 V ABI không đảm bảo điều này, nhưng đó là những gì Linux thực sự làm. Mã này chỉ hoạt động như _starttrong một thực thi tĩnh.

0000000000000000 <_start>:
   0:   e8 0d 00 00 00          call   12 <hello>
   5:   48 65 6c 6c 6f
   a:   2c 20 57 6f 72
   f:   6c 64 21 5e 40

0000000000000012 <hello>:
  12:   5e                      pop    rsi
  13:   40 b7 01                mov    dil,0x1
  16:   b2 0d                   mov    dl,0xd
  18:   b0 01                   mov    al,0x1
  1a:   0f 05                   syscall
  1c:   b0 3c                   mov    al,0x3c
  1e:   0f 05                   syscall

Lệnh gọi đẩy địa chỉ tiếp theo, chứa chuỗi hello world, lên ngăn xếp. Chúng tôi bật địa chỉ của chuỗi vào rsi.

Sau đó, các đối số khác được thiết lập cho một syscalltới sys_write, trong đó in chuỗi.

Chương trình kết thúc với một syscalltới sys_exit. sys_writetrả về số byte được ghi, do đó, byte trên của RAX bằng 0 sau lần đầu tiên syscall(trừ khi nó trả về lỗi), vì vậymov al, 60 cung cấp cho chúng tôi RAX = __NR_exitchỉ trong 2 byte.

Bạn có thể thực hiện chương trình segfault này bằng cách đóng stdout ( ./a.out >&-) của nó , vì vậy sys_write()sẽ quay lại -EBADF, lần thứ hai syscallsẽ quay lại -ENOSYSvà sau đó thực thi sẽ rơi vào cuối. Nhưng chúng ta không cần phải xử lý write()lỗi một cách duyên dáng.


Cụ thể, điều này chỉ hoạt động trên Linux , trong đó __NR_writelà 1. Đây không phải là tiêu chuẩn trên các hệ thống Unix x86-64 khác nhau. Bạn cũng phụ thuộc vào hành vi của Linux trong việc hủy bỏ tất cả các thanh ghi trừ RSP trước khi vào một quy trình mới (vì vậy điều này chỉ hoạt động nếu bạn xây dựng nó dưới dạng thực thi tĩnh, nếu không, trình liên kết động sẽ để lại rác ở các byte trên raxvà bạn ' sẽ nhận được -ENOSYS). Hệ thống x86-64 V ABI cho biết các thanh ghi có thể giữ các giá trị rác tùy ý khi nhập vào _start, hạt nhân Linux chọn không chúng để tránh rò rỉ thông tin.
Peter Cordes

Bạn có thể lưu một byte bằng mov al, 1/ mov edi, eax(2 byte), thay vì cần tiền tố REX cho DIL, bởi vì__NR_write == STDOUT_FILENO = 1
Peter Cordes

Điều này chỉ hoạt động trong một tệp thực thi tĩnh Linux, vì vậy địa chỉ chuỗi của bạn được đảm bảo ở mức 2G không gian địa chỉ ảo thấp (mô hình bộ nhớ mặc định cho các tệp thực thi không PIE đặt tất cả các ký hiệu có thể được sử dụng là 0 hoặc ký hiệu- mở rộng 32 bit ngay lập tức). Do đó, bạn có thể sử dụng 5 byte mov esi, msg(NASM) aka mov esi, OFFSET msg(GAS .intel_syntax) . Đặt chuỗi của bạn sau lần cuối cùng syscall. call/popngắn hơn 1 byte so với LEA tương đối 64 bit, nhưng Mov là tốt nhất.
Peter Cordes

Nguồn NASM cho phiên bản 30 byte (kích thước được kiểm tra trên máy tính để bàn của tôi), tio.run/##TY8/ Khăn
Peter Cordes

42

Lục giác , 37 32 byte

Lưu ý: Tôi sẽ đưa tiền thưởng 500 rep cho người đầu tiên tìm thấy giải pháp hợp lệ trong hình lục giác có độ dài cạnh 3 hoặc giải pháp tối ưu có thể chứng minh được là chiều dài 4. Nếu bạn không thể tìm thấy giải pháp như vậy nhưng quản lý để đánh bại điểm số của tôi trong một hình lục giác 4 ​​cạnh dài (bằng cách nhận được nhiều lệnh cấm hơn vào cuối chương trình, có thể được bỏ qua từ mã nguồn), tôi cũng sẵn sàng đưa ra một khoản tiền thưởng nhỏ hơn cho điều đó .

H;e;P1;@/;W;o;/l;;o;Q/r;l;d;2;P0

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

Tôi tự hào giới thiệu ngôn ngữ lập trình 2D thứ hai của mình, (theo hiểu biết của tôi) ngôn ngữ 2D đầu tiên chưa từng có trên lưới lục giác.

Mã nguồn trông không giống 2D lắm phải không? Chà, khoảng trắng là tùy chọn trong Hexagony. Đầu tiên, mã nguồn được đệm vào số lục giác trung tâm tiếp theo với no-ops ( .). Số tiếp theo như vậy là 37, vì vậy chúng tôi chèn năm no-op vào cuối. Sau đó, mã nguồn được sắp xếp lại thành hình lục giác thông thường:

   H ; e ;
  P 1 ; @ /
 ; W ; o ; /
l ; ; o ; Q /
 r ; l ; d ;
  2 ; P 0 .
   . . . .

Điều này cũng có thể chạy được. Hãy thử trực tuyến!

Hexagony có một loạt các tính năng khá thú vị, bao gồm 6 con trỏ lệnh khác nhau và bố cục bộ nhớ là biểu đồ đường của lưới lục giác, nhưng mã này chỉ sử dụng một IP và một cạnh bộ nhớ, vì vậy bây giờ chúng ta đừng lo lắng về điều đó.

Dưới đây là tổng quan về các lệnh có liên quan:

  • Các chữ cái chỉ đặt cạnh bộ nhớ hiện tại thành giá trị ASCII của chúng
  • ; in giá trị hiện tại, modulo 256, dưới dạng byte sang STDOUT.
  • / là một tấm gương hoạt động như bạn mong đợi (khiến IP quay đầu 120 độ).
  • Các chữ số hoạt động như chúng làm trong Labyrinth : chúng nhân số ô hiện tại với 10 và sau đó tự thêm vào.
  • @ chấm dứt chương trình.

Bây giờ, cái bắt cuối cùng là nguồn bao quanh tất cả 3 cặp cạnh. Hơn nữa, nếu IP rời khỏi lưới qua một trong sáu góc, có hai hàng có thể nhảy tới. Cái nào được chọn phụ thuộc vào giá trị hiện tại là dương hay không dương. Phiên bản chú thích sau đây cho thấy IP nhập lại mỗi lần nó rời khỏi lưới:

         H ; e ;     -> 1
5 ->    P 1 ; @ /    -> 4
3 ->   ; W ; o ; /   -> 2
1 ->  l ; ; o ; Q /
4 ->   r ; l ; d ;   -> 5
2 ->    2 ; P 0 .    -> 3
         . . . .

Vì vậy, nếu chúng tôi loại bỏ tất cả các thay đổi hướng, chương trình này sẽ chuyển sang mã tuyến tính sau:

H;e;l;;o;Q2;P0;W;o;r;l;d;P1;@

Những gì với Q2, P0P1? Chữ được in dễ dàng vì chúng ta chỉ có thể đặt cạnh thành giá trị tương ứng. Đối với dấu phẩy, dấu cách và dấu chấm than, không hoạt động. Chúng tôi cũng không thể chỉ đặt giá trị của họ với 44, 32, 33, tương ứng, bởi vì cạnh bộ nhớ không phải là zero để bắt đầu với, và do ngữ nghĩa của chữ số cá nhân đó sẽ tàn phá tất cả các loại. Nếu chúng ta muốn làm điều đó, chúng ta sẽ phải thiết lập lại các giá trị cạnh bằng không với một cái gì đó giống như *, +, -, &hoặc ^đầu tiên. Tuy nhiên, vì giá trị được lấy modulo 256 trước khi được in, chúng tôi không phải đặt chính xác các giá trị thành 44, 32 hoặc 33. Chẳng hạn, Q2sẽ đặt giá trị cạnh thành 81*10 + 2 = 812, đó là44khi uống modulo256. Bằng cách này, chúng ta có thể lưu một byte trên mỗi ba ký tự đó. (Thật không may, nó không bao giờ có thể đạt được điều đó bằng một chữ số duy nhất từ giá trị các tế bào đã có. Amusingly, nơi mà nó không làm việc là otrong World, bởi vì đó cũng có thể được lấy từ W9.)

Bạn có thể sử dụng tập lệnh CJam này để tìm tất cả các kết hợp chữ số dẫn đến một ký tự cho trước.

Tôi không chắc liệu điều này là tối ưu. Tôi nghi ngờ có thể thực hiện nó trong một hình lục giác có độ dài 3 cạnh (trong đó bạn chỉ có sẵn 19 ký tự), nhưng có thể giải quyết nó trong một hình lục giác có độ dài 4 cạnh với ít hơn 32 lệnh, chẳng hạn rằng có nhiều no-op ở cuối lưới.


1
Chết tiệt, bạn đánh tôi với nó. Bản thân tôi đang làm việc với một loại ngôn ngữ lục giác tương tự như Hồng y.
ML

Làm thế nào bạn tìm thấy giải pháp này? Bằng tay hay vũ phu? Dù sao, +1 :)
Adnan

1
Các Q2, P0P1rất thông minh. Tôi không biết phần modulo 256.
Ad Nam

1
@Adnan Người đề xuất phần mod-256 trên GitHub thực sự đã làm như vậy cùng với ví dụ rằng các dòng dữ liệu sau đó có thể được in dưới dạng M8;(hoặc g4;), mà tôi đã sử dụng một vài lần kể từ đó. Nó chỉ chưa bao giờ xảy ra với tôi cho đến bây giờ để xem lại câu trả lời này sau khi tôi thực hiện thay đổi đó.
Martin Ender

2
Lưu ý: Điều này đã giảm xuống còn 31 một lúc trước. H;e;P;2Q/d;l;r/l;$@;o];o;W;03&;
Mitch Schwartz

38

Malbolge, 112 byte

('&%:9]!~}|z2Vxwv-,POqponl$Hjihf|B@@>,=<M:9&7Y#VV2TSn.Oe*c;(I&%$#"mCBA?zxxv*Pb8`qo42mZF.{Iy*@dD'<;_?!\}}|z2VxSSQ

Tôi sẽ xem nếu có một cái ngắn hơn. Có một máy tính tốt hơn kể từ lần trước, vì vậy tôi có thể tạo ra khá nhanh hơn một chút.

Để hiển thị, đây là "Xin chào thế giới!" không có dấu phẩy.

(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc

Cái này thì sao? ('<;_#"~6Z|{y1UTvt,PrpMo,llj"Fgge{A??P=^t:8&7YtFVqjSQ@PNM)u(I8%$#"D2AA/[TYXQu88MLp3n1Gk.D-ge(92 byte)
dingledooper

37

Fourier , 15 byte

NHỮNG THAY ĐỔI LỚN để Fourier!

`Hello, World!`

Hãy thử nó trên FourIDE!

Đúng, ngày gõ mã ASCII của mỗi ký tự sẽ không còn nữa: Fourier hiện là loại chuỗi hỗ trợ. Khi bạn gửi một chuỗi trong backticks, chuỗi đó sẽ được xuất ra.

Lưu ý rằng bạn không thể làm gì khác ngoài đầu ra chuỗi đó: bạn không thể lưu trữ nó trong một biến, nó không được lưu trong bộ tích lũy và không có công cụ thao tác chuỗi.


Tại đây, bạn có thể tìm thấy xác tàu hỏa đã Fourier. ;)

72a101a+7aa+3a44a32a87a111a+3a-6a-8a33a

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

Bây giờ, một số bạn có thể đã gặp Fourier trước đây và có thể khá quen thuộc với ngôn ngữ này. Toàn bộ ngôn ngữ dựa trên một bộ tích lũy: một biến toàn cục mà hầu hết các nhà khai thác sử dụng.

Phần quan trọng nhất của mã là atoán tử. Cái này lấy giá trị bằng số của bộ tích lũy và chuyển đổi nó thành một ký tự bằng mã Pythonchr(accumulator) . Điều này sau đó được in thành STDOUT.

Thật không may, tôi chưa có cơ hội sử dụng Fourier ( nudge nudge , wink wink ), chủ yếu là do nó thiếu các chuỗi và các toán tử chuỗi. Mặc dù vậy, nó vẫn có thể sử dụng được cho nhiều thử thách khác (xem phần ví dụ trên trang EsoLangs của nó).

Lưu ý rằng điều này ngắn hơn mục nhập của tôi vào danh sách Esolang vì tôi thực sự không nghĩ rằng tôi có thể chơi golf nữa. Và sau đó, khi viết thử thách chơi gôn Fourier, tôi nhận ra mình có thể đi ngắn hơn một chút.

Ghi chú

Nếu bạn đang tự hỏi về cú pháp biến, Geobits đã viết một chương trình sử dụng các biến có cùng độ dài:

72a101a+7aa+3~za44a32a87aza+3a-6a-8a/3a

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


Có ích gì? Nó giống như một có thể sử dụng?
Máy

35

C-- , 155 byte

target byteorder little;import puts;export main;section"data"{s:bits8[]"Hello, World!\0";}foreign"C"main(){foreign"C"puts("address"s);foreign"C"return(0);}

Thật không may, trình biên dịch C-- duy nhất được biết đến, Quick C-- không còn được duy trì. Đó là một cơn đau ở cổ để xây dựng, nhưng nó có thể ...


8
Ngôn ngữ thực sự hấp dẫn - tôi chưa bao giờ nghe về nó trước đây và đó chắc chắn là một dự án đầy tham vọng mà họ (đang / đang) thực hiện. Nhưng về mặt golf mã, tôi không nghĩ nó sẽ là một ứng cử viên. Ý tôi là ... dang, thứ này thua Java ...
admBorkBork

11
@TimmyD Đó thực sự là một trình biên dịch. Có một lý do khiến nó thua Java ... :)
kirbyfan64sos

Tôi có tin tốt cho bạn. Trong khi bản thân dự án C-- dường như khá chết, một biến thể vẫn còn sống. Trình biên dịch Haskell của Glasgow (GHC) sử dụng C-- làm giai đoạn cuối cùng trước khi lắp ráp hoặc LLVM, và phiên bản đó vẫn được duy trì tích cực. Không nên có bất kỳ rắc rối nào khi cài đặt nó (cùng với phần còn lại của GHC).
dfeuer

@dfeuer Thực sự tôi đã thử sử dụng phụ trợ Cmm của họ trực tiếp trước đó, nhưng tôi đã gặp một số vấn đề kỳ lạ và chưa bao giờ thực sự xem xét thêm về nó ¯ \ _ () _ /
kirbyfan64sos

Bạn có thể nhận được một số trợ giúp trong danh sách gửi thư của Haskell. Hãy thử glasgow-haskell-users@haskell.org, hoặc có lẽ haskell-cafe@haskell.org.
dfeuer

33

C, 30 byte

main(){puts("Hello, World!");}

Khá vani, nhưng tôi không thể nghĩ ra một cách thông thường để có thể làm nó ngắn hơn (trừ khi có thể một loại thủ thuật asm thô nào đó có thể hoạt động?). Tuy nhiên, nhịp đập hầu hết esolang!


3
Nó không có giá trị một câu trả lời riêng biệt, nhưng câu trả lời C89 và C99 tuân thủ ISO đầy đủ lần lượt là 39 main(){puts("Hello, World!");return 0;}và 53 #include <stdio.h> int main(){puts("Hello, World!");}byte. Hơi nhiều nếu bạn nghĩ rằng chính (void) là bắt buộc.
Random832

20
@ Random832: trước đây, main(){return!puts("Hello, World!");}ngắn hơn hai byte.
Lynn

15
Chương trình hngắn hơn 29 byte. Lưu ý: bạn sẽ phải biên dịch nó với -Dh='main(){puts("Hello, World!");}'một nửa trolling, một nửa thú vị với việc lạm dụng trình biên dịch.
chiến lược

19
@margeta Đó rõ ràng là gian lận. Để nó không bị lừa, bạn phải làm cho tệp chỉ chứa __FILE__(8 byte) và đặt tên cho tệp main(){puts("Hello, World!");}. Sau đó, nó hoàn toàn không gian lận;)
C0deH4cker

Trên thực tế, vào năm 2017, các quy tắc đó sẽ là 34 và 38 byte tương ứng.
Máy

32

Không thể đọc được , 843 755 732 666 645 629 577 byte

"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

Các chương trình không thể đọc được cho là được hiển thị với phông chữ có chiều rộng thay đổi, vì vậy chúng tôn vinh tên của ngôn ngữ. Tôi hơi thất vọng vì cách tiếp cận tinh vi hơn của tôi hóa ra lại dài hơn rất nhiều. Vòng lặp cực kỳ tốn kém trong Không thể đọc được ...

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

Làm thế nào nó hoạt động

Không thể đọc được chỉ có mười chức năng; sáu trong số này được sử dụng trong mã này:

'"        p Print.
'""       + Increment.
'"""      1 Return 1.
'""""""   : Set.
'"""""""  = Get.
'"""""""" - Decrement.

Sau khi sử dụng ký hiệu một ký tự của tôi và thêm một số khoảng trắng và nhận xét, đoạn mã trên trông giống như sau. Các câu lệnh nhiều dòng được thực hiện từ dưới lên trên.

p+++                                        Print 3 + variable 2 (o).
 pp                                         Print variable 2 two times (l).
  :+1+++++++                                Save 8 + variable 3 in variable 2.
   p+                                       Print 1 + variable 3 (e).
    :++1+++++++++++++                       Save 13 + variable 4 in variable 3.
     :+++1+++++++++++++++                   Save 43 + variable 0 in variable 4.
      p++++++++++++++++++++++++++++         Print 28 + variable 0 (H).
       :-1++++++++++++                      Save 44 in variable 0.
        :1+++++++++++++++++++++++++++++++1  Save 32 in variable 1.
p=-1                                        Print variable 0 (,).
p=1                                         Print variable 1 ( ).
p=+++1                                      Print variable 4 (W).
p+++                                        Print 6 + variable 2 (r).
 p+++=+1                                    Print 3 + variable 2 (o).
p=+1                                        Print variable 2 (l).
p=++1                                       Print variable 3 (d).
p+=1                                        Print 1 + variable 1 (!).

Tôi đã tạo mã nguồn thực tế bằng cách chạy phiên bản chưa hoàn chỉnh của mã giả ở trên thông qua chương trình CJam này .


3
Bạn đang nói về cái gì vậy? Nó khá dễ đọc!
Tối ưu hóa

19
@Optimizer Đã sửa.
Dennis

4
Vẫn có thể đọc được! (tất nhiên tôi đang nói sự thật. Tại sao bạn không tin tôi?)
Trình tối ưu hóa

5
Cảm giác như ngôn ngữ này sẽ được hưởng lợi từ một mã hóa huffman tốt hơn - cả về kích thước và không thể đọc được.
Primo

30

Befunge 98 , 19 18 byte

Câu trả lời mới (từ ngầmmonorail)

"ck,@!dlroW ,olleH

Giải trình

  • " bắt đầu chế độ chuỗi
  • Tất cả mọi thứ sau đó được đẩy lên ngăn xếp. Bây giờ là ngăn xếpHello, World!@,kc
  • Sau khi kết thúc, thông dịch viên trở lại bắt đầu
  • Nó gặp "lại, kết thúc chế độ chuỗi
  • 12 được đẩy vào ngăn xếp ( c)
  • k lấy giá trị trên cùng của ngăn xếp và thực hiện lệnh tiếp theo, con trỏ lệnh có thể thấy điều đó nhiều lần
  • ,bật một giá trị từ ngăn xếp và xuất ra dưới dạng char. Nó đã được thực hiện 12 lần theo khướng dẫn cuối cùng và một lần nữa khi trình thông dịch thực sự đọc ,hướng dẫn
  • @ kết thúc chương trình

Sự khác biệt với câu trả lời cũ là chúng tôi khéo léo sử dụng lại "nhân vật bằng cách sử dụng hành vi lặp của Befunge khi nó chạm đến cuối dòng. Vì nó có thể ít trực quan hơn, tôi cũng để cái cũ. Ngoài ra, bạn có thể nhận thấy rằng ngăn xếp vẫn sẽ chứa một số ký tự ( ck,@) vì thủ thuật hay này, để lại một số mớ hỗn độn nếu chúng ta muốn làm gì đó sau đó.

Câu trả lời cũ

"!dlroW ,olleH"ck,@

Điều này hoạt động cho funge và befunge 98

Giải trình

  • Tất cả mọi thứ giữa ""được đẩy lên ngăn xếp. ( 'H'hiện đang đứng đầu.)
  • c (12) được đẩy lên ngăn xếp
  • k lấy giá trị trên cùng của ngăn xếp và thực hiện lệnh tiếp theo, con trỏ lệnh có thể thấy điều đó nhiều lần.
  • ,bật một giá trị từ ngăn xếp và xuất ra dưới dạng char. Nó đã được thực hiện 12 lần theo khướng dẫn cuối cùng và một lần nữa khi trình thông dịch thực sự đọc ,hướng dẫn
  • @ kết thúc chương trình

2
Tôi không nghĩ 93 cók
Sp3000

1
Vâng, bây giờ mà nó là 98 duy nhất mà bạn có thể sử dụng ccho 93+.
PurkkaKoodari

3
Trong 18:"ck,@!dlroW ,olleH
undergroundmonorail

1
Nó nhấn chuỗi "để bắt đầu chuỗi, thêm toàn bộ phần còn lại của chuỗi vào chuỗi đó, quấn quanh và đánh tương tự "để kết thúc chuỗi. Bây giờ toàn bộ chương trình ngoại trừ "đã được đẩy lên ngăn xếp, với !dlroW ,olleHtrên đầu trang. Sau đó, nó in 12 ký tự hàng đầu giống như cách bạn làm và dừng lại ở đó @.
undergroundmonorail

1
Đối với giải pháp 18 byte, trình thông dịch của tôi tạo ra `Hello, World` (không gian hàng đầu, không có dấu chấm than). Trình thông dịch Anarchy Golf (sử dụng mẫu, chọn Befunge-98, dán mã, gửi) cũng làm như vậy.
primo

29

JSFuck , 6293 6289 6277 byte

Điều này có thể được đề cập đến như là một trong những " chương trình Hello, World! " Ngắn nhất (thực sự tôi không biết điều này có tối ưu không, nhưng đó là thời gian ngắn nhất tôi quản lý để có được).

Cảnh báo: chỉ hoạt động trong Firefox và Safari

[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]][([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+([][[]]+[])[+!![]]+(![]+[])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+[]]+([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(!![]+[])[+!![]]]([(![]+[])[+!![]]+(![]+[])[!![]+!![]]+(!![]+[])[!![]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]+([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[!![]+!![]+!![]]]+([]+[])[(![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+([][[]]+[])[+!![]]+(!![]+[])[+[]]+([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(!![]+[])[+!![]]]()[+!![]+[!![]+!![]]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]][([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+([][[]]+[])[+!![]]+(![]+[])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+[]]+([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+(!![]+[])[!![]+!![]+!![]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+!![]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]]+[])[!![]+!![]+[+[]]]+([][(!![]+[])[!![]+!![]+!![]]+([][[]]+[])[+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([![]]+[][[]])[+!![]+[+[]]]+(!![]+[])[!![]+!![]+!![]]+(![]+[])[!![]+!![]+!![]]]()+[])[!![]+!![]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(![]+[])[+!![]])()(!![])[+!![]]+(!![]+[])[!![]+!![]+!![]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]][([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+([][[]]+[])[+!![]]+([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(![]+[])[+!![]]+(!![]+[])[+[]]](([][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]]+[])[!![]+!![]+[+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]][([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+([][[]]+[])[+!![]]+(![]+[])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+[]]+([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+(!![]+[])[!![]+!![]+!![]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+!![]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]]+[])[!![]+!![]+[+[]]]+(![]+[])[!![]+!![]+!![]]+(!![]+[])[!![]+!![]+!![]]+(![]+[])[!![]+!![]]+(![]+[])[+[]])())[+!![]+[+!![]]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(!![]+[])[+!![]]+(![]+[])[!![]+!![]]+([][[]]+[])[!![]+!![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]][([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+([][[]]+[])[+!![]]+(![]+[])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+[]]+([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+(!![]+[])[!![]+!![]+!![]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+!![]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]]+[])[!![]+!![]+[+[]]]+(![]+[])[+!![]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+([][(!![]+[])[!![]+!![]+!![]]+([][[]]+[])[+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([![]]+[][[]])[+!![]+[+[]]]+(!![]+[])[!![]+!![]+!![]]+(![]+[])[!![]+!![]+!![]]]()+[])[!![]+!![]])()((+(+!![]+(!![]+[])[!![]+!![]+!![]]+(+!![])+(+[])+(+[])+(+[]))+[])[+[]]+![])[+[]]+([]+[])[(![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+([][[]]+[])[+!![]]+(!![]+[])[+[]]+([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(!![]+[])[+!![]]]()[+!![]+[!![]+!![]]]+(+[]+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+[+[]]]))()

Ngoài ra còn có phiên bản dài hơn một chút (+4 byte) cũng hoạt động trong Chrome và Microsoft Edge:

Đối với những người không quen thuộc với JSFuck, đó là về việc viết JavaScript như thể chỉ có sáu ký tự và đôi khi nó có thể trở nên khá điên rồ.

Bảng này cho thấy các ký tự được sử dụng trong Hello, World! chương trình được mã hóa trong JSFuck. Mã văn bản đơn giản là chỉ alert("Hello, World!").

+----------+--------------------------------------+---------------------------+
|JavaScript|               write as               |           JSFuck          |
+----------+--------------------------------------+---------------------------+
|     a    | (false+[])[1]                        | (![]+[])[+!![]]           |
|     l    | (false+[])[2]                        | (![]+[])[!![]+!![]]       |
|     e    | (true+[])[3]                         | (!![]+[])[!![]+!![]+!![]] |
|     r    | (true+[])[1]                         | (!![]+[])[+!![]]          |
|     t    | (true+[])[0]                         | (!![]+[])[+[]]            |
|     (    | ([]+[]["fill"])[13]                  | 114 bytes                 |
|     "    | ([]+[])["fontcolor"]()[12]           | 539 bytes                 |
|     H    | btoa(true)[1]                        | 1187 bytes                |
|     o    | (true+[]["fill"])[10]                | 105 bytes                 |
|   space  | ([]["fill"]+[])[20]                  | 107 bytes                 |
|     W    | (NaN+self())[11]                     | 968 bytes                 |
|     d    | (undefined+[])[2]                    | ([][[]]+[])[!![]+!![]]    |
|     !    | atob((Infinity+[])[0]+false)[0]      | 1255 bytes                |
|     )    | (0+[false]+[]["fill"])[20]           | 114 bytes                 |
+----------+--------------------------------------+---------------------------+

Ở đây, các chuỗi "fill", "fontcolor"v.v. phải được viết là "f"+"i"+"l"+"l", "f"+"o"+"n"+"t"+"c"+"o"+"l"+"o"+"r"để được mã hóa.

Các định danh toàn cầu self, atobbtoađược viết như thế nào Function("return self")().

Functionchính nó nên được []["fill"]["constructor"].

Dấu phẩy ","rất khó, tôi không chắc chắn 100% nó hoạt động như thế nào nhưng nó sử dụng []["concat"]hàm để tạo một mảng. Tôi sẽ đăng một bản cập nhật khi tôi có thời gian để làm thêm các bài kiểm tra.


Tôi đã mã hóa điều này bằng cách sử dụng JScrewIt - tín dụng cho GOTO 0 để tạo ra một công cụ tinh vi như vậy:

  • Mở Firefox (Bạn có thể chọn bất kỳ trình duyệt nào khác, nhưng mã chỉ dành cho Firefox là ngắn nhất.)
  • Điều hướng đến JScrewIt : http://jscrew.it
  • Đầu vào: alert("Hello, World!")
  • Mã thực thi: đã kiểm tra
  • Khả năng tương thích: Chỉ trình duyệt này

Điều này khác với câu trả lời của tôi cho câu hỏi này cho sự hiện diện của dấu phẩy sau "Xin chào".

Thật thú vị, cú pháp ES6

alert`Hello, World!`

thậm chí mất nhiều byte hơn để mã hóa (+1500 hoặc hơn) vì độ phức tạp cao hơn của mã hóa hai backticks hơn là ("").


Chà, nó hoạt động trong Chrome trên Android
Beta Decay

Cũng hoạt động trong Chrome trên OS X
C0deH4cker

1
Bạn đã làm một công việc tuyệt vời ở đây! Hãy chắc chắn kiểm tra bản cập nhật cuối cùng.
GOTO 0

4
@ GOTO0 Đợi ... bạn là tác giả của JScrewIt, phải không?
tôi và con mèo của tôi

1
Làm thế quái nào bạn gọi chức năng với điều này?

29

Pada , 83 68 byte

~.O~Ow~q~Owo~O~Oww~Q~qwo~q~O~wQ~q~w~q~q~Q~Ow~Q~Q~wo~q~w.~q~w.~.wO~qw

Tôi tin rằng điều này là tối ưu cho một chương trình tuyến tính (tức là chương trình không sử dụng các toán tử dòng điều khiển ?*). Nhìn chung, nó có thể là tối ưu, nhưng tôi không biết cách sử dụng các toán tử bổ sung đó trong một lượng mã nhỏ như vậy (hoặc cách khám phá các khả năng theo lập trình).

Ngôn ngữ gần đây đã trải qua một số thay đổi sau khi tôi bắt đầu thảo luận với tác giả qua email. Tuy nhiên, tôi đã viết một triển khai tham chiếu cho trạng thái hiện tại của thông số ngôn ngữ vào tuần trước, vì vậy đoạn mã trên thực sự có thể chạy được.

Metagolf

Ban đầu, tôi đã sử dụng đầu ra của việc thực hiện tham chiếu của mình cho thử thách này và tạo ra một giải pháp thủ công dựa trên đó. Tuy nhiên, đó chỉ là một cách tiếp cận heuristic.

Vì vậy, thay vào đó tôi đã viết một bộ giải trong Mathematica thực sự biết về các cấu trúc dữ liệu và toán tử Pada để tìm ra một giải pháp tối ưu. Trung bình, nó phát triển tuyến tính với độ dài của chuỗi (mặc dù một số kết hợp ký tự chậm hơn một chút so với các chuỗi khác) và mất khoảng 1,5 giờ cho Hello, World!.

Vì vậy, làm thế nào tôi đi về việc viết người giải. Đầu tiên, chúng tôi nhận thấy rằng chúng tôi chỉ cần xem xét 6 toán tử: ~.oOqQ(cộng với sự cần thiết wcho mỗi ký tự được in). Sử dụng ngăn xếp hoặc khóa bit không hữu ích trong mã tuyến tính và tôi không tin điều đó ?*có thể được sử dụng hiệu quả trong ít hơn 68 byte.

Trạng thái của Pada (bỏ qua các ngăn xếp và khóa) bao gồm 7 công tắc và 8 bit, được sắp xếp như sau:

       /
   /       \
 /   \   /   /
0 1 0 0 1 0 0 0

Vì vậy, đó là trạng thái có thể. Bước tiền xử lý đầu tiên của tôi là thiết lập một biểu đồ có hướng của các trạng thái trong đó mỗi cạnh tương ứng với một thao tác. Nghĩa là, biểu đồ có 32768 đỉnh, mỗi đỉnh có độ ngoài 6 (một cạnh ra cho mỗi 6 thao tác đang được xem xét). Chúng ta có thể sử dụng biểu đồ này để tìm đường đi ngắn nhất giữa hai trạng thái bất kỳ (riêng biểu đồ này có thể khá hữu ích cho việc chơi golf Pada).215 = 32768

Bây giờ đối với mỗi nhân vật, chúng tôi muốn đạt đến trạng thái win ký tự đó. Có bao nhiêu tiểu bang như vậy? wđọc byte từ bit được thả vào (theo chu kỳ). Vì vậy, có 8 phép quay các bit của ký tự có thể in tất cả các ký tự đó. Đối với mỗi lần quay đó, ba công tắc được cố định (để thực hiện wthả đúng vị trí). Điều này để lại 4 công tắc tùy ý. Vì vậy, chúng tôi đã có các trạng thái có thể cho mỗi trong mã của chúng tôi.8 * 24 = 128w

Với những vấn đề này, chúng ta có thể giải quyết một vấn đề đồ thị khác: xây dựng một biểu đồ có đỉnh nguồn, sau đó một "lớp" cho mỗi ký tự và một đỉnh chìm. Các lớp bao gồm 128 trạng thái cho mỗi đỉnh, nút nguồn tương ứng với trạng thái ban đầu của chương trình (tất cả các công tắc ở bên trái và tất cả các bit đều bằng 0). Nút chìm tương ứng không có trạng thái cụ thể. Chúng ta đã có các cạnh được định hướng từ mọi đỉnh trong một lớp đến mọi đỉnh trong lớp tiếp theo, trong đó trọng số cạnh là khoảng cách giữa hai trạng thái trong biểu đồ trước đó của chúng ta. Trọng lượng của các cạnh từ lớp cuối cùng đến bồn rửa đều bằng 0. Nghĩa là, chúng ta có thể tính toán trước tất cả các trọng số cạnh đó. Đây là bước đắt nhất của tính toán và mất 1,5 giờ cho Hello, World!.

Với biểu đồ này được thiết lập, chúng tôi có thể tìm thấy đường dẫn ngắn nhất từ ​​nguồn đến bồn khá nhanh (mất 0,05 giây trên máy của tôi). Đối với Hello, World!các trạng thái mong muốn là:

0, 16960, 22052, 13828, 13828, 30389, 12487, 8307, 27299, 23450, 18922, 22778, 18682, 18459

trong đó 7 bit có ý nghĩa nhất tương ứng với các công tắc và 8 bit đáng kể nhất đối với các bit của Pada.

Bây giờ chúng ta quay lại biểu đồ đầu tiên và tìm các cạnh thực tế (tức là các thao tác) tương ứng với đường đi ngắn nhất giữa mỗi cặp trạng thái tiếp theo và kết thúc mỗi trạng thái bằng a w. Voilà, một giải pháp tối ưu (dựa trên các giả định trên).

Dưới đây là toàn bộ Mathicala nếu bất cứ ai muốn metagolf một chuỗi khác nhau trong Pada:

string = "Hello, World!";
width = StringLength@string;
getState[letter_, state_] := (
  {shift, switchState} = IntegerDigits[state - 1, 16, 2];
  bits = RotateRight[
    IntegerDigits[ToCharacterCode[letter][[1]], 2, 8], shift];
  switchState = IntegerDigits[switchState, 2, 4];
  switches = {-1, -1, -1, -1, -1, -1, -1};
  {top, middle, bottom} = IntegerDigits[shift, 2, 3];
  switches[[1]] = top;
  If[top < 1,
   switches[[2]] = middle;
   If[middle < 1,
    switches[[4]] = bottom,
    switches[[5]] = bottom
    ],
   switches[[3]] = middle;
   If[middle < 1,
    switches[[6]] = bottom,
    switches[[7]] = bottom
    ]
   ];
  For[i = 1, i <= 7, ++i,
   If[switches[[i]] < 0,
    switches[[i]] = First@switchState;
    switchState = Rest@switchState
    ]
   ];
  {bits, switches}
  )
encode[state_] := FromDigits[Join @@ state, 2]
decode[id_] := Partition[IntegerDigits[id, 2, 15], 8, 8, 1, {}]
getBitFromSwitches[switches_] := (
  If[switches[[1]] < 1,
   If[switches[[2]] < 1,
    1 + switches[[4]],
    3 + switches[[5]]
    ],
   If[switches[[3]] < 1,
    5 + switches[[6]],
    7 + switches[[7]]
    ]
   ]
  )
toggle[list_, index_] := ReplacePart[list, index -> 1 - list[[index]]]
stateEdges = Flatten@Table[
    {bits, switches} = decode@id;
    bit = getBitFromSwitches@switches;
    {
     Labeled[id \[DirectedEdge] encode@{bits~toggle~bit, switches}, 
      "~"],
     Labeled[id \[DirectedEdge] encode@{bits, switches~toggle~1}, "."],
     If[switches[[1]] < 1,
      {
       Labeled[id \[DirectedEdge] encode@{bits, switches~toggle~2}, 
        "o"],
       Labeled[
        id \[DirectedEdge] encode@{bits, switches~toggle~1~toggle~3}, 
        "q"],
       If[switches[[2]] < 1,
        Labeled[id \[DirectedEdge] encode@{bits, switches~toggle~4}, 
         "O"],
        Labeled[id \[DirectedEdge] encode@{bits, switches~toggle~5}, 
         "O"]
        ],
       If[switches[[3]] < 1,
        Labeled[
         id \[DirectedEdge] 
          encode@{bits, switches~toggle~1~toggle~3~toggle~7}, "Q"],
        Labeled[
         id \[DirectedEdge] 
          encode@{bits, switches~toggle~1~toggle~3~toggle~6}, "Q"]
        ]
       },
      {
       Labeled[id \[DirectedEdge] encode@{bits, switches~toggle~3}, 
        "o"],
       Labeled[
        id \[DirectedEdge] encode@{bits, switches~toggle~1~toggle~2}, 
        "q"],
       If[switches[[3]] < 1,
        Labeled[id \[DirectedEdge] encode@{bits, switches~toggle~6}, 
         "O"],
        Labeled[id \[DirectedEdge] encode@{bits, switches~toggle~7}, 
         "O"]
        ],
       If[switches[[2]] < 1,
        Labeled[
         id \[DirectedEdge] 
          encode@{bits, switches~toggle~1~toggle~2~toggle~5}, "Q"],
        Labeled[
         id \[DirectedEdge] 
          encode@{bits, switches~toggle~1~toggle~2~toggle~4}, "Q"]
        ]
       }
      ]
     }
    ,
    {id, 0, 2^15 - 1}];
stateGraph = 
  Graph[# & @@@ stateEdges, EdgeLabels -> Rule @@@ stateEdges];
uid = 0;
layers = Join[{{{uid++, 0}}}, 
   Table[{uid++, encode@getState[#, i]}, {i, 128}] & /@ 
    Characters@string, {{{uid++, -1}}}];
edges = Flatten[Table[
      from \[DirectedEdge] to
      ,
      {from, #},
      {to, #2}
      ] & @@@ Partition[layers, 2, 1], 2];
Timing[weights = (
     {from, to} = Last /@ List @@ #;
     If[to < 0,
      0,
      GraphDistance[stateGraph, from, to]
      ]
     ) & /@ edges;]
characterGraph = Graph[edges, EdgeWeight -> weights];
Timing[path = 
  Last /@ Most@
    FindShortestPath[characterGraph, {0, 0}, layers[[-1]][[1]]]]
(PropertyValue[{stateGraph, #}, EdgeLabels] & /@ 
      DirectedEdge @@@ 
       Partition[FindShortestPath[stateGraph, ##], 2, 1] <> "w" & @@@ 
   Partition[path, 2, 1]) <> ""

Một ngôn ngữ thú vị để làm metagolf trên =). Điều này làm tôi tự hỏi, công việc hàng ngày của bạn là gì? oO
vừa qua

4
@justhalf Tôi hiện đang ở trong tình trạng lấp lửng giữa bằng thạc sĩ và nghiên cứu tiến sĩ (vì vậy tôi chắc chắn có quá nhiều thời gian trong tay nếu đó là hàm ý của bạn;)). (Đây thường là cuộc thảo luận để trò chuyện nhiều hơn :))
Martin Ender

Pada có nghĩa là khi ở bahasa Indonesia / Malay. Điều đó có liên quan không?
XiKuuKy

@XiKuuKy afaik, ngôn ngữ được gọi là Pada, vì nó có nghĩa là "rơi" trong tiếng Croatia.
Martin Ender

Và câu trả lời này cho (xem ở đây ). Bạn có thể có thể kết hợp 2 câu trả lời trong một để mô tả vấn đề Hello World tuyệt vời này nói chung.
Vitaliy Kaurov
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.