"Halo Dunia!"


419

Jadi ... eh ... ini agak memalukan. Tapi kami tidak memiliki "Halo, Dunia!" tantangan belum (meskipun memiliki 35 varian ditandai dengan , dan terus bertambah). Meskipun ini bukan golf kode paling menarik dalam bahasa umum, menemukan solusi terpendek di esolang tertentu bisa menjadi tantangan serius. Misalnya, setahu saya tidak diketahui apakah solusi Brainfuck sesingkat mungkin telah ditemukan.

Lebih lanjut, sementara semua Wikipedia (entri Wikipedia telah dihapus tetapi ada salinannya di archive.org ), esolangs dan Rosetta Code memiliki daftar "Halo, Dunia!" program, tidak ada yang tertarik memiliki yang terpendek untuk setiap bahasa (ada juga repositori GitHub ini ). Jika kita ingin menjadi situs yang signifikan dalam komunitas kode golf, saya pikir kita harus mencoba dan membuat katalog pamungkas "Hello, World!" program (mirip dengan bagaimana tantangan quine dasar kita berisi beberapa quine yang paling pendek dikenal dalam berbagai bahasa). Jadi mari kita lakukan ini!

Aturan

  • Setiap pengajuan harus merupakan program lengkap.
  • Program tidak boleh mengambil input, dan mencetak Hello, World!ke STDOUT (aliran byte yang tepat ini, termasuk huruf besar dan tanda baca) ditambah baris baru tambahan opsional, dan tidak ada yang lain.
  • Program tidak boleh menulis apa pun kepada STDERR.
  • Jika ada yang ingin menyalahgunakan ini dengan membuat bahasa tempat program kosong dicetak Hello, World!, lalu selamat, mereka hanya membuka jalan bagi jawaban yang sangat membosankan.

    Perhatikan bahwa harus ada penerjemah agar pengajuan dapat diuji. Diperbolehkan (dan bahkan dianjurkan) untuk menulis sendiri penerjemah ini untuk bahasa yang sebelumnya tidak diterapkan.

  • Pengajuan dinilai dalam byte , dalam pengkodean yang sesuai (sudah ada), biasanya (tetapi tidak harus) UTF-8. Beberapa bahasa, seperti Folder , agak sulit untuk dinilai - jika ragu, silakan tanyakan di Meta .
  • Ini bukan tentang menemukan yang bahasa dengan terpendek "Hello, World!" program. Ini tentang menemukan "Hello, World!" Yang terpendek. program dalam setiap bahasa. Karenanya, saya tidak akan menandai jawaban apa pun sebagai "diterima".
  • Jika bahasa pilihan Anda adalah varian sepele dari bahasa lain (yang berpotensi lebih populer) yang sudah memiliki jawaban (pikirkan dialek BASIC atau SQL, shell Unix atau turunan Brainfuck sepele seperti Alphuck), pertimbangkan untuk menambahkan catatan ke jawaban yang ada bahwa solusi yang sama atau sangat mirip juga merupakan yang terpendek dalam bahasa lainnya.

Sebagai catatan tambahan, tolong jangan turunkan jawaban membosankan (tapi valid) dalam bahasa yang tidak banyak bermain golf - ini masih berguna untuk pertanyaan ini karena mencoba untuk menyusun katalog selengkap mungkin. Namun, lakukan sebagian besar upvote jawaban dalam bahasa di mana penulis benar-benar harus berusaha golf kode.

Untuk inspirasi, periksa Koleksi Hello World .

Katalog

Cuplikan Stack di bagian bawah posting ini menghasilkan katalog dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

## Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Misalnya:

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

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

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

Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:

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


2
@isaacg Tidak. Saya pikir akan ada beberapa bahasa yang menarik di mana tidak jelas apakah pengujian primality dimungkinkan.
Martin Ender

6
Jika program yang sama, seperti "Hello, World!", adalah yang terpendek dalam banyak bahasa yang berbeda dan tidak terkait, haruskah itu diposkan secara terpisah?
aditsu

2
@ mbomb007 Yah itu disembunyikan secara default karena tiga blok kode membutuhkan banyak ruang. Saya dapat mengecilkan mereka sehingga masing-masing adalah satu baris, tetapi saya lebih suka menjaga kode tetap terjaga jika ada bug.
Martin Ender

7
@ETHproductions "Tidak seperti aturan kami yang biasa, jangan ragu untuk menggunakan bahasa (atau versi bahasa) meskipun itu lebih baru daripada tantangan ini." Menerbitkan bahasa dan implementasi sebelum mempostingnya pasti akan sangat membantu.
Martin Ender

2
@ MartinEnder ... Hampir. Jika dua solusi BF memiliki ukuran yang sama, yang dengan urutan leksikografis yang lebih kecil akan mengambil jumlah byte yang lebih kecil di Unary. Tentu saja solusi Unary terkecil yang diterjemahkan ke BF dijamin terkecil.
user202729

Jawaban:


442

Terjebak, 0 byte

Nah, tidak bisa mendapatkan lebih pendek dari itu ... Sebuah program akan menampilkan kosong Hello, World!di Terjebak .


57
Sial, saya terlambat 20 menit! : P
Kade

33
Noooo c'mon pistol tercepat di efek barat;)
Beta Decay

30
@ Zuck Ya, Stuck dibuat untuk kode-golf, seperti CJam / GolfScript / Pyth. The Hello, World!hal itu hanya sesuatu yang saya telah dimasukkan ke dalam sebagai tempat awal pembangunan. Saya tidak berniat meninggalkannya begitu lama, hanya saja tidak pernah sempat untuk menghapusnya.
Kade

132
Saya sudah mencoba mencari solusi yang lebih pendek, tetapi saya mandek.
Cyoce

51
-1 byte dalam jQuery. Sudahkah Anda mencoba jQuery?
10 Balasan

244

PHP, 13 byte

Hello, World!

Iya. Berhasil.


261
Seperti biasa dengan PHP, Anda selalu bertanya-tanya bagaimana cara kerjanya
Fatalize

95
Ini bekerja, tentu saja, karena tidak ada <?phpdalam kode, menyebabkannya tidak ditafsirkan oleh PHP sama sekali :)
Lynn

58
Itu artinya ini hanyalah jawaban HTML ...
Nelson

82
@Nelson tidak, tidak. PHP tidak harus ditempatkan di HTML. Dan ditambah, HTML tidak mencetak ke stdout
georgeunix

26
Ini adalah jawaban paling lucu yang pernah ada
Oliver Ni

241

Brainfuck, 78 byte

Karunia terbuka: Jika ada yang bisa meningkatkan skor ini, saya akan memberikan hadiah (+500) kepada mereka. @ KSabtelah menemukan solusi 76 72 byte!

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

Cobalah online!

28 byte pertama --<-<<+[+[<+>--->->->-<<<]>]menginisialisasi rekaman dengan hubungan perulangan berikut (mod 256):

f n = 171 · (-f n-1 - f n-2 - f n-3 + 1) , dengan f 0 = 57 , f 1 = 123 , dan f 2 = 167 .

Faktor 171 muncul karena 3 -1 ≡ 171 (mod 256) . Ketika nilai saat ini diterjemahkan satu sel kembali (via <+>---) kurangi 3 setiap kali secara efektif mengalikan nilai dengan 171.

Pada n = 220 nilai yang akan diterjemahkan adalah nol, dan iterasi berhenti. Sepuluh byte sebelum titik berhenti adalah sebagai berikut:

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

Ini berisi semua komponen yang diperlukan untuk menghasilkan Hello, World!, dalam mode berburu-dan-mematuk, dengan sedikit penyesuaian.

Saya juga menemukan solusi alternatif 78 byte:

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

Cobalah online!

Saya menganggap yang satu ini lebih baik daripada yang pertama karena beberapa alasan: ia menggunakan lebih sedikit sel di rumah, ia memodifikasi lebih sedikit sel secara keseluruhan, dan berakhir lebih cepat.


Lebih detail

Relasi rekurensi memiliki representasi yang sangat singkat di Brainfuck. Tata letak umum adalah sebagai berikut:

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

yang mewakili:

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

dengan

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

Selain itu, <+>dapat diubah untuk mengalikan rentang dengan konstanta tanpa mempengaruhi titik berhenti, dan istilah dapat ditambahkan sebelum >{k}untuk menggeser rentang dengan konstanta, lagi tanpa mempengaruhi titik berhenti.


Contoh lainnya

Urutan Fibonacci

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

Bilangan N-gonal

Bilangan Segitiga

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

Didefinisikan sebagai f n = 2 · f n-1 - f n-2 + 1 , dengan f 0 = 0 , f 1 = 1 .

Angka Kotak

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

Bilangan Pentagonal

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

dll.


BF Crunch

Saya telah menerbitkan kode yang saya gunakan untuk menemukan beberapa solusi ini di github . Membutuhkan .NET 4.0 atau lebih tinggi.

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.

Output diberikan dalam tiga baris:

  1. Total panjang program yang ditemukan, dan segmen inisialisasi.
  2. Path diambil, dimulai dengan tape pointer saat ini. Setiap node sesuai dengan satu karakter output, direpresentasikan sebagai (pointer, biaya).
  3. Segmen pita yang digunakan.

Misalnya, hasil akhirnya bfcrunch "hello world" 70 -r -i23adalah:

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

Ini sesuai dengan program lengkap:

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

Catatan Lainnya

Halo Dunia!

Bungkus, 78 byte :

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

atau

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

Non-pembungkus, 87 byte (sebelumnya 92 byte (mitch) ):

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

Halo Dunia!

Wrapping, 80 byte :

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

Non-pembungkus, 81 byte (sebelumnya 92 byte (hirose) ):

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

Halo Dunia!

Bungkus, 74 byte :

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

Non-pembungkus, 84 byte :

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

Versi Esolang

Halo Dunia! \ N

Bungkus, 76 byte :

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

Ini menggunakan satu sel di kiri rumah, dan dengan demikian akan dianggap 77.

Non-pembungkus, 83 byte :

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

Rdebath disetujui . output 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

inversed.ru (Peter Karpov)

Halo Dunia!

Wrapping, 70 byte (sebelumnya 78 1 ):

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

Non-pembungkus, 77 byte (sebelumnya 89?):

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

Penulis mengklaim bahwa kode tangan terpendek "Hello World!" adalah 89 byte, tetapi tidak memberikan referensi. Saya dengan ini mengklaim catatan untuk ini juga.

Halo Dunia!

Wrapping, 65 byte (sebelumnya 66 byte):

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

Ini sebenarnya kode tangan juga (yang terbaik yang bisa saya temukan dengan mengunyah adalah 68 byte ). Sel pertama diinisialisasi ke 259 (3), dan dikurangi dengan 7 setiap iterasi, berulang sebanyak 37 kali. Sel berikutnya dikurangi dengan 6, menghasilkan 256 - 6 · 37 = 34 . Sisa sel dikurangi dengan 4 setiap kali, menambahkan satu sel setiap iterasi, dengan setiap sel baru diinisialisasi ke 252 (-4). Hasilnya adalah sebagai berikut:

[  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 Solusi yang diberikan (79 byte) dapat diremehkan oleh satu:

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

39
Ini gila. Salah satu dari Anda harus mengirimkan versi 82-byte ke golf anarki.
Martin Ender

117
Solusi Java terbaik untuk pertanyaan ini adalah 76 byte. Hanya 9 byte lagi untuk membuktikan bahwa pengembang Java harus beralih ke Brainfuck.
Level River St

9
@LevelRiverSt Huruf kecil satu adalah 2 byte lebih pendek dari Java. Akhir zaman telah tiba.
Conor O'Brien

13
"Hanya 9 byte lagi untuk membuktikan bahwa pengembang Java harus beralih ke 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

Hanya untuk lol ..


4
Bekerja untukku. Coba letakkan pertunjukannya di baris pertama dan Anda telah dihentikan pada baris terakhir
JelloDude

72
Saya benar-benar perlu belajar bagaimana menggunakan bahasa ini.
Buzz

3
Bukankah spasi dan baris baru menggunakan jumlah byte yang sama? Dan secara teknis, IT'S SHOWTIMEdan TALK TO THE HANDharus di baris pertama dan terakhir.
wizzwizz4

5
@AlCode Tapi itu lebih benar dan membutuhkan jumlah byte yang sama dan ada lebih banyak kompatibilitas dan terlihat lebih bagus dan mengapa saya membuat keributan ini adalah tantangan kode golf di PPCG dan itu adalah kejutan bahwa kode Anda dapat dibaca dan baik selesai Anda membuat jawaban dengan golf yang dapat dibaca dan diberi +1.
wizzwizz4

11
@ wizzwizz4 terima kasih banyak, saya mencoba untuk menjadi seprofesional mungkin dengan ArnoldC bahasa masa depan!
AlCode

204

Seed , 6016 4234 4203 byte

20 854872453003476740699221564322673731945828554947586276010721089172712854441839676581917455319274850944955030258951339804246125714958815519550291630078076933441706558540342671975808828643360922071900333028778314875248417953197990571991784126564752005357199892690656368640420204822142316716413192024742766282266114842280731756458212469988291309261528542889299297601723286769284159107438930448971911102280330101196758384815655479640836157495863547199726234352265518586460633795171196315255736880028338460236768181141732764911402112878175632130129852788301009582463631290071329795384336617491655825493435803011947670180368458659271192428341035912236946048939139042310380278430049252171822721598175984923434205610723412240162418996808671543770639111617709604242882388664919702606792443015941265168129550718541372361144081848761690730764968771245566074501485020726368378675085908872608679630368472956274468410052703615106090238423979678950131481176272880569100533049143775921798055136871254424261001442543122666701145111965968366507060931708140304772342855064834334129143038575569044150428480231956133612367393837580345180691911525531699573096952433882387811884727975431823620782822755161559988205401134640722220804177812794328129589949692446031008866917615922944976151073653201316255518389496411696741029209242119521978920200314572718584995265523235225587228975886710511855501710470163649632761488899317729943053884132314641377747687975638119132094777769497069556255954031537245957811105217875011509899497752696062748928963281605780942517262774976217663461063680912331030221981433051827519906741285738915397005702326447635845195923640649166530310494885569783989508000344280715868581532826832242144647203531393142251025361866506821695860883605004105862208004440476654027574832078603305884731766236740069411566854496824754558761536201352147934963241039597221404341132342297870517293237489233057335406510464277610336142382379135365550299895416613763920950687921780736585299310706573253951966294045814905727514141733220565108490291792987304210662448111170752411153136765318541264632854767660676223663544921028492602135525959428999005153729028491208277493747933069008199074925710651071766675870081314909460661981433426167330215548196538791617762566403934129026219366764038390123622134753742930729751695349588862441999672547791630729398908283091638866715502470152431589429837867944760012419885615525232399584379209285060418518373512154801760060312646951597932345591416241634668119867158079946680321131213357200382937049485606706114467095019612014749723443159443363662563254359712162432143334612180576945072905749883870150120687696027984317320305291407322779803583395375616762530641605634303022155218169343410634115050596030685041633824154135240376022159918501703555881290333205131375705406831260759974112248490451605422031345264183102048614606636275942039438138959188478277971377232005036301145411215067576576667743288951344423152531417111852584846747428443123174595987315325304540564683047858415059703724263652136185848573853965992798725654430360647040362341567082462847275277303225817689141675391972818943419663764371222973269129542760661385278009266471167618553065823580448848795731295589715602705860758954890415040763604082216728159486423396295188510311881004469017351709060492844398219491990895826924575575549615118821417543037296628825303328056839433114519945243963946989899508355224823109677424196639930153649890175062456649384605721510239142861693109687536600667811037619175927995599388547421689316110236566026931360164495251160997857372500940728057700473763884480342708897319990346726967220426504612260565552531158509215849649565188655100774748485416791517853427613458459889062942881409801879085054494129489535044719193283409051007851153504224002807392992520076910314763705776345053922387355156981872691537772657428096384535960466923475731297217863371650154415835785630016335858514130863258775100537612371430357576913148500310344278511588325852376442503898849856566716198848377379400158332792027967216204970114516984638014129252882482309132898416484525230488700253065644547798869056136044415413099076332059572505138116227535024546891015836838323022822272664771489129085797354578016574544759934333471793

Program Befunge-98 yang dihasilkan (berdasarkan ini ) adalah

"9!dlroW ,olleH"ck,@

35
Wow! Bagaimana Anda menemukan ini?
ETHproduksi

31
Apa . Itu gila.
Conor O'Brien

47
BAGAIMANA ANDA MENDAPATKAN INI?
Destructible Lemon

40
Apakah Anda merekayasa balik twister mersenne? Dan apakah ini memiliki implikasi keamanan?
Primo

68
Saya akan memberi Anda +500 lagi untuk penjelasan (teoretis) terperinci.
Primo

156

Mornington Crescent , 3614 3568 byte

Terima kasih kepada NieDzejkob untuk menghemat 46 byte dengan menggunakan nama garis yang lebih pendek.

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

Cobalah online!

Ini pastinya suboptimal, tetapi itu setengah dari ukuran solusi pada esolang.

Hello, World dibangun dengan mengiris nama stasiun berikut dan menggabungkan hasilnya:

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

Akhirnya, saya menghitung kode karakter !sebagai (2<<4)+1 == 33. Semua bagian ini digabungkan dalam Paddington dan akhirnya dicetak di Mornington Crescent.

Catatan: Bahasa tidak menentukan apakah mungkin untuk melakukan perjalanan ke stasiun yang sama dua kali berturut-turut, tetapi penerjemah mengizinkannya, jadi saya memanfaatkannya.


44
Ini benar - benar brilian : D
Beta Decay

32
Saya suka bahasa ini. Maaf, saat saya melakukan pemrograman sistem dalam bahasa ini.
kucing

4
Di mana pada EARTH bahasa ini sudah ada sepanjang hidup saya?
ScottMcSudah

30
@ScottMcGready antara Camden Town dan Euston.
Martin Ender

3
Mornington Crescent ada di TIO sekarang. tio.run/#mornington-crescent
Dennis

123

jahat , 70 byte

aeeeaeeewueuueweeueeuewwaaaweaaewaeaawueweeeaeeewaaawueeueweeaweeeueuw

Ini menggunakan empat perintah berikut:

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
Itu jahat ...
David Grinberg

61
Terutama karena avatar Anda adalah Black Hat.
TheDoctor

5
dapatkah kau menjelaskan kepadaku proses menjalin.
Kishan Kumar 4-15

4
@KishanKumar ya
grc

30
Jika Anda membaca program ini dengan suara keras, kedengarannya seperti bass dubstep.
Joe Z.

112

brainfuck, 72 byte

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

Cobalah online!

Dan solusi 76 byte asli non-pembungkus :

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

Cobalah online!

Solusi terpendek lainnya yang diketahui (sepengetahuan saya) yang saya temukan

'Halo Dunia!' 77 byte:

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

Cobalah online!

'Halo Dunia!' 70 byte:

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

Cobalah online!


Ini ditemukan menggunakan program c ++ yang saya tulis di sini: https://github.com/ksabry/bfbrute

Catatan: Saya awalnya ingin membersihkan kode ini sebelum saya mempostingnya agar benar-benar terbaca dan dapat digunakan, tetapi karena saya belum sempat melakukannya selama lebih dari satu tahun saya pikir saya hanya akan mempostingnya apa adanya. Itu membuat banyak penggunaan template dan kompilasi konstanta waktu untuk setiap optimasi potensial dan memiliki banyak kode keluar dari pengujian saya tetapi tidak ada komentar yang sangat membantu, maaf tapi agak mengerikan.

Tidak ada yang sangat pandai tentang kode ini, itu adalah forcer yang kasar pada intinya, namun cukup dioptimalkan. Optimalisasi utama adalah bahwa ia pertama-tama melakukan iterasi melalui semua program tanpa loop (tidak [atau ]) hingga panjang tertentu (16 saat ini) dan cache array dari semua perubahan yang akan dilakukan pada array data. Ini hanya akan menyimpan satu program per array perubahan unik jadi misalnya hanya satu >+<<->dan <->>+<akan disimpan. Itu kemudian beralih melalui semua program yang mungkin yang terdiri dari program apa pun dalam cache ini dengan kombinasi loop di antara mereka. Setelah menjalankan setiap program, ia melakukan perburuan serakah sederhana dan mematuk karakter dan menambahkan ini ke akhir program.

Setelah menjalankan ini melalui ruang semua program saya perhatikan bahwa hampir semua program terpendek (hingga panjang ~ 19) adalah bentuk *[*[*]*]. Membatasi pencarian ke program dari formulir ini mempercepat pencarian. Pemegang rekor saat ini ditemukan pada panjang 27. Yang ini sebenarnya dihitung menjadi panjang 74, tapi saya perhatikan urutan tertentu .>.>.>.yang cukup beruntung untuk memiliki 0 di sel data untuk itu benar memungkinkan untuk disederhanakan untuk [.>]<membawanya turun ke 72.

Saya membiarkannya berjalan cukup lama dan menyelesaikan pencarian dengan parameter saat ini hingga panjang 29, saya curiga akan sulit untuk mengalahkan yang sekarang dengan hanya naik lebih tinggi, saya pikir pendekatan yang paling menjanjikan mungkin akan meningkatkan ruang pencarian di beberapa cara yang cerdas.


32
Bagaimana Anda menemukan ini?
Dennis

2
@ Dennis Saya mungkin akan memposting penjelasan tentang proses saya ketika saya mendapatkan kesempatan, bersama dengan kode sumber yang saya gunakan (setelah saya membersihkannya)
KSab

32
Hei kamu mengalahkan Jawa.
Poke

18
Itu beberapa perangkat, bahkan tidak memerlukan sel pembungkus ó_Ò
primo

5
Akan senang melihat algoritma di balik ini :)
musicman523

84

Piet, 90 kode

masukkan deskripsi gambar di sini

Ini adalah gambar 30 kali 3. Atau, pada ukuran kode 10:

masukkan deskripsi gambar di sini

Menggunakan tata letak 3-tinggi sehingga saya hanya perlu penunjuk sekali. Jika ini masih golf saya mungkin bisa mencukur paling banyak kolom lain, karena ada push-pop no-op di sana.

Edit: @ solusi 84 codel primo .


6
Mencoba mengambil hadiahmu sendiri? Saya lebih memikirkan Anda Sp3000;)
Beta Decay

7
Hah, hanya karena saya menetapkan hadiah tidak berarti saya tidak dapat bergabung dalam kesenangan: P
Sp3000

9
Push-pop bukanlah larangan bagi saya. Ini ini .
mbomb007

1
Apa "bahasa" ini? Aku menyukainya!
Zoltán Schmidt

8
"push-pop no-op" sekarang menjadi frasa favorit saya
BobTheAwesome

82

Haystack , 17 Bytes

Haystack adalah bahasa pemrograman 2D yang dijalankan hingga menemukan jarum di tumpukan jerami |, semua saat melakukan operasi berbasis stack. Semua program dimulai dari sudut kiri atas, dan dapat menggunakan karakter arah ><^vuntuk bergerak di sekitar program. Arah diwarisi, jadi Anda tidak perlu terus menggunakan >untuk pergi ke kanan, arah hanya akan berubah ketika menyentuh karakter arah yang berbeda.

Secara default, penerjemah membaca dari kiri atas ke kanan, jadi kita hanya bisa mengatakan "Halo, Dunia!" ke tumpukan, gunakan ountuk mencetaknya, lalu letakkan jarum untuk menyelesaikan eksekusi.

"Hello, World!"o|

Bonus: Versi yang lebih menarik:

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

Hanya karena penasaran, apa yang terjadi jika Anda memasukkan salah satu karakter dalam sebuah string?
Random832

@ Random832 Dalam sebuah string, karakter directional diperlakukan sebagai karakter biasa, yaitu Anda dapat memasukkannya dalam string.
Kade

38
>; + o
bjb568

3
Saya berharap saya setengah cerdas seperti semua orang di sini, tetapi dalam "dokumentasi" (baca: posting forum beberapa orang) ia mengatakan ooutput sebagai angka. Bukankah seharusnya cpada akhirnya? Apakah ada dokumentasi yang tepat di mana saja? Ini super menarik!
Pengacara Setan

2
@Scott Super terlambat untuk membalas ini, posting forum itu mungkin saya! ooutput item tumpukan atas apa adanya, yaitu jika nomor ada itu mencetak itu. chanya akan melemparkannya ke char. Jadi, jika Anda memiliki string atau char di atas tumpukan oakan menjadi apa yang Anda inginkan :) Akhirnya dokumen ini akan diperbarui ..
Kade

70

Tolong, WarDoq! , 1 byte

H

Bantuan tidak hanya , WarDoq! memiliki built-in untuk ejaan yang paling umum dari frasa, bahkan memenuhi definisi bahasa pemrograman kita yang biasa.

Cobalah di penerjemah online resmi (kode masuk di Input ).


7
Jadi, HQ9 ++, pada dasarnya, eh? ;-)
AdmBorkBork

6
@ TimmyD Tidak, bukan HQ9 ++ .
Dennis

30
Oh untuk menangis sekeras-kerasnya. Apakah ada sesuatu yang bukan esolang saat ini? :)
AdmBorkBork

97
"Space: Begin a comment. The next non-space character ends the comment and is interpreted as usual."Jadi Anda hanya dapat memiliki komentar yang dibuat dari spasi ??? Saya kira bahkan bahasa yang paling berguna di dunia harus memiliki satu fitur yang tidak berguna +1,
Level River St

29
@steveverrill Mungkin jika tab juga dianggap sebagai komentar, maka kita dapat memiliki komentar yang ditulis sebagai program Whitespace
Pengoptimal

66

MarioLANG , 259 249 242 240 235 byte

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

Ini telah diuji dalam implementasi Ruby .

Setelah mengaburkan, "Halo, Dunia!" di MarioLANG saya melihat ke golf sedikit. Di atas adalah yang terpendek yang saya temukan sejauh ini.

Seperti sebelumnya saya mulai dari solusi Brainfuck yang menetapkan empat sel ke kelipatan terdekat dari 10 karakter He,dan spasi dan mengubahnya menjadi MarioLANG . Anda kemudian dapat memperpendek kode sedikit dengan memanfaatkan lantai bantu dalam loop yang hampir membagi separuh lebar loop. Perhatikan bahwa bagian bawah hanya dieksekusi satu kali kurang dari bagian atas, sehingga Anda tidak mendapatkan kelipatan persis dari penghitung awal di semua 4 sel lagi.

Akhirnya, saya ingin memanfaatkan ruang terbuang di depan loop, jadi saya menambahkan banyak elevator untuk memanfaatkan ruang vertikal di sana. Dan kemudian saya menyadari bahwa saya dapat melipat kode setelah loop (lihat revisi sebelumnya) di bawah loop untuk menggunakan beberapa ruang lebih vertikal, yang menghemat lima byte lagi.

Ini mungkin masih jauh dari sempurna, tetapi ini merupakan perbaikan yang layak atas solusi naif, saya pikir.

Metagolf

Saatnya untuk otomatisasi ...

Saya sudah mulai menyiapkan pemecah masalah di Mathematica untuk menemukan solusi optimal. Saat ini mengasumsikan bahwa struktur kode diperbaiki: counter set ke 12, 4 sel untuk dicetak, dengan penugasan tetap ke He,<space>dan urutan yang sama dari sel-sel itu. Yang bervariasi adalah jumlah +s dalam loop serta koreksi yang diperlukan setelahnya:

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
 ]

Ternyata, untuk penghitung awal 12 solusi buatan tangan saya sudah optimal. Namun, menggunakan 11 malah menghemat dua byte. Saya mencoba semua nilai penghitung dari 6 hingga 20 (inklusif) dengan hasil sebagai berikut:

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

Catatan: Pemecah ini mengasumsikan bahwa kode linier setelah loop semua pada baris atas, dan kode di atas adalah bahwa solusi dilipat. Mungkin ada solusi keseluruhan yang lebih pendek dengan membuat pemecah menyadari lipatan, karena sekarang saya mendapatkan 3 +s lebih banyak di bagian pertama secara gratis, dan 4 instruksi berikutnya akan biaya hanya 1 byte, bukan 2.


2
@justhalf Anda seharusnya melihat jawaban Pada saya. : P
Martin Ender

Martin Saya suka jawaban ini. Apakah Anda mempertimbangkan untuk membuat posting tentang ini di forum resmi kami ? Kami menggunakan yang sama dengan editor stackexchange. Editorial kami ingin menambahkannya ke Pilihan Staf .
Vitaliy Kaurov

61

Gelap , 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

Saya hanya akan membiarkan beberapa kutipan dari spesifikasi bahasa berbicara untuk kecemerlangan esolang ini:

Gelap adalah bahasa yang didasarkan pada memanipulasi seluruh dunia dan dimensi untuk mencapai tujuan dan untuk membangun realitas menyiksa sebaik mungkin.

Setiap kali kesalahan sintaksis terjadi, kewarasan program berkurang sebesar 1. [...] Jika kewarasan program mencapai nol, penerjemah menjadi gila.

Korupsi membalik sedikit dalam variabel ketika itu terjadi.

Ketika master mati, semua variabel pelayan yang melekat pada master itu juga mati. Ini berguna untuk pengelompokan dan variabel pembunuhan massal.

Memaksa variabel untuk bunuh diri, membebaskannya (ingat bahwa itu akan meninggalkan pembusukan).

Setel variabel ke nilai acak. Menggunakan Generator Kekacauan Global.

Jika penguntit tidak diinisialisasi, setiap upaya untuk melakukan IO akan menghasilkan pesan kesalahan yang tertekan untuk ditulis ke konsol.


37
Bahasa ini sangat metal.
Alex A.

6
Jika kita harus membuat daftar bahasa pemrograman dalam urutan kejahatan, Dark akan mengalahkan kejahatan.
LukStorms

35
ada neraka di hello
Khaled.K

super jahat, Anda bahkan dapat meningkatkan pasukan berjalan gotos
bobrobbob

60

Homespring , 58 byte

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

Ruang trailing adalah signifikan.

Biarkan saya menceritakan sebuah kisah. Pernah ada pembangkit listrik yang mendukung pembenihan salmon terdekat. Penetasan salmon menetas salmon tunawisma muda yang memulai perjalanan ke hulu untuk menemukan mata air. Itu memang menemukan mata air seperti itu, dengan nama puitis "Halo, Dunia!", Di mana ia matang dan menelurkan salmon muda baru. Kedua ikan itu sekarang berenang ke hilir, mencari lautan luas. Tetapi tidak jauh dari mulut sungai, ada jaring di sungai - ikan dewasa ditangkap dan hanya ikan muda yang berhasil lolos dan mencapai samudera dan seluruh alam semesta. Sementara itu, tempat penetasan telah menetas lebih banyak salmon yang telah melakukan perjalanan ke hulu dan juga melahirkan dan seterusnya dan seterusnya.

Namun, salju yang mencair dalam jumlah sangat besar telah merambat ke berbagai lengan sungai. Dan tepat setelah salmon muda pertama kami dari mata air "Halo, Dunia!" telah mencapai samudera, salju melanda alam semesta dan ... eh ... menghancurkannya. Dan mereka hidup bahagia selamanya ... atau kurasa tidak.

Itu sebenarnya adalah semantik dari program di atas. Homespring itu aneh.


15
Ini ... aneh ...
kirbyfan64sos

10
Saya juga menemukan perusak alam semesta bertenaga salmon favorit baru ... eh ... maksud saya "Halo, Dunia!" program. +1
ETHproduk

7
Setiap kali saya kembali ke sini, saya tertawa. Terima kasih telah membuat Hello, World yang mungkin paling menghibur! program sepanjang masa.
ETHproduk

2
Ini adalah bahasa favorit saya yang baru.
Mega Man


59

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

Diuji dengan penerjemah Ruby. Membuat sup alfabet.

Saya mencoba untuk menjadi sesuai dengan spesifikasi asli yang saya bisa, jadi meskipun penerjemah yang saya gunakan memungkinkan Anda memasukkan thes dalam Pour contentsinstruksi, saya belum melakukannya.

Mangkuk pengaduk cukup mahal, jadi mungkin ada pendekatan yang lebih baik. Saya mencoba menggunakan konversi basis untuk menyandikan pesan, tetapi sayangnya spec tidak menjelaskan apakah Dividemenggunakan pembagian integer atau floating point, dan penerjemah saya telah menggunakan yang terakhir. Juga tidak ada operator modulo, yang juga tidak membantu.


19
Kalau ada yang bisa golf di Chef itu Sp.
Alex A.

11
Sekarang coba resep golf dalam kehidupan nyata. : D
mbomb007

2
Lol, ini bukan hanya tidak enak untuk dimakan, tetapi juga menggunakan unit pengukuran yang tidak standar. XD
thierierarrowarrow

53

Piet, 84 kode

Piet Hello World

28x3, di sini ditunjukkan dengan lebar codel 10.

Dibuat dengan PietDev , diuji dengan npiet . Tata letak program adalah sebagai berikut:

Tata Letak Piet

Fill kuning menunjukkan codels di mana jalur tumpang tindih, fill oranye menunjukkan codel yang harus memiliki warna yang sama, untuk keperluan aliran kontrol.

Untuk membantu dalam pembuatan ini, saya menulis penerjemah dasar untuk bahasa berbasis stack dengan perintah seperti piet, yang saya juluki "pasm" ( sumber ). Output dari juru bahasa ini (dengan input ini ) adalah sebagai berikut:

    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 []

Tidak ada perintah pointer, switch, atau roll yang digunakan. Tidak ada kode yang terbuang; sebenarnya dua digunakan kembali.


Selamat, Anda mendapat hadiah saya :)
LegionMammal978

@ LegionMammal978 Terima kasih, itu menyenangkan untuk dikerjakan. Dan selamat natal :)
primo

7
Inilah yang seharusnya ditampilkan hollywood di layar "peretas".
Hubert Grzeskowiak

50

Spasi , 192 150 146 byte

Spasi hanya membutuhkan spasi, tab, dan umpan baris sementara karakter lain diabaikan.
Yang bisa merepotkan untuk ditampilkan di sini.
Jadi dalam kode di bawah ini spasi & tab diganti.
Dan sebuah ';' diletakkan di depan umpan garis untuk kejelasan.
Untuk menjalankan kode, ganti dulu. dan> berdasarkan spasi dan tab.

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

Hexdump kode

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

Kode perakitan spasi putih:

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

Catatan:

Saya harus menulis sebuah program hanya untuk menghitung bahwa menambahkan 107 memberikan golf optimal untuk kalimat. Karena bytesize yang diambil integer dalam kode perubahan. : 4 + int (abs (log2 ($ n)))
Kode masih akan berjalan tanpa label "e:" & keluar dari whitespace.kauaveel.ee . Tapi itu bisa membuat kode spasi tidak valid pada kompiler spasi putih lainnya. Jadi byte-byte itu tidak keluar dari solusi.

Harus Diperhatikan Bahwa

Seperti Kevin Cruijssen tunjukkan dalam komentar, dengan memungkinkan "keluar karena kesalahan" sesuai meta, Whitespace dapat golfcoded lebih dari 126 karakter.

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

Majelis:

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

Saya tahu ini sudah lama, dan saya melihat Anda menyebutkan itu berjalan tanpa label keluar pada kebanyakan kompiler, tetapi Anda dapat menurunkannya menjadi 129 byte dengan keluar dengan kesalahan menggunakan SSN(nilai kesalahan) alih-alih SSSN(tekan 0) ), yang diizinkan sesuai dengan meta . Cobalah online (dengan tambahan highlight dan penjelasan) , atau coba online mentah .
Kevin Cruijssen

@KevinCruijssen Saya akhirnya memeriksa versimu. Ini pada dasarnya versi lama dengan perakitan dup jumpz edan e: exitdihapus. Tapi setidaknya di whitespace.kauaveel.ee itu terus berulang sampai browser mengeluh. Saya lebih suka tidak mengubah versi saya menjadi itu, meskipun golf lebih rendah dan meta memungkinkan "keluar karena kesalahan". Tetapi Anda bebas mengirimkan versi Anda sebagai jawaban baru.
LukStorms

Nah, saya tidak akan memposting jawaban yang terpisah. Ini pada dasarnya sama dengan milik Anda, hanya sedikit lebih pendek karena keluar karena kesalahan. Saya juga baru sadar saya bisa menurunkannya ke 126 bukan 129 dengan menghapus SSNdi awal, dalam hal ini kesalahan dengan Tidak bisa melakukan Infix Plus ketika hanya memiliki satu item pada tumpukan (107). ( Coba online. ) Saya hanya akan meninggalkan komentar saya di sini ketika ada yang punya saran yang sama. Dan saya sudah memberi +1 pada jawaban Anda sekitar setahun yang lalu. ;)
Kevin Cruijssen

1
@KevinCruijssen Jika demikian, solusi Anda sekarang telah dicatat dalam jawabannya. Whitespace adalah salah satu bahasa yang paling tidak mungkin digunakan untuk bermain golf. Tetapi demi menghemat byte, temuan Anda layak disebutkan.
LukStorms

49

Jawa, 79

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

Versi Java yang lebih lama mungkin memungkinkan Anda untuk menggunakan blok statis (51 byte), tetapi saat ini saya tidak tahu cara untuk mem-bypass mainmetode ini.


7
Gunakan enumsebagai ganti class.
Thomas Eding

6
@ThomasEding Kompiler apa yang sebenarnya bekerja? Saya sudah mencoba tip ini pada beberapa, dan tidak pernah bisa menyimpan byte dengannya.
Geobits

4
@ Luminous Ah, itu mungkin berhasil 1,5. Saya tidak akan menginstalnya untuk mencari tahu, tapi tetap pada sesuatu yang dirilis dalam 10 tahun terakhir. Jika saya tidak pernah melihat Java 5 lagi, itu akan menjadi kehidupan yang menyenangkan :)
Geobits

2
@TheDoctor Dari apa yang saya lihat, Memproses biasanya dilihat sebagai bahasa yang terpisah di sini. Anda harus mempostingnya sebagai jawaban, atau setidaknya meminta klarifikasi dari OP.
Geobits

5
Pengguna OptiFine menyarankan untuk menyimpan 3 byte dengan menggunakan interfacedan membuang publicspecifier. Saya telah menolak kebijakan edit berikut tetapi karena mereka tidak dapat berkomentar, saya pikir saya akan memberi tahu Anda sehingga Anda dapat menggunakannya jika Anda mau.
Martin Ender

48

CSS, 30 byte

:after{content:"Hello, World!"

Cascading Style Sheets (CSS) bukan bahasa pemrograman yang umum, tetapi dapat melakukan output yang tetap dengan cukup baik. Ini dilakukan dengan membuat elemen pseudo setelah setiap elemen dengan konten Hello, World!. Jadi hanya satu elemen ( <html>) yang dipilih, ini mengasumsikan bahwa kami menggunakan dokumen HTML paling dasar, yaitu

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

Ini berfungsi di sebagian besar peramban utama, dengan pengecualian Firefox, yang menerapkan pemilih pada elemen <html>dan <body>. Ini juga mengapa potongan Stack tidak berfungsi, karena selalu ada elemen tubuh yang ditata juga. Di bawah ini adalah versi yang sedikit dimodifikasi untuk diuji.

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


3
Anda juga dapat menggunakan * *untuk memilih body.
jimmy23013

18
@ jimmy23013 Kedengarannya sangat tidak efisien. Terima kasih
NinjaBearMonkey

1
Untuk alasan apa pun * :afterjuga tampaknya berhasil.
jimmy23013

12
Saya bertanya pada diri sendiri mana dari surat-surat dalam CSS yang merupakan abrreviasi untuk "bahasa".
Zaibis

10
@zaibis surat yang sama untuk PHP mungkin :)
fcalderan

48

HTML, 13 byte

Hello, World!

Teks secara otomatis dimasukkan ke dalam <body>, dan ditampilkan.


159
Wow. Itulah beberapa keterampilan pengkodean yang sangat hardcore
BlueWizard

46
HTML bukan bahasa pemrograman, tetapi bahasa markup (itu sebabnya diakhiri dengan ML).
CoDEmanX

31
Tetapi HTML tidak dicetak dalam STDOUT.
Harshil Sharma

25
-1 HTML Tidak memenuhi persyaratan untuk bahasa yang valid
Downgoat

123
-1 tidak cukup jQuery
Valentin Lorentz

45

kode mesin x86_64 untuk Linux, 32 byte

Ketika Linux memulai proses baru, semua register (kecuali RSP) adalah nol, sehingga kita bisa mendapatkan RAX = 1 dengan hanya memodifikasi byte rendah. System V ABI x86-64 tidak menjamin ini, tapi itulah yang sebenarnya dilakukan Linux. Kode ini hanya berfungsi seperti _startpada eksekusi statis.

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

Instruksi panggilan mendorong alamat berikutnya, yang berisi string hello world, ke stack. Kami memasukkan alamat string ke rsi.

Kemudian argumen lain ditetapkan untuk syscalluntuk sys_write, yang mencetak string.

Program berakhir dengan syscallke sys_exit. sys_writemengembalikan jumlah byte yang ditulis, sehingga byte atas RAX adalah nol setelah yang pertama syscall(kecuali itu mengembalikan kesalahan), jadi mov al, 60beri kami RAX = __NR_exithanya dalam 2 byte.

Anda dapat membuat program ini segfault dengan menutup stdout-nya ( ./a.out >&-), jadi sys_write()akan kembali -EBADF, yang kedua syscallakan kembali -ENOSYS, dan kemudian eksekusi akan jatuh pada akhirnya. Tetapi kita tidak perlu menangani write()kesalahan dengan anggun.


Khususnya ini hanya berfungsi di Linux , di mana __NR_write1. Ini bukan standar di berbagai sistem Unix x86-64. Anda juga bergantung pada perilaku Linux mem-nolkan semua register kecuali RSP sebelum masuk ke proses baru (jadi ini hanya berfungsi jika Anda membuatnya sebagai executable statis, jika tidak, penghubung dinamis akan meninggalkan sampah di byte atas raxdan Anda ' akan mendapatkan -ENOSYS). Sistem V86 ABI x86-64 mengatakan register dapat menyimpan nilai-nilai sampah sembarang pada saat masuk _start, kernel Linux sendiri memilih nol untuk menghindari kebocoran info.
Peter Cordes

Anda dapat menyimpan byte dengan mov al, 1/ mov edi, eax(2 byte), alih-alih membutuhkan awalan REX untuk DIL, karena__NR_write == STDOUT_FILENO = 1
Peter Cordes

Ini hanya berfungsi di executable statis Linux, sehingga alamat string Anda dijamin berada di ruang alamat virtual 2G yang rendah (model memori default untuk executable non-PIE menempatkan semua simbol di mana mereka dapat digunakan sebagai nol atau sign- diperpanjang 32-bit segera). Dengan demikian Anda dapat menggunakan 5-byte mov esi, msg(NASM) alias mov esi, OFFSET msg(GAS .intel_syntax) . Masukkan string Anda setelah yang terakhir syscall. call/popadalah 1 byte lebih pendek dari 64-bit LEA RIP-relatif, tetapi mov adalah yang terbaik.
Peter Cordes

Sumber NASM untuk versi 30 byte (ukuran dicek pada desktop saya), tio.run/##TY8/…
Peter Cordes

42

Hexagony , 37 32 byte

Perhatikan: Saya akan memberikan hadiah 500 rep kepada orang pertama yang menemukan solusi yang valid dalam segi enam sisi-panjang 3 atau solusi sisi-panjang yang terbukti optimal. Jika Anda tidak dapat menemukan solusi seperti itu tetapi berhasil mengalahkan skor saya dalam segi enam sisi-panjang (dengan mendapatkan lebih banyak no-ops di akhir program, yang dapat dihilangkan dari kode sumber), saya bersedia memberikan hadiah yang lebih kecil untuk itu juga .

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

Cobalah online!

Saya dengan bangga mempersembahkan bahasa pemrograman 2D kedua saya, dan (setahu saya) bahasa 2D pertama di grid heksagonal.

Kode sumber tidak terlihat sangat 2D, bukan? Nah, spasi putih adalah opsional dalam Hexagony. Pertama, kode sumber diisi ke nomor heksagonal terpusat berikutnya tanpa no-ops ( .). Angka seperti itu berikutnya adalah 37, jadi kami menyisipkan lima no-op di akhir. Kemudian kode sumber disusun ulang menjadi segi enam biasa:

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

Ini juga runnable. Cobalah online!

Hexagony memiliki banyak fitur yang cukup funky, termasuk 6 petunjuk instruksi yang berbeda dan tata letak memori yang merupakan grafik garis dari kisi heksagonal, tetapi kode ini hanya menggunakan satu IP dan satu tepi memori, jadi jangan khawatir tentang itu untuk saat ini.

Berikut ini adalah ikhtisar atas perintah yang relevan:

  • Surat hanya mengatur tepi memori saat ini ke nilai ASCII mereka
  • ; mencetak nilai saat ini, modulo 256, sebagai byte ke STDOUT.
  • / adalah mirror yang berperilaku seperti yang Anda harapkan (menyebabkan IP berubah 120 derajat).
  • Digit berfungsi seperti pada Labyrinth : mereka mengalikan sel saat ini dengan 10 dan kemudian menambahkan diri.
  • @ mengakhiri program.

Sekarang tangkapan terakhir adalah bahwa sumber membungkus ketiga pasang tepi. Lebih jauh, jika IP meninggalkan grid melalui salah satu dari enam sudut, ada dua baris yang memungkinkan untuk dilompati. Yang mana yang dipilih tergantung pada apakah nilai saat ini positif atau tidak positif. Versi beranotasi berikut menunjukkan di mana IP masuk kembali setiap kali meninggalkan kisi:

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

Jadi jika kita menghapus semua perubahan arah, program ini bermuara pada kode linear berikut:

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

Ada apa dengan Q2, P0dan P1? Huruf dicetak dengan mudah karena kami hanya dapat mengatur tepi ke nilai yang sesuai. Untuk koma, spasi, dan tanda seru, itu tidak berhasil. Kami juga tidak bisa hanya mengatur nilai mereka dengan 44, 32, 33, masing-masing, karena tepi memori non-nol untuk memulai dengan, dan karena semantik individu digit yang akan melampiaskan segala macam malapetaka. Jika kita ingin melakukan itu, kita harus me-reset nilai tepi ke nol dengan sesuatu seperti *, +, -, &atau ^pertama. Namun, karena nilai tersebut diambil modulo 256 sebelum dicetak, kami tidak harus menetapkan nilai tepat ke 44, 32, atau 33. Misalnya, Q2akan menetapkan nilai tepi 81*10 + 2 = 812, yaitu44ketika diambil modulo 256. Dengan cara ini kita dapat menyimpan byte pada masing-masing dari tiga karakter tersebut. (Sayangnya, itu tidak pernah mungkin untuk mendapatkan di sana dengan satu digit dari nilai sel telah memiliki. Menggelikan, di mana ia tidak bekerja adalah odi World, karena itu juga dapat diperoleh dari W9.)

Anda dapat menggunakan skrip CJam ini untuk menemukan semua kombinasi huruf-angka yang menghasilkan karakter yang diberikan.

Saya tidak yakin apakah ini optimal. Saya ragu itu mungkin untuk melakukannya dalam segi enam sisi-panjang 3 (di mana Anda hanya akan memiliki 19 karakter), tetapi mungkin untuk menyelesaikannya dalam segi enam dengan panjang sisi 4 dengan kurang dari 32 perintah, seperti bahwa ada lebih banyak no-ops di ujung grid.


1
Sial, kau mengalahkanku untuk itu. Saya sendiri sedang mengerjakan bahasa heksagonal yang mirip dengan Cardinal.
ML

Bagaimana Anda menemukan solusi ini? Dengan tangan atau kekerasan? Pokoknya, +1 :)
Adnan

1
Itu Q2, P0dan P1sangat pintar. Saya tidak tahu bagian modulo 256.
Adnan

1
@ Adnan Orang yang menyarankan mod-256 bagian pada GitHub sebenarnya melakukannya bersama dengan contoh bahwa linefeeds kemudian dapat dicetak sebagai M8;(atau g4;), yang telah saya gunakan beberapa kali sejak itu. Tidak pernah terpikir oleh saya sampai sekarang untuk meninjau kembali jawaban ini setelah saya membuat perubahan itu.
Martin Ender

2
Catatan: Ini dikurangi menjadi 31 beberapa waktu lalu. 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

Saya akan melihat apakah ada yang lebih pendek. Punya komputer yang lebih baik sejak terakhir kali, jadi saya bisa menghasilkan sedikit lebih cepat.

Untuk pertunjukkan, inilah "Hello World!" tanpa koma.

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

Bagaimana dengan yang ini? ('<;_#"~6Z|{y1UTvt,PrpMo,llj"Fgge{A??P=^t:8&7YtFVqjSQ@PNM)u(I8%$#"D2AA/[TYXQu88MLp3n1Gk.D-ge(92 byte)
dingledooper

37

Fourier , 15 byte

PERUBAHAN BESAR untuk Fourier!

`Hello, World!`

Cobalah di FourIDE!

Ya, hari-hari mengetik kode ASCII dari setiap karakter hilang selamanya: Fourier sekarang jenis string pendukung. Ketika Anda melampirkan string di backticks, string itu akan dikeluarkan.

Perhatikan bahwa Anda tidak dapat melakukan apa pun selain menghasilkan string itu: Anda tidak dapat menyimpannya dalam suatu variabel, itu tidak disimpan dalam akumulator dan tidak ada alat manipulasi string.


Di sini, Anda dapat menemukan kecelakaan kereta api yang sudah lama Fourier. ;)

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

Cobalah online!

Sekarang, beberapa dari Anda mungkin sudah pernah bertemu Fourier sebelumnya dan mungkin cukup akrab dengan bahasa tersebut. Seluruh bahasa didasarkan pada akumulator: variabel global yang hampir semua operator gunakan.

Bagian terpenting dari kode adalah aoperator. Ini mengambil nilai numerik akumulator dan mengubahnya menjadi karakter menggunakan kode Python chr(accumulator). Ini kemudian dicetak ke STDOUT.

Sayangnya, saya belum memiliki kesempatan untuk menggunakan Fourier ( menyenggol menyenggol , mengedipkan mata ), terutama karena kurangnya operator string dan string. Meski begitu, masih dapat digunakan untuk banyak tantangan lain (lihat bagian contoh halaman EsoLangsnya).

Perhatikan bahwa ini lebih pendek daripada entri saya ke daftar Esolangs karena saya tidak benar-benar berpikir bahwa saya bisa bermain golf lagi. Dan kemudian, ketika menulis tantangan golf string Fourier, saya menyadari bahwa saya bisa sedikit lebih pendek.

Catatan

Jika Anda bertanya-tanya tentang sintaks variabel, Geobits menulis sebuah program yang menggunakan variabel dan panjangnya sama:

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

Cobalah online!


Apa yang bisa digunakan? Apakah itu seperti yang dapat digunakan?
CalculatorFeline

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

Sayangnya, satu-satunya kompiler C-- yang dikenal, Quick C-- tidak lagi dipertahankan. Ini adalah rasa sakit di leher untuk membangun, tetapi adalah mungkin ...


8
Bahasa yang benar-benar menarik - saya belum pernah mendengarnya sebelumnya, dan tentu saja ini adalah proyek ambisius yang mereka lakukan. Tetapi dalam hal kode golf, saya tidak berpikir itu akan menjadi pesaing. Maksudku ... sial, benda ini kalah dari Jawa ...
AdmBorkBork

11
@TimmyD Ini benar-benar assembler. Ada alasan mengapa ia kalah dari Java ... :)
kirbyfan64sos

Saya punya kabar baik untuk Anda. Sementara proyek C-- itu sendiri tampaknya sudah mati, satu varian cukup hidup. Glasgow Haskell Compiler (GHC) menggunakan C-- sebagai tahap terakhir sebelum perakitan atau LLVM, dan versi itu masih dipelihara secara aktif. Seharusnya tidak ada masalah apa pun untuk menginstalnya (bersama dengan GHC lainnya).
dfeuer

@dfeuer Memang saya mencoba menggunakan backend Cmm mereka langsung sebelumnya, tapi aku punya beberapa masalah aneh dan tidak pernah benar-benar melihat ke dalamnya lebih jauh ¯ \\ _ (ツ) _ / ¯
kirbyfan64sos

Anda mungkin bisa mendapatkan bantuan di milis Haskell. Coba glasgow-haskell-users@haskell.org, atau mungkin haskell-cafe@haskell.org.
dfeuer

33

C, 30 Bytes

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

Cukup vanilla, tapi saya tidak bisa memikirkan cara yang biasanya dapat dikompilasi untuk melakukannya lebih pendek (kecuali mungkin semacam trik asm mentah mungkin bekerja?). Tetap saja, mengalahkan sebagian besar esolang!


3
Ini tidak layak untuk jawaban yang terpisah, tetapi jawaban sepenuhnya sesuai ISO C89 dan C99 adalah 39 main(){puts("Hello, World!");return 0;}dan 53 #include <stdio.h> int main(){puts("Hello, World!");}byte. Sedikit lebih banyak jika Anda pikir main (void) diperlukan.
Random832

20
@ Random832: untuk yang pertama, main(){return!puts("Hello, World!");}dua byte lebih pendek.
Lynn

15
Program hini lebih pendek 29 byte. Catatan: Anda harus mengompilasinya dengan -Dh='main(){puts("Hello, World!");}'saya setengah troll, setengah menghibur diri saya dengan penyalahgunaan kompiler.
matega

19
@matega Itu jelas curang. Agar tidak curang, Anda harus membuat file hanya berisi __FILE__(8 byte) dan beri nama file tersebut main(){puts("Hello, World!");}. Maka itu sama sekali tidak curang;)
C0deH4cker

Sebenarnya, pada 2017 aturan itu masing-masing 34 dan 38 byte.
CalculatorFeline

32

Tidak dapat dibaca , 843 755 732 666 645 629 577 byte

'"'" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " '"'" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " ""'" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "'" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""'" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "'" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " '"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "'" "" "" "" "" "" "" "" "" "" "" "" """" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "

Program yang tidak dapat dibaca seharusnya ditampilkan dengan font dengan lebar variabel, sehingga mereka menghormati nama bahasa tersebut. Saya sedikit kecewa karena pendekatan saya yang lebih canggih ternyata jauh lebih lama. Loop sangat mahal di Unreadable ...

Cobalah online!

Bagaimana itu bekerja

Tidak dapat dibaca hanya memiliki sepuluh fungsi; enam di antaranya digunakan dalam kode ini:

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

Setelah menggunakan notasi satu karakter dan menambahkan spasi dan komentar, kode di atas terlihat seperti berikut. Pernyataan multi-baris dieksekusi dari bawah ke atas.

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 (!).

Saya telah membuat kode sumber yang sebenarnya dengan menjalankan versi pseudocode yang tidak diomentari melalui program CJam ini .


3
Apa yang kau bicarakan? Cukup mudah dibaca!
Pengoptimal

19
@Optimizer Tetap.
Dennis

4
Masih bisa dibaca! (tentu saja saya mengatakan yang sebenarnya. Mengapa Anda tidak percaya?)
Pengoptimal

5
Terasa seperti bahasa ini akan mendapat manfaat dari huffman coding yang lebih baik - baik dari segi ukuran, dan tidak terbaca.
primo

30

Befunge 98 , 19 18 Bytes

Jawaban baru (dari undergroundmonorail)

"ck,@!dlroW ,olleH

Penjelasan

  • " memulai mode string
  • Segala sesuatu yang mengikuti didorong ke tumpukan. Tumpukan sekarangHello, World!@,kc
  • Setelah mencapai akhir, juru bahasa kembali ke awal
  • Itu bertemu "lagi, mengakhiri mode string
  • 12 didorong ke tumpukan ( c)
  • k mengambil nilai teratas dari stack dan menjalankan perintah berikutnya, penunjuk instruksi dapat melihatnya berkali-kali
  • ,muncul nilai dari stack dan mengeluarkannya sebagai char. Ini telah dieksekusi 12 kali oleh kinstruksi terakhir , dan satu kali lebih ketika penerjemah benar-benar membaca ,instruksi
  • @ mengakhiri program

Perbedaannya dengan jawaban lama adalah bahwa kita secara cerdik menggunakan kembali "karakter dengan menggunakan perilaku pengulangan Befunge ketika menyentuh akhir baris. Karena mungkin kurang intuitif, saya membiarkan yang lama juga. Juga, Anda mungkin telah memperhatikan bahwa tumpukan masih akan berisi beberapa karakter ( ck,@) karena trik yang bagus ini, meninggalkan beberapa kekacauan jika kita ingin melakukan sesuatu setelah itu.

Jawaban Lama

"!dlroW ,olleH"ck,@

Ini berfungsi untuk funge dan befunge 98

Penjelasan

  • Semuanya antara ""didorong ke tumpukan. ( 'H'sekarang di atas.)
  • c (12) didorong ke tumpukan
  • k mengambil nilai teratas dari stack dan menjalankan perintah berikutnya, penunjuk instruksi dapat melihatnya berkali-kali.
  • ,muncul nilai dari stack dan mengeluarkannya sebagai char. Ini telah dieksekusi 12 kali oleh kinstruksi terakhir , dan satu kali lebih ketika penerjemah benar-benar membaca ,instruksi
  • @ mengakhiri program

2
Saya tidak berpikir 93 memilikik
Sp3000

1
Nah, sekarang bahwa itu 98 hanya Anda dapat menggunakan cuntuk 93+.
PurkkaKoodari

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

1
Itu hits "untuk memulai string, menambahkan seluruh sisa baris ke string itu, membungkus dan hits yang sama "untuk mengakhiri string. Sekarang seluruh program kecuali yang "telah didorong ke stack, dengan !dlroW ,olleHdi atasnya. Kemudian ia mencetak 12 karakter teratas dengan cara yang sama seperti yang Anda lakukan dan berhenti @.
undergroundmonorail

1
Untuk solusi 18 byte, juru bahasa saya menghasilkan `Hello, World` (ruang terdepan, tidak ada seru). The Anarchy Golf interpreter (bentuk penggunaan, pilih Befunge-98, kode paste, menyerahkan) melakukan hal yang sama.
primo

29

JSFuck , 6293 6289 6277 byte

Ini mungkin disebut sebagai salah satu dari "program Hello, World! Terpendek" terpanjang (sebenarnya saya tidak tahu apakah ini optimal, tapi ini yang terpendek yang berhasil saya dapatkan).

Peringatan: hanya berfungsi di Firefox dan Safari

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

Ada juga versi yang sedikit lebih panjang (+4 byte) yang juga berfungsi di Chrome dan Microsoft Edge:

Bagi mereka yang tidak terbiasa dengan JSFuck, ini tentang menulis JavaScript seolah-olah hanya ada enam karakter, dan itu bisa sangat gila di kali.

Tabel ini menunjukkan bagaimana karakter yang digunakan dalam Hello, World! Program dikodekan dalam JSFuck. Kode teks biasa saja 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                 |
+----------+--------------------------------------+---------------------------+

Di sini string "fill",, "fontcolor"dll. Harus ditulis sebagai "f"+"i"+"l"+"l", "f"+"o"+"n"+"t"+"c"+"o"+"l"+"o"+"r"untuk dikodekan.

Pengidentifikasi global self, atobdan btoadituliskan seperti Function("return self")().

Functionitu sendiri seharusnya []["fill"]["constructor"].

Koma ","rumit, saya tidak 100% yakin cara kerjanya tetapi menggunakan []["concat"]fungsi untuk membuat array. Saya akan memposting pembaruan ketika saya punya waktu untuk melakukan lebih banyak tes.


Saya menyandikan ini menggunakan JScrewIt - kredit ke GOTO 0 untuk membuat alat canggih:

  • Buka Firefox (Anda dapat memilih browser lain mana saja, tetapi hanya kode Firefox yang paling pendek.)
  • Arahkan ke JScrewIt : http://jscrew.it
  • Memasukkan: alert("Hello, World!")
  • Kode yang dapat dieksekusi: dicentang
  • Kompatibilitas: Hanya peramban ini

Ini berbeda dari jawaban saya untuk pertanyaan ini untuk keberadaan koma setelah "Halo".

Menariknya, sintaks ES6

alert`Hello, World!`

membutuhkan lebih banyak byte untuk dikodekan (+1500 atau lebih) karena kompleksitas yang lebih tinggi dari pengkodean dua backticks daripada ("dan ").


Yah itu bekerja di Chrome di Android
Beta Decay

Bekerja di Chrome pada OS X juga
C0deH4cker

1
Anda melakukan pekerjaan besar di sini! Pastikan untuk memeriksa pembaruan terakhir.
GOTO 0

4
@ GOTO0 Tunggu ... Anda adalah penulis JScrewIt, bukan?
aku dan kucingku

1
Bagaimana Anda memanggil fungsi dengan ini?

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

Saya percaya ini optimal untuk program linear (yaitu yang tidak menggunakan operator aliran kontrol ?dan *). Mungkin secara keseluruhan optimal, tetapi saya tidak tahu bagaimana memanfaatkan operator tambahan dalam jumlah kode yang kecil (atau bagaimana menjelajahi kemungkinan secara terprogram).

Bahasa baru-baru ini mengalami beberapa perubahan setelah saya mulai mendiskusikannya dengan penulis melalui email. Namun, saya telah menulis implementasi referensi untuk keadaan saat ini dari spesifikasi bahasa minggu lalu, jadi kode di atas sebenarnya bisa dijalankan.

Metagolf

Awalnya, saya telah menggunakan output dari implementasi referensi saya untuk tantangan ini dan menciptakan solusi kerajinan tangan berdasarkan itu. Namun, itu hanya pendekatan heuristik.

Jadi alih-alih saya menulis solver di Mathematica yang sebenarnya tahu tentang struktur data Pada dan operator untuk menemukan solusi yang optimal. Rata-rata, ia tumbuh secara linier dengan panjang senar (walaupun beberapa kombinasi karakter sedikit lebih lambat dari yang lain) dan membutuhkan waktu sekitar 1,5 jam Hello, World!.

Jadi bagaimana saya bisa menulis solver. Pertama, kami perhatikan bahwa kami hanya perlu mempertimbangkan 6 operator: ~.oOqQ(ditambah yang diperlukan wuntuk masing-masing karakter yang dicetak). Menggunakan tumpukan atau kunci bit tidak berguna dalam kode linier, dan saya tidak percaya itu ?dan *dapat digunakan secara efektif dalam waktu kurang dari 68 byte.

Kondisi Pada (mengabaikan tumpukan dan kunci) terdiri dari 7 sakelar dan 8 bit, disusun seperti ini:

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

Jadi itu mungkin. Langkah preprocessing pertama saya adalah mengatur grafik diarahkan negara di mana masing-masing tepi sesuai dengan satu operasi. Yaitu, grafik memiliki 32768 simpul, masing-masing dengan derajat 6 (satu sisi keluar untuk masing-masing dari 6 operasi yang dipertimbangkan). Kita dapat menggunakan grafik ini untuk menemukan jalur terpendek antara dua keadaan (grafik ini saja bisa sangat berguna untuk bermain golf pada).215 = 32768

Sekarang untuk setiap karakter, kami ingin mencapai keadaan di mana wmencetak karakter itu. Ada berapa negara seperti itu? wmembaca byte dari bit yang dijatuhkannya (secara siklis). Jadi ada 8 kemungkinan rotasi bit karakter yang semuanya dapat mencetak karakter itu. Untuk masing-masing rotasi itu, tiga sakelar telah diperbaiki (untuk wmenjatuhkan posisi yang benar). Ini menyisakan 4 sakelar yang berubah-ubah. Jadi kami punya kemungkinan status untuk masing-masing dalam kode kami.8 * 24 = 128w

Dengan itu kita dapat memecahkan masalah grafik lain: membangun grafik yang memiliki simpul sumber, lalu satu "lapisan" untuk setiap karakter, dan simpul wastafel. Lapisan terdiri dari 128 negara untuk setiap titik, simpul sumber sesuai dengan keadaan awal program (semua switch ke kiri dan semua bit adalah nol). Node wastafel berhubungan dengan tidak ada negara pada khususnya. Kami mendapatkan tepian terarah dari setiap simpul dalam satu lapisan ke setiap simpul di lapisan berikutnya, di mana bobot tepi adalah jarak antara dua keadaan dalam grafik kami sebelumnya. Bobot tepi dari lapisan terakhir ke wastafel semuanya 0. Artinya, kita bisa melakukan prakiraan semua bobot tepi itu. Ini adalah langkah perhitungan yang paling mahal dan membutuhkan waktu 1,5 jam Hello, World!.

Dengan pengaturan grafik ini, kita dapat menemukan jalur terpendek dari sumber ke wastafel cukup cepat (butuh 0,05 detik pada mesin saya). Untuk Hello, World!keadaan yang diinginkan adalah:

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

di mana 7 bit paling signifikan sesuai dengan switch dan 8 bit paling signifikan untuk bit Pada.

Sekarang kita kembali ke grafik pertama dan menemukan tepi yang sebenarnya (yaitu operasi) yang sesuai dengan jalur terpendek antara setiap pasangan negara berikutnya, dan akhiri masing-masing dengan a w. Voila, solusi optimal (berdasarkan asumsi di atas).

Ini adalah Mathematica lengkap jika ada yang ingin metagolf menggunakan string berbeda pada 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]) <> ""

Bahasa yang menarik untuk dilakukan metagolf pada =). Ini membuat saya bertanya-tanya, apa pekerjaan harian Anda? oO
justhalf

4
@ justhalf Saya saat ini dalam limbo antara gelar master dan studi PhD (jadi saya pasti punya terlalu banyak waktu di tangan saya jika itu implikasi Anda;)). (Ini umumnya lebih merupakan diskusi untuk mengobrol :))
Martin Ender

Pada berarti ketika dalam bahasa Indonesia / Melayu. Apakah itu relevan?
XiKuuKy

@XiKuuKy afaik, bahasa ini disebut Pada, karena itu berarti "jatuh" dalam bahasa Kroasia.
Martin Ender

Dan jawaban ini untuk (lihat di sini ). Anda mungkin dapat menggabungkan 2 jawaban dalam satu untuk menggambarkan masalah Hello World yang indah ini secara umum.
Vitaliy Kaurov
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.