"Selam Dünya!"


419

Yani ... ah ... bu biraz utanç verici. Ama bizde "Merhaba Dünya!" Diye bir şey yok Zorlu bir yarış ( ile etiketlenmiş 35 değişken olmasına ve saymaya rağmen ). Bu, ortak dillerde en ilginç kod golf olmasa da, bazı terimlerle en kısa çözümü bulmak ciddi bir zorluk olabilir. Örneğin, bildiğim kadarıyla, mümkün olan en kısa Brainfuck çözümünün bulunup bulunmadığı bilinmiyor.

Ayrıca, Wikipedia'nın tümü (Wikipedia girişi silindi ancak archive.org'da bir kopya var ), esolangs ve Rosetta Code'da "Merhaba, Dünya!" Bunların hiçbiri, her dil için en kısa olanla ilgilenmiyor (ayrıca bu GitHub deposu da var ). Golf topluluğunda önemli bir site olmak istiyorsak, bence en kısa "Merhaba, Dünya!" Kataloğunu oluşturmalıyız. programlar ( temel quine mücadelemizin çeşitli dillerde bilinen en kısa quinalardan bazılarını içerme şekline benzer). Öyleyse bunu yapalım!

Kurallar

  • Her başvuru tam bir program olmalıdır.
  • Program giriş Hello, World!yapmamalı ve STDOUT (büyük harf ve noktalama işareti dahil bu tam bayt akışı) artı isteğe bağlı izleyen bir yeni satır ve başka hiçbir şey yazdırmamalıdır .
  • Program STDERR'ye hiçbir şey yazmamalıdır.
  • Eğer biri boş programın Hello, World!basıldığı bir dil oluşturarak bunu kötüye kullanmak isterse , tebrikler, çok sıkıcı bir cevabın yolunu açtı.

    Göndermenin test edilebilmesi için bir tercüman olması gerektiğini unutmayın. Daha önce uygulanmamış bir dil için bu tercümanı kendiniz yazmanıza izin verilir (ve hatta teşvik edilir).

  • Gönderimler, bayt cinsinden , uygun (önceden var olan) kodlamada, genellikle (ancak zorunlu değil) UTF-8 ile puanlanır . Bazı diller gibi klasörler , puanına biraz zor olan - Şüphe halinde, üzerinde isteyiniz Meta .
  • Bu bulgu ilgili değil kısa olan dil "Merhaba, Dünya!" programı. Bu en kısa "Merhaba, Dünya!" Her dilde program. Dolayısıyla hiçbir cevabı "kabul edildi" olarak işaretlemeyeceğim.
  • Seçtiğiniz dil, zaten bir cevabı olan (belki de BASIC veya SQL lehçelerini düşünün, Unix kabukları veya Alphuck gibi önemsiz Brainfuck türevlerini düşünün), başka bir (potansiyel olarak daha popüler) dilin önemsiz bir değişkeni ise, mevcut cevaba bir not eklemeyi düşünün. aynı veya çok benzer bir çözüm de diğer dilde en kısa olanıdır.

Bir yandan not olarak, lütfen golf oynamak için fazla bir şey olmayan dillerde sıkıcı (ama geçerli) cevapları düşürmeyin - bunlar mümkün olduğunca eksiksiz bir katalog hazırlamaya çalıştıkları için bu soru için faydalıdırlar. Ancak, do yazarlar aslında kod golf içine çaba koymak zorunda dilde öncelikle upvote cevaplar.

İlham almak için Hello World Koleksiyonunu inceleyin .

Katalog

Bu yazının altındaki Yığın Parçacığı, cevapları a) dil başına en kısa çözümün bir listesi olarak ve b) genel bir lider tablosu olarak oluşturur.

Cevabınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak cevabınızı bir başlık ile başlatın:

## Language Name, N bytes

Gönderinizin Nbüyüklüğü nerede ? Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğundan veya tercüman bayrağı cezalarını ayrı ayrı listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

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

Dil adını, daha sonra pasajda görünecek bir bağlantı da yapabilirsiniz:

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


2
@ isaacg Hayır değil. İlkellik testinin mümkün olup olmadığı açık olmayan bazı ilginç diller olacağını düşünüyorum.
Martin Ender

6
Aynı program "Hello, World!"birçok farklı ve ilgisiz dilde en kısa ise, ayrı olarak mı yayınlanmalı?
aditsu,

2
@ mbomb007 Üç kod bloğu çok fazla yer kapladığından dolayı varsayılan olarak gizlidir. Bunları küçültebilirim, böylece her biri tek bir satır olacaktı, ancak hataların ortaya çıkması durumunda kodun bakımını yapmayı tercih ederim.
Martin Ender

7
@ETHproductions "Her zamanki kurallarımızdan farklı olarak, bu zorluktan daha yeni olsa bile, bir dili (veya dil sürümünü) kullanmaktan çekinmeyin." Dili ve bir uygulamayı göndermeden önce yayınlamak kesinlikle faydalı olacaktır.
Martin Ender

2
@MartinEnder ... Neredeyse. İki BF çözümü aynı boyuta sahipse, daha küçük sözlük bilgisi sırasına sahip olan, Unary'de daha az sayıda bayt alacaktır. Elbette BF'ye çevrilmiş en küçük Unary çözümünün en küçük olduğu garanti edilir.
user202729

Yanıtlar:


442

Sıkışmış, 0 bayt

Eh, bu daha kısa alamayan ... Boş bir program çıktısı Hello, World!içinde Stuck .


57
Kahretsin, 20 dakika geciktim! : P
Kade

33
Noooo, batıdaki en hızlı silahı kullandı;)
Beta Çürüğü

30
@Zuck Evet, Stuck, CJam / GolfScript / Pyth gibi, kod golf oynamak için yapıldı. Hello, World!Şey gelişiminde erken bir yer tutucu olarak koymuştu bir şeydi. O kadar uzun süre bırakmak istemedim, ama çıkarmak için asla bulamadım.
Kade

132
Daha kısa bir çözüm bulmaya çalıştım, ama sıkıştım.
Cyoce

51
JQuery'de -1 bayt. JQuery denediniz mi?
10 Cevap

244

PHP, 13 bayt

Hello, World!

Evet. İşe yarıyor.


261
PHP'de her zamanki gibi, her zaman nasıl çalışabileceğini merak edersiniz
Fatalize,

95
Elbette çalışıyor, çünkü <?phpkodda yok, PHP tarafından hiç yorumlanmamasına neden oluyor :)
Lynn

58
Bu sadece bir HTML cevabı olduğu anlamına geliyor ...
Nelson

82
@ Nelson hayır, öyle değil. PHP'nin mutlaka HTML'ye yerleştirilmesi gerekmez. Ve ayrıca, HTML stdout'a yazdırmıyor
georgeunix

26
Bu şimdiye kadarki en komik cevap
Oliver Ni

241

Brainfuck, 78 bayt

Açık uçlu ödül: Eğer herhangi biri bu puanı iyileştirirse, onlara ödül (+500) geçer. @KSabbir bulmuştur 76 72 bayt çözüm!

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

Çevrimiçi deneyin!

İlk 28 bayt --<-<<+[+[<+>--->->->-<<<]>], aşağıdaki yineleme ilişkisiyle bandı başlattı (mod 256):

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

171 faktörü, 3 -1 ≡ 171 (mod 256) nedeniyle ortaya çıkar . Geçerli değer çevrildiğinde, bir hücre geri (yoluyla <+>---) her seferinde 3 çıkarılarak, değer 171 ile çarpılır.

En n = 220 Çevrilecek olan değer sıfırdır ve yineleme durur. Durma noktasından önceki on bayt aşağıdaki gibidir:

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

Bu, Hello, World!küçük düzeltmelerle, avlamak ve gagalamak için üretmek için gerekli tüm bileşenleri içerir .

Alternatif bir 78 baytlık çözüm de buldum:

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

Çevrimiçi deneyin!

Bunun birkaç nedenden dolayı ilkinden daha iyi olduğunu düşünüyorum: evden daha az hücre kullanıyor, toplamda daha az hücreyi değiştiriyor ve daha hızlı sonlanıyor.


Daha fazla detay

Nüks ilişkilerinin şaşırtıcı bir şekilde Brainfuck'ta kısaca temsilleri vardır. Genel düzen aşağıdaki gibidir:

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

hangi temsil eder:

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

ile

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

Ek olarak, <+>aralık, durma noktasını etkilemeden bir sabit ile çarpmak >{k}için değiştirilebilir ve aralık durma noktasını etkilemeden tekrar aralık değiştirmeden önce bir terim eklenebilir .


Diğer örnekler

Fibonacci Dizisi

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

N-gonal sayıları

Üçgen Sayılar

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

Olarak tanımlanır f , n = 2 • f , n-1 - f , n-2 + 1 ile f 0 = 0 , f , 1 = 1 .

Kare sayılar

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

Beşgen Sayılar

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

vb.


BF Crunch

Bu çözümlerden bazılarını bulmak için kullandığım kodu github'da yayınladım . .NET 4.0 veya üstü sürüm gerektirir.

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.

Çıktı üç satırda verilir:

  1. Bulunan programın toplam uzunluğu ve başlangıç ​​bölümü.
  2. Geçerli bant işaretçisiyle başlayan yol alındı. Her düğüm (pointer, maliyet) olarak gösterilen bir çıktı karakterine karşılık gelir.
  3. Kullanılan bant parçası.

Örneğin, nihai sonuç bfcrunch "hello world" 70 -r -i23şudur:

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

Bu tam programa karşılık gelir:

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

Diğer Kayıtlar

Selam Dünya!

Sarma, 78 bayt :

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

veya

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

Kaymaz , 87 bayt (daha önce 92 bayt (cm) ):

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

Selam Dünya!

Sarma, 80 bayt :

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

Kaymaz , 81 bayt (daha önce 92 bayt (hirose) ):

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

Selam Dünya!

Sarma, 74 bayt :

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

Kaymaz, 84 bayt :

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

Esolangs Sürümü

Merhaba Dünya! \ N

Sarma, 76 bayt :

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

Bu, evden kalan bir hücre kullanır ve bu nedenle 77 sayılır.

Kaymaz, 83 bayt :

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

Rdebath onayladı . profilebf çıktısı:

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)

Selam Dünya!

Sarma, 70 bayt (daha önce 78 1 ):

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

Kaymaz, 77 bayt (daha önce 89?):

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

Yazar, en kısa el kodlu "Merhaba Dünya!" 89 bayttır, ancak başvuru sağlamaz. Ben de bunun için rekor iddia ediyorum.

Selam Dünya!

Sarma, 65 bayt (önceden 66 bayt):

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

Bu aslında el kodludur (çırparak bulabildiğim en iyi 68 bayttır ). İlk hücre 259 (3) 'a getirildi ve her tekrarlama 7 kez azaldı ve 37 kez tekrarlandı. Bir sonraki hücre 6 ile azaltılarak 256 - 6 · 37 = 34 olur . Hücrelerin geri kalanı her seferinde 4 oranında azaltılarak her bir yineleme için bir hücre eklenir ve her yeni hücre 252 (-4) 'e inialize edilir. Sonuç şudur:

[  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 Verilen çözüm (79 bayt) önemsiz derecede bir azaltılabilir:

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

39
Bu delilik. Biriniz 82 baytlık sürümü anarşi golfüne sunmalı.
Martin Ender

117
Bu soruya en iyi Java çözümü 76 bayttır. Java geliştiricilerini kanıtlamak için yalnızca 9 bayt Brainfuck’a geçmelidir.
Seviye Nehri St

9
@LevelRiverSt Küçük harflerden biri Java'dan 2 bayt daha kısadır. Bitiş zamanları geldi.
Conor O'Brien,

13
"Java geliştiricilerini kanıtlamak için yalnızca 9 bayt Brainfuck'a geçmeli." interface a{static void main(String[]A){System.out.print("No!");}}
dorukayhan


222

ArnoldC , 71 bayt

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

Sadece lols için ..


4
Benim için çalıştı. Şov
saatini

72
Bu dili nasıl kullanacağımı gerçekten öğrenmem gerekiyor.
Buzz

3
Bir boşluk ve bir yeni satır aynı sayıda baytı kaplamaz mı? Ve teknik olarak IT'S SHOWTIMEve TALK TO THE HANDilk ve son satırlarda olmalıdır.
wizzwizz4

5
@AlCode Ama daha doğru ve aynı sayıda bayt sürüyor ve daha fazla uyumluluk var ve daha güzel görünüyor ve neden Puss'da bir kod golf mücadelesi olduğu ve neden kodunuzun okunaklı ve iyi olduğu konusunda şaşırdım yaptım iyi okunabilir bir cevap ve +1 oldu.
wizzwizz4

11
@ wizzwizz4 çok teşekkür ederim, ArnoldC ile geleceğin dili konusunda olabildiğince profesyonel olmaya çalışıyorum!
AlCode

203

Tohum , 6016 4234 4203 bayt

20 854872453003476740699221564322673731945828554947586276010721089172712854441839676581917455319274850944955030258951339804246125714958815519550291630078076933441706558540342671975808828643360922071900333028778314875248417953197990571991784126564752005357199892690656368640420204822142316716413192024742766282266114842280731756458212469988291309261528542889299297601723286769284159107438930448971911102280330101196758384815655479640836157495863547199726234352265518586460633795171196315255736880028338460236768181141732764911402112878175632130129852788301009582463631290071329795384336617491655825493435803011947670180368458659271192428341035912236946048939139042310380278430049252171822721598175984923434205610723412240162418996808671543770639111617709604242882388664919702606792443015941265168129550718541372361144081848761690730764968771245566074501485020726368378675085908872608679630368472956274468410052703615106090238423979678950131481176272880569100533049143775921798055136871254424261001442543122666701145111965968366507060931708140304772342855064834334129143038575569044150428480231956133612367393837580345180691911525531699573096952433882387811884727975431823620782822755161559988205401134640722220804177812794328129589949692446031008866917615922944976151073653201316255518389496411696741029209242119521978920200314572718584995265523235225587228975886710511855501710470163649632761488899317729943053884132314641377747687975638119132094777769497069556255954031537245957811105217875011509899497752696062748928963281605780942517262774976217663461063680912331030221981433051827519906741285738915397005702326447635845195923640649166530310494885569783989508000344280715868581532826832242144647203531393142251025361866506821695860883605004105862208004440476654027574832078603305884731766236740069411566854496824754558761536201352147934963241039597221404341132342297870517293237489233057335406510464277610336142382379135365550299895416613763920950687921780736585299310706573253951966294045814905727514141733220565108490291792987304210662448111170752411153136765318541264632854767660676223663544921028492602135525959428999005153729028491208277493747933069008199074925710651071766675870081314909460661981433426167330215548196538791617762566403934129026219366764038390123622134753742930729751695349588862441999672547791630729398908283091638866715502470152431589429837867944760012419885615525232399584379209285060418518373512154801760060312646951597932345591416241634668119867158079946680321131213357200382937049485606706114467095019612014749723443159443363662563254359712162432143334612180576945072905749883870150120687696027984317320305291407322779803583395375616762530641605634303022155218169343410634115050596030685041633824154135240376022159918501703555881290333205131375705406831260759974112248490451605422031345264183102048614606636275942039438138959188478277971377232005036301145411215067576576667743288951344423152531417111852584846747428443123174595987315325304540564683047858415059703724263652136185848573853965992798725654430360647040362341567082462847275277303225817689141675391972818943419663764371222973269129542760661385278009266471167618553065823580448848795731295589715602705860758954890415040763604082216728159486423396295188510311881004469017351709060492844398219491990895826924575575549615118821417543037296628825303328056839433114519945243963946989899508355224823109677424196639930153649890175062456649384605721510239142861693109687536600667811037619175927995599388547421689316110236566026931360164495251160997857372500940728057700473763884480342708897319990346726967220426504612260565552531158509215849649565188655100774748485416791517853427613458459889062942881409801879085054494129489535044719193283409051007851153504224002807392992520076910314763705776345053922387355156981872691537772657428096384535960466923475731297217863371650154415835785630016335858514130863258775100537612371430357576913148500310344278511588325852376442503898849856566716198848377379400158332792027967216204970114516984638014129252882482309132898416484525230488700253065644547798869056136044415413099076332059572505138116227535024546891015836838323022822272664771489129085797354578016574544759934333471793

(Göre elde edilen Befunge-98 programı bu ) 'dir

"9!dlroW ,olleH"ck,@

35
Vaov! Bunu nasıl buldun?
ETHProductions

31
Ne . Delilik bu.
Conor O'Brien,

47
BU NASIL GOLFLedin?
Yıkılabilir Limon,

39
Mersin twisterını tersine mi yaptın? Ve bunun herhangi bir güvenlik çıkarımı var mı?
primo

68
Detaylı (teorik) bir açıklama için size bir +500 daha vereceğim.
primo

155

Mornington Crescent , 3614 3568 bayt

NieDzejkob'a, daha kısa satır adları kullanarak 46 bayt tasarruf sağladığı için teşekkür ederiz.

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

Çevrimiçi deneyin!

Bu kesinlikle en iyi sonuç değil, ancak çözümlerin çözümünün yarısı kadar.

Hello, World Aşağıdaki istasyon adlarının dilimlenmesi ve sonuçları bir araya getirerek yapılır:

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

Son olarak, karakter kodu bilgisayar ediyorum !olarak (2<<4)+1 == 33. Tüm bu parçalar Paddington'da birleştirildi ve son olarak Mornington Crescent'te basıldı.

Not: Dil, aynı istasyona arka arkaya iki kez seyahat etmenin mümkün olup olmadığını belirtmez, ancak tercüman izin verir, ben de kullandım.


44
Bu kesinlikle harika : D
Beta Decay

32
Bu dili seviyorum. Affedersiniz, ben bu dilde programlama programları yaparken.
kedi

4
DÜNYA'da bu dil tüm hayatım boyunca nerede olmuştur?
ScottMcGready, 23

30
@ScottMcGready, Camden Town ve Euston arasında.
Martin Ender

3
Mornington Crescent şimdi TIO'da. tio.run/#mornington-crescent
Dennis

123

kötülük , 70 bayt

aeeeaeeewueuueweeueeuewwaaaweaaewaeaawueweeeaeeewaaawueeueweeaweeeueuw

Aşağıdaki dört komutu kullanır:

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
Bu kötülük ...
David Grinberg

61
Özellikle avatarın Black Hat olduğundan.
Doctor

5
İnterweave sürecini açıklayabilir misin?
Kishan Kumar

4
@KishanKumar evet
grc

30
Bu programı yüksek sesle okursanız, dubstep bas gibi geliyor.
Joe Z.

112

brainfuck, 72 bayt

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

Çevrimiçi deneyin!

Ve orjinal ambalajsız 76 baytlık çözüm:

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

Çevrimiçi deneyin!

Bulunan diğer en kısa (bildiğim kadarıyla) çözümler

'Selam Dünya!' 77 bayt:

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

Çevrimiçi deneyin!

'Selam Dünya!' 70 bayt:

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

Çevrimiçi deneyin!


Bunlar burada yazdığım bir c ++ programını kullanarak bulundu: https://github.com/ksabry/bfbrute

Not: Aslında bu kodu aslında biraz okunabilir ve kullanılabilir kılmak için göndermeden önce bu kodu temizlemek istedim, ancak bir yıldan fazla bir süredir elime geçmediğim için, olduğu gibi göndereceğim. Potansiyel optimizasyonlar için şablonlardan yoğun bir şekilde faydalanır ve zaman sabitlerini derler ve testlerimden bir sürü yorumlanmış kod vardır, ancak yararlı yorumlar yok, çok üzgünüm ama bu biraz korkunç.

Kod hakkında çok zekice bir şey yok, özünde kaba kuvvet var, ancak oldukça optimize edildi. Ana optimizasyon, önce tüm programlarda belirli bir uzunluğa kadar (hiçbiri ) döngüler olmadan (no [veya ]) tekrar eder ve veri dizisinde yapacağı tüm değişikliklerin bir dizisini önbelleğe alır. Her bir değişiklik dizisi için sadece tek bir program saklayacaktır, bu nedenle örneğin yalnızca bir tanesi >+<<->ve <->>+<saklanacaktır. Daha sonra, bu önbellekteki herhangi bir programdan oluşan tüm olası programları, aralarında herhangi bir döngü birleşimi ile yineler. Her programı yürüttükten sonra basit bir açgözlü av yapar ve karakterleri gagalar ve bunu programın sonuna ekler.

Bunu tüm programların alanı boyunca yürüttükten sonra neredeyse en kısa programların (uzunluk ~ 19'a kadar) formda olduğunu fark ettim *[*[*]*]. Aramayı bu formdaki programlarla sınırlandırmak, aramayı önemli ölçüde artırdı. Geçerli kayıt sahibi, uzunluk 27'de bulundu. Bu, aslında uzunluk 74 olarak hesaplandı, ancak .>.>.>.veri hücresinde 0 olması için yeterince şanslı olan belirli bir sekansın , [.>]<aşağı indirilmesi için basitleştirilmesine izin verdiğini fark ettim. 72'ye.

Uzun bir süre boyunca çalışmasına izin verdim ve 29'a kadar geçerli parametrelerle aramayı tamamladım, 29'a kadar devam ederek mevcut olanı yenmenin zor olacağını düşünüyorum, en umut verici yaklaşımın muhtemelen arama alanını artıracağını düşünüyorum. akıllı bir yol.


32
Bunu nasıl buldunuz?
Dennis,

2
@Dennis Muhtemelen, kullandığım kaynak kodu ile birlikte (bir kez temizledikten sonra) şansım olduğunda, işlemim hakkında bir açıklama yapacağım
KSab

32
Hey, Java'yı yendin.
Poke

18
Bu bazı cihaz, hücrelerin sarma bile gerektirmez ó_Ò
primo

5
Bunun arkasındaki algoritmayı görmek isterdim :)
musicman523

84

Piet, 90 kod çözücü

görüntü tanımını buraya girin

Bu 30'a 3 görüntü. Alternatif olarak, 10 numaralı mercan boyutunda:

görüntü tanımını buraya girin

3-yüksek bir düzen kullanır, böylece sadece bir kez işaretleyeceğim Eğer bu hala golf oynayabilirse, orada bas-konuş yapılmadığı için muhtemelen başka bir sütunda traş olabilirim.

Düzenleme: @ primo 84 codel çözümü .


6
Kendi ödülünü almaya mı çalışıyorsun? Seni daha fazla düşündüm Sp3000;)
Beta Decay

7
Hah, sadece bir ödül ayarladığım için eğlenceye katılamayacağım anlamına gelmez: P
Sp3000

9
Bir pop-up benim için bir op-op değildir. Bu bu .
mbomb007

1
Bu "dil" de ne? Onu seviyorum!
Zoltán Schmidt

8
"push-pop no-op" şimdi en sevdiğim cümle
BobTheAwesome

82

Haystack , 17 Bayt

Haystack, |yığın tabanlı işlemleri yaparken iğneyi samanlıkta bulana kadar yürüten 2D programlama dilidir . Tüm programlar sol üst köşeden başlar ><^vve programın etrafında hareket etmek için yön karakterlerini kullanabilir. Yön, kalıtsaldır, bu nedenle >sağa gitmek için kullanmaya devam etmeniz gerekmez , yön yalnızca farklı bir yön karakterine çarptığında değişir.

Varsayılan olarak, tercüman sol üstten sağa doğru okur, bu yüzden "Merhaba, Dünya!" istifin üzerine oyazdırmak için kullanın , daha sonra yürütmeyi tamamlamak için iğneyi yerleştirin.

"Hello, World!"o|

Bonus: Daha heyecan verici bir sürüm:

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

Sadece merak dışında, bir karaktere karakterlerden birini eklerseniz ne olur?
Random832,

@ Random832 Bir dizgede, yön karakterleri normal karakterler olarak değerlendirilir, yani bunları bir dizgiye dahil edebilirsiniz.
Kade

38
> + O
bjb568

3
Keşke herkesin yarısı kadar akıllı olsaydım, ama "dökümantasyonda" okundu: bazılarının forum mesajı) obir sayı olarak çıktılar diyor . cSonunda olmamalı mı ? Herhangi bir yerde uygun belgeler var mı? Bu çok ilginç!
Şeytanın Avukatı

2
@Scott Süper cevap, bu forum cevap muhtemelen benim bendim! oüst yığın öğesini olduğu gibi çıkarır, yani bir sayı varsa onu yazdırır. cbunu basitçe bir karaktere aktarırdım. Yani, yığının tepesinde bir dize veya karakter ovarsa, istediğin gibi olur :) Sonunda bu dokümanlar güncellenir ..
Kade

70

Yardım, WarDoq! , 1 bayt

H

Sadece yardım değil , WarDoq! tabirin en yaygın yazımları için yerleşik bir terime sahip olmakla birlikte, programlama dilindeki genel tanımımızı bile yerine getirir.

İçinde Deneyin resmi online tercüman (kod gider Giriş ).


7
Yani, HQ9 ++, aslında, ha? ;-)
AdmBorkBork 28:15

6
@TimmyD Hayır, HQ9 ++ değil .
Dennis,

30
Ah, yüksek sesle ağladığın için. Bu noktada bir esolang olmayan bir şey var mı ? :)
AdmBorkBork

97
"Space: Begin a comment. The next non-space character ends the comment and is interpreted as usual."Öyleyse sadece boşluklardan yapılan yorumlar olabilir. Sanırım dünyadaki en faydalı dilin bile hiç kullanılmayan bir özelliği olması gerekiyor. +1,
Level River St

29
@steveverrill Belki eğer sekmeler de yorumlar olarak kabul edilirse, yorumları Whitespace programları olarak yazabiliriz
Optimizer

66

MarioLANG , 259 249 242 240 235 bayt

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

Bu Ruby uygulamasında test edilmiştir .

Şaşırtdıktan sonra "Merhaba, Dünya!" MarioLANG içinde biraz golf oynamak için baktım. Yukarıdaki, bugüne kadar bulduğum en kısa.

Daha önce olduğu gibi, dört hücreyi karakterin He,ve boşluğun 10'a en yakın katına ayarlayan ve MarioLANG'ye dönüştüren bir Brainfuck çözümünden başladım . Daha sonra, ilmek genişliğini neredeyse yarıya indiren ilmek içindeki yardımcı zemini kullanarak kodu biraz kısaltabilirsiniz. Alt kısmın üst kısımdan yalnızca bir kez daha aşağıya doğru yürütüldüğüne dikkat edin, böylece ilk sayacın tam katlarını artık 4 hücrede almazsınız.

Sonunda, döngünün önündeki boşa harcanan alanı kullanmak istedim, bu yüzden oradaki dikey boşluğu kullanmak için bir sürü asansör ekledim. Ardından , döngüden sonra kodu katlayabileceğimin farkına vardım (önceki revizyona bakın).

Bu muhtemelen hala mükemmel olmaktan uzak, ama saf çözüm üzerinde iyi bir gelişme olduğunu düşünüyorum.

Metagolf

Bazı otomasyon zamanı ...

En uygun çözümü bulmak için Mathematica'da bir çözücü kurmaya başladım. Şu anda kodun yapısının sabit olduğunu varsayar: sayaç, sabit olarak atanmış He,<space>ve bu hücrelerin aynı sırasına sahip, baskı için 12, 4 hücreye ayarlanmış . Değişen şey, +döngüdeki s sayısı ve sonrasında gerekli düzeltmelerdir:

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
 ]

Anlaşılan o ki, 12 başlangıç ​​sayacı için el yapımı çözümüm zaten uygun. Ancak, 11 kullanarak iki bayt kaydeder. 6 ile 20 (dahil) arasındaki tüm sayaç değerlerini aşağıdaki sonuçlarla denedim:

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

Not: Bu çözücü, döngüden sonraki doğrusal kodun hepsinin üst satırda olduğunu ve yukarıdaki kodun çözümün katlanmış olduğunu varsayar. Çözücüyü katlamanın farkına vararak daha kısa bir genel çözüm olabilir, çünkü şimdi +ilk bölümde ücretsiz olarak 3 saniye daha alıyorum ve sonraki 4 komut 2 yerine sadece 1 bayta mal olacak.


2
@justhalf Pada cevabımı görmelisin. : P
Martin Ender

Martin Bu cevabı seviyorum. Bunun hakkında resmi forumumuzda bir yazı yazmayı düşünür müsünüz ? Stackexchange editörü ile aynı kullanıyoruz. Editörümüz onu Personel Seçimlerine eklemek istiyor .
Vitaliy Kaurov

61

Karanlık , 106 bayt

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

Dil belirtiminden bazı alıntıların bu esolang'ın parlaklığı için konuşmasına izin vereceğim:

Karanlık, hedeflere ulaşmak ve mümkün olan en iyi gerçeği yaratmak için tüm dünyaları ve boyutları manipüle etmeye dayanan bir dildir.

Bir sözdizimi hatası oluştuğunda, programın aklı başında 1 azalır. [...] Programın aklı başında sıfıra ulaşırsa, tercüman delirir.

Yolsuzluk, gerçekleştiğinde değişkende tek bir bit döndürür.

Efendi öldüğünde, efendiye bağlı tüm hizmetkar değişkenleri de ölür. Bu, gruplandırma ve toplu öldürme değişkenleri için kullanışlıdır.

Bir değişkeni kendisini öldürmeye zorlayarak serbest bırakır (çürümeyi bırakacağını unutmayın).

Bir değişkeni rastgele bir değere ayarlar. Global Kaos Jeneratörünü kullanır.

Bir takipçi başlatılmadıysa, GÇ gerçekleştirmek için yapılan herhangi bir girişim konsola yazılan hata mesajlarının bastırılmasına neden olacaktır.


37
Bu dil çok metal.
Alex A.

6
Programlama dillerini kötülük sırasına göre listelemek zorunda olsaydık, Dark kötülüğü üstlenirdi.
LukStorms

35
merhaba cehennem var
Khaled.K 13:15

süper kötülük, hatta yürüyen gotos ordusunu yükseltebilirsin
bobrobbob

59

Şef , 465 bayt

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.

Ruby tercümanı ile test edilmiştir. Alfabe çorbası yapar.

Ben olarak uyumlu olmaya çalıştı özgün spec I could, bu yüzden kullanılan tercüman sağlar olsa yorulana theiçinde s Pour contentsı yapmadıysanız, talimat.

Karıştırma kabı oldukça pahalıdır, bu yüzden daha iyi bir yaklaşım olabilir. İletiyi kodlamak için temel dönüştürmeyi kullanmayı denedim, ancak ne yazık ki teknik özellik Dividetam sayı mı yoksa kayan nokta bölümü kullanıp kullanmadığını netleştirmiyor ve sonuncuyu da kullanıyorum. Ayrıca, hiçbir yardımcı olmayan modulo operatörü yoktur.


19
Eğer birisi Chef'de golf oynayabilirse Sp.
Alex A.

11
Şimdi gerçek hayatta golf tariflerini deneyin. : D
mbomb007

2
Lol, bu sadece yemek için iyi değil, aynı zamanda standart olmayan ölçü birimleri kullanıyor. XD
thepiercingarrow 29:16

59

Yuva , 58 bayt

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

Sondaki boşluk önemli.

Sana bir hikaye anlatayım. Bir zamanlar yakındaki somon kuluçkahanesini çalıştıran bir enerji santrali vardı. Somon kuluçkahane, bir bahar bulmak için bir yolculuğa çıkmış genç bir evsiz somondan yumurtadan çıktı. Yeni bir genç somonun olgunlaştığı ve yumurtladığı şiirsel adıyla “Merhaba, Dünya!” Gibi bir bahar buldu. Her iki balık da geniş okyanusu aramak için aşağı havza yüzdü. Ancak nehrin ağzından kısa bir süre sonra, nehirde bir ağ vardı - olgun balıklar yakalandı ve sadece gençler okyanusa ve evrenin geri kalanına girip kayabildiler. Bu arada, kuluçkahane, daha önce akıntı yapan ve daha sonra ortaya çıkan daha fazla somondan çıkmıştı.

Ancak, büyük miktarlarda eriyen kar nehrin farklı bir kolundan aşağı doğru yolculuk ediyordu. Ve ilk somonumuzdan hemen sonra "Merhaba, Dünya!" okyanusa ulaştı, kar erimesi evrene düştü ve ... ... onu yok etti. Ve sonsuza dek mutlu yaşadılar ... ya da sanırım olmadı.

Bunlar aslında yukarıdaki programın anlambilimiydi. Evde kalmak tuhaf.


15
Bu ... garip ...
kirbyfan64sos

10
Yeni bir favori somon destekli evren avcısı buldum ... ah ... "Merhaba, Dünya!" Demek istedim. programı. +1
ETHProductions

7
Ne zaman buna geri dönsem, iyi bir gülüşüm var. Muhtemelen en eğlenceli Merhaba, Dünya'yı yarattığın için teşekkürler! tüm zamanların programı.
ETHProductions,

2
Bu benim yeni favori dilim.
Mega Man


53

Piet, 84 kod çözücü

Piet Merhaba Dünya

28x3, burada 10 numaralı merdane genişliği ile gösterilmiştir.

Oluşturulan PietDev , test npiet . Programın düzeni aşağıdaki gibidir:

Piet Düzeni

Sarı dolgu, yolun çakıştığı kodelleri, turuncu dolgu ise kontrol akışı amacıyla aynı renkte olması gereken kodülleri gösterir.

Bunun oluşturulmasına yardımcı olmak için, "pasm" ( kaynak ) olarak adlandırdığım piet komutları ile yığın tabanlı bir dil için basit bir tercüman yazdım . Bu tercümanın çıktısı ( bu girişle birlikte ) aşağıdaki gibidir:

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

İşaretçi, anahtar veya yuvarlanma komutları kullanılmaz. Kodeller de boşa harcanmaz; aslında iki kişi yeniden kullanılıyor.


Tebrikler,
lütfümü aldın

@ LegionMammal978 Teşekkürler, üzerinde çalışmak çok eğlenceliydi. Ve mutlu noeller :)
primo

7
Hollywood'un "hacker" ekranlarında göstermesi gereken şey budur.
Hubert Grzeskowiak

50

Boşluk , 192 150 146 bayt

Boşluklar yalnızca boşluklara, sekmelere ve satır beslemelerine ihtiyaç duyarken diğer karakterler yoksayılır.
Burada görüntülemek zahmetli olabilir.
Böylece aşağıdaki kodda boşluklar ve sekmeler değiştirildi.
Ve bir ';' netlik için çizgilerin önüne kondu.
Kodu çalıştırmak için önce değiştirin. ve> boşluklara ve sekmelere göre.

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

Kodun Hexdump'u

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

Boşluk derleme kodu:

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

Uyarılar:

Sadece 107 eklemenin cümle için en uygun golfu verdiğini hesaplamak için bir program yazmam gerekti. Bir tamsayının kodda aldığı baytlığı bu yana değiştirir. : 4 + int (abs (log2 ($ n)))
Kod, whitespace.kauaveel.ee adresinde "e:" etiketi ve çıkış kısmı olmadan da çalışmaya devam eder . Ancak bu, boşluk kodunu diğer boşluk derleyicilerinde geçersiz kılabilir. Yani bu baytlar çözümden atılmadı.

Bu not alınmalı

Kevin Cruijssen, yorumlarda da belirtildiği gibi, meta başına bir "yanlışlıkla çıkış" yapılmasına izin vererek, Whitespace, 126 karaktere kadar golf koduyla kodlanabilir .

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

Montaj:

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

Bunun bir süre oldu biliyorum ve bunu en derleyicilerde exit-etiket olmadan çalışıyor mu söz ediyoruz, ancak bunu düşürebilirsiniz bkz 129 bayt bir kullanan bir hatayla çıkarak SSNyerine (hata değerini) SSSN(itme 0 ), meta göre izin verilir . Çevrimiçi deneyin (vurgulanmış ve açıklamalı) , ya da çevrimiçi ham deneyin .
Kevin Cruijssen

@KevinCruijssen Sonunda sürümünüzü kontrol ettim. Temelde montaj dup jumpz eve e: exitkaldırılan eski versiyondur . Ama en azından whitespace.kauaveel.ee adresinde tarayıcı şikayet edene kadar döngü devam ediyor. Düşük golfe ve "yanlışlıkla çıkmaya" izin veren metaya rağmen sürümümü değiştirmemi tercih ederim. Ancak sürümünüzü yeni bir cevap olarak göndermekte özgürsünüz.
LukStorms

Hayır, ayrı bir cevap göndermeyeceğim. Temelde sizinkiyle aynı, yanlışlıkla çıkması nedeniyle biraz daha kısa. Ayrıca SSNbaşlangıçta kaldırarak 129 yerine 129'a düşürdüğümü fark ettim, bu durumda yığında yalnızca tek bir öğe olduğunda Infix Plus ile yapamazsınız (107). ( Çevrimiçi deneyin. ) Herkes aynı öneriye sahip olduğunda yorumumu burada bırakacağım. Ve sanırım bir yıl önce cevabınızı zaten + 1'ledim. ;)
Kevin Cruijssen

1
@KevinCruijssen Bu durumda, çözümünüz yanıtta belirtildi. Whitespace, golf oynamak için en olası dillerden biridir. Ancak, baytları kurtarmak adına, bulgularınızdan bahsetmeye değer.
LukStorms

49

Java, 79

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

Java'nın önceki sürümleri, statik bir blok (51 bayt) kullanmanıza izin verebilir, ancak şu anda mainyöntemi atlamanın bir yolunu bilmiyorum .


7
Yerine enumkullanın class.
Thomas Eding

6
@ThomasEding Bu aslında hangi derleyici üzerinde çalışıyor? Ben ettik bu ipucunu çalıştı birkaçı üzerinde ve bununla bayt kaydetmek mümkün olmamıştı.
Geobits

4
@Luminous Ah, 1.5 için çalışmış olabilir. Yine de onu bulmak için kurmayacağım, ancak son 10 yılda piyasaya sürülen bir şeye bağlı kalıyorum. Java 5'i bir daha hiç göremezsem güzel bir hayat olacak :)
Geobits

2
@TheDoctor Gördüklerime göre, İşleme genellikle burada ayrı bir dil olarak görülüyor. Bir cevap olarak göndermelisiniz ya da en azından OP’den açıklama talebinde bulunmalısınız.
Geobits

5
Kullanıcı OptiFine, bir interfaceve kullanarak belirticiyi açarak 3 bayt kaydetmeyi önerdi public. Düzenlemeyi takiben düzenlemeyi reddettim, ancak yorum yapamadıkları için, size bildiririm, böylece isterseniz kullanabilirsiniz.
Martin Ender

48

CSS, 30 bayt

:after{content:"Hello, World!"

Basamaklı Stil Sayfaları (CSS) tipik bir programlama dili değildir, ancak sabit çıktıları oldukça iyi yapabilir. Bu, içeriği olan her öğeden sonra bir sözde eleman oluşturarak yapılır Hello, World!. Dolayısıyla, yalnızca bir öğe ( <html>) seçildi, bu en temel HTML belgesini kullandığımızı varsayıyor, yani

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

Bu, seçiciyi <html>ve <body>öğelerine uygulayan Firefox istisnası hariç, çoğu büyük tarayıcıda çalışır . Bu aynı zamanda Stack snippet'lerinin çalışmamasının da nedeni budur, çünkü daima stil alan bir gövde elemanı da vardır. Aşağıda test etmek için biraz değiştirilmiş bir versiyondur.

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


3
* *Seçmek için de kullanabilirsiniz body.
jimmy23013

18
@ jimmy23013 Bu görkemli derecede verimsiz geliyor. Teşekkürler
NinjaBearMonkey

1
Hangi nedenle olursa olsun, * :afteraynı zamanda iş gibi görünüyordu.
jimmy23013

12
CSS’deki harflerden hangisinin “dil” in kısaltması olduğunu kendi kendime soruyorum.
Zaibis

10
@zaibis PHP için muhtemelen aynı harf :)
fcalderan

48

HTML, 13 bayt

Hello, World!

Metin otomatik olarak, içine eklenir <body>ve görüntülenir.


159
Vay. Bu bazı gerçekten zor kodlama becerileri
BlueWizard

46
HTML bir programlama dili değil, bir biçimlendirme dilidir (bu yüzden ML ile biter).
CoDEmanX

31
Ancak, HTML STDOUT'da yazdırılmamıştır.
Harshil Sharma

25
-1 HTML geçerli bir dil için gereksinimlerini karşılamıyor
Downgoat

123
-1 yeterli değil jQuery
Valentin Lorentz

45

Linux için x86_64 makine kodu, 32 bayt

Linux yeni bir işlem başlattığında, tüm kayıtlar (RSP hariç) sıfırdır, bu nedenle yalnızca düşük bayt değiştirerek RAX = 1 alabiliriz. X86-64 System V ABI bunu garanti etmiyor, ancak Linux'un yaptığı şey. Bu kod yalnızca _startstatik bir yürütülebilir dosya gibi çalışır .

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

Çağrı talimatı, merhaba dünya dizesini içeren bir sonraki adresi yığına iter. Dizenin adresini girdik rsi.

Sonra diğer argümanlar bir için ayarlanmış syscallTo sys_writedize yazdırır.

Program ile sonlanır syscalliçin sys_exit. sys_writeYazılan bayt sayısını döndürür, bu nedenle RAX'ın üst byte'ları birinciden sonra sıfır olur syscall(bir hata mov al, 60vermediyse ), bize RAX = __NR_exityalnızca 2 byte verir.

Stdout ( ./a.out >&-) işlevini kapatarak bu programı farklılaştırabilirsiniz , böylece sys_write()geri dönecek -EBADF, ikinci syscallgeri dönecek -ENOSYSve daha sonra yürütme sona erecektir. Ancak write()hataları incelikle ele almamız gerekmez .


Spesifik olarak bu sadece Linux'ta çalışır , burada __NR_write1'dir. Bu, farklı x86-64 Unix sistemlerinde standart değildir. Ayrıca taze süreç (girmesinden önce RSP dışındaki tüm kayıtları zeroing Linux davranışa bağlı ediyoruz aksi takdirde dinamik bağlayıcı üst bayt çöp bırakacak, statik bir yürütülebilir olarak inşa eğer öyleyse bu sadece çalışır raxsiz ve' alacağım -ENOSYS). X86-64 System V ABI, kayıtların girişte keyfi çöp değerleri tutabildiğini _start, Linux çekirdeğinin bilgi sızıntısını önlemek için sıfır seçtiğini söylüyor.
Peter Cordes,

DIL için bir REX ön ekine ihtiyaç duymak yerine, mov al, 1/ mov edi, eax(2 bayt) ile bir bayt kaydedebilirsiniz , çünkü__NR_write == STDOUT_FILENO = 1
Peter Cordes

Bu sadece Linux statik bir çalıştırılabilir programında çalışır, bu nedenle dizginizin adresinin sanal 2G adres alanının düşük olduğu 2G (içinde PIE çalıştırılamayanlar için varsayılan bellek modeli sıfır veya imza olarak kullanılabilecekleri tüm sembolleri koyar). genişletilmiş 32-bit hemen başlar). Böylece 5 bayt mov esi, msg(NASM) aka mov esi, OFFSET msg(GAS .intel_syntax) kullanabilirsiniz . En sondan sonra ipinizi koyun syscall. call/pop64 bit RIP-göreli LEA'dan 1 bayt daha kısadır, ancak mov en iyisidir.
Peter Cordes,

NASM kaynağı 30 bayt sürümü (masaüstümde kontrol boyut) için, tio.run/##TY8/...
Peter Cordes

42

Altıgen , 37 32 bayt

Dikkat: Yan uzunlukta 3 altıgen içinde geçerli bir çözüm bulan ilk kişiye ya da kesin olarak optimal yan uzunlukta 4 olan bir çözüm bulan kişi olarak 500 lira ödeyeceğim. Böyle bir çözüm bulamazsanız, ancak Puanımı bir kenar uzunluğu 4 altıgen olarak geçmeyi başardım (programın sonunda kaynak kodundan çıkarılabilecek daha fazla no-op alarak), bunun için daha küçük bir ödül vermeye hazırım .

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

Çevrimiçi deneyin!

İkinci 2D programlama dilimi ve ( bildiğim kadarıyla ) ilk 2D dilini altıgen bir ızgarada gururla sunarım.

Kaynak kodu 2B görünmüyor, değil mi? Beyaz boşluk Hexagony'de isteğe bağlı. İlk olarak, kaynak kodu no-op ( ) ile bir sonraki ortalanmış altıgen numaraya doldurulur .. Bir sonraki böyle sayı 37'dir, bu yüzden sonuna 5 tane no-op ekleriz. Ardından kaynak kodu normal altıgene yeniden düzenlenir:

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

Bu da çalıştırılabilir. Çevrimiçi deneyin!

Hexagony, 6 farklı komut göstericisi ve altıgen bir ızgara çizgi grafiği olan bir bellek düzeni de dahil olmak üzere oldukça korkak özelliklere sahiptir, ancak bu kod sadece bir IP ve bir bellek kenarı kullanır, bu yüzden şimdilik endişelenmeyelim.

İlgili komutlara genel bir bakış:

  • Harfler sadece mevcut hafıza kenarını ASCII değerlerine ayarlıyor
  • ; geçerli değeri, modulo 256'yı STDOUT öğesine bayt olarak yazdırır.
  • / beklediğiniz gibi davranan bir ayna (IP'nin 120 derece dönmesine neden olan).
  • Rakamlar Labirent'te olduğu gibi çalışır : mevcut hücreyi 10 ile çarpıp kendilerini eklerler.
  • @ programı sonlandırır.

Şimdi son yakalama, kaynağın her 3 kenar çiftinin etrafına sarılmasıdır. Ayrıca IP, ızgarayı altı köşeden birinden çıkarsa, atlamak için iki olası satır vardır. Hangisinin seçildiği, mevcut değerin pozitif ya da pozitif olmamasına bağlıdır. Aşağıdaki açıklamalı sürüm, IP'nin ızgaradan her çıktığında yeniden girdiği yeri gösterir:

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

Böylece tüm yön değişikliklerini kaldırırsak, bu program aşağıdaki doğrusal koda indirgenir:

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

Ne beraber Q2, P0ve P1? Harfler kolayca yazdırılır, çünkü kenarı karşılık gelen değere ayarlayabiliriz. Virgül için, boşluk ve ünlem işareti, bu işe yaramaz. Biz de sadece onların değerini belirleyemezsiniz 44, 32, 33hafıza kenar başlamak için sıfırdan farklı olduğu ve bağlı tahribat her türlü bullak ederdi bireysel basamak semantik çünkü sırasıyla. Bunu yapmak istiyorsa, biz böyle bir şeyle sıfıra kenar değerini sıfırlamak zorunda kalacak *, +, -, &veya ^ilk. Ancak, değer basılmadan önce modulo 256 alındığından, değerleri tam olarak 44, 32 veya 33 olarak ayarlamak zorunda değiliz. Örneğin, Q2kenar değerini 81*10 + 2 = 812,44Modulo alındığında 256. Bu şekilde, bu üç karakterin her birine bir bayt kaydedebiliriz. (Ne yazık ki, nerede hücrede zaten. İşin güzel yanı, olan değerden tek rakam ile oraya mümkün asla gelmez iştir oiçinde World, bu da elde edilebilir çünkü W9.)

Belirli bir karaktere yol açan tüm harf basamaklı kombinasyonları bulmak için bu CJam komut dosyasını kullanabilirsiniz .

Bunun optimal olup olmadığından emin değilim. Kenar uzunluğu 3 olan bir altıgen (mümkün olan sadece 19 karaktere sahip olacaktınız) içinde yapılabileceğinden şüpheliyim, ancak 32 komuttan az olan yan uzunluğu 4 olan bir altıgen içinde çözmek mümkün olabilir şebekenin sonunda daha fazla op-op olmadığı.


1
Kahretsin, beni yendin. Ben kendim de, Kardinal'e benzer altıgen bir dil üzerinde çalışıyorum.
ML

Bu çözümü nasıl buldunuz? Elle mi yoksa kaba kuvvetle mi? Neyse, +1 :)
Adnan

1
Q2, P0Ve P1çok akıllı. Modulo 256 kısmını bilmiyordum.
Adnan

1
@Adnan GitHub’da mod-256 bölümünü öneren kişi aslında o zamandan beri birkaç kez kullandığım satır beslemelerinin M8;(veya g4;) olarak basılabileceğini söyledi . Bu değişikliği yaptıktan sonra bu cevabı tekrar ziyaret etmek şimdiye kadar hiçbir zaman aklıma gelmedi.
Martin Ender

2
Not: Bu bir süre önce 31'e düşürüldü . H;e;P;2Q/d;l;r/l;$@;o];o;W;03&;
Mitch Schwartz

38

Malbolge, 112 bayt

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

Daha kısa bir tane olup olmadığını göreceğim. Geçen zamandan beri daha iyi bir bilgisayar aldım, bu yüzden biraz daha hızlı üretebilirim.

Gösteri için işte "Merhaba Dünya!" virgül olmadan.

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

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

37

Fourier , 15 bayt

Fourier'e BÜYÜK DEĞİŞİM!

`Hello, World!`

FourIDE'da dene!

Evet, her karakterin ASCII kodunu yazdığınız günler sonsuza dek gider: Fourier now tür destek dizgisidir. Bir dizgiyi backticks içine aldığınızda, bu dize gönderilir.

Bu dizgeden çıktı dışında başka bir şey yapamayacağınızı unutmayın: onu bir değişkende saklayamazsınız, akümülatörde depolanmaz ve dize işleme araçları yoktur.


Burada, eski Fourier olan tren kazasını bulabilirsiniz . ;)

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

Çevrimiçi deneyin!

Şimdi, bazılarınız daha önce Fourier ile tanışmış olacak ve dili oldukça iyi bilmiş olabilirsiniz. Bütün dil bir akümülatöre dayanmaktadır: hemen hemen tüm operatörlerin kullandığı küresel bir değişken.

Kodun en önemli kısmı aoperatördür. Bu, akümülatörün sayısal değerini alır ve Python kodunu kullanarak bir karaktere dönüştürür chr(accumulator). Bu daha sonra STDOUT'a yazdırılır.

Ne yazık ki, Fourier'i kullanma şansım olmadı ( dürtmek dürtmek , göz kırpmak ), çoğunlukla dizge ve string operatörlerinin olmamasından dolayı. Buna rağmen, diğer birçok zorluk için hala kullanılabilir (EsoLangs sayfasının örnekler bölümüne bakın).

Bunun Esolangs listesine girdiğimden daha kısa olduğuna dikkat edin, çünkü daha fazla golf oynayabileceğimi sanmıyordum. Ve sonra, Fourier string golf mücadelesini yazarken, biraz daha kısayabileceğimi farkettim.

Not

Değişken sözdizimini merak ediyorsanız, Geobits değişkenleri kullanan ve aynı uzunluktaki bir program yazdı :

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

Çevrimiçi deneyin!


Kullanılabilir olan nedir? Kullanılabilir mi?
Hesap MakinesiFeline

35

C-- , 155 bayt

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

Ne yazık ki, bilinen tek C-- derleyicisi, Quick C-- artık korunmuyor . Bu inşa etmek için bir baş belası, ama bir mümkün ...


8
Gerçekten büyüleyici bir dil - daha önce hiç duymamıştım ve kesinlikle yaptıkları / yaptıkları iddialı bir proje. Ancak kod golf açısından, bunun bir rakip olacağını düşünmüyorum. Demek istediğim ... dang, bu şey Java'ya kaybediyor ...
AdmBorkBork 28:15

11
@TimmyD Gerçekten bir montajcı. Java'ya
kaybedecek

Senin için iyi haberlerim var. C-- projesinin kendisi oldukça ölü gibi gözükse de, bir değişken oldukça canlı. Glasgow Haskell Compiler (GHC), C--'yi montajdan veya LLVM'den önceki son aşaması olarak kullanır ve bu versiyon hala aktif olarak korunur. Ne kurulacak olursa olsun (GHC'nin geri kalanıyla birlikte) herhangi bir sorun olmamalıdır.
dfeuer

@dfeuer Gerçekten onların Cmm arka uçlarını daha önce kullanmaya çalıştım, ama bazı tuhaf meselelerim vardı ve daha önce hiç bu kadar çok içine bakmadım ¯ \\ _ (ツ) _ / ¯
kirbyfan64sos

Haskell e-posta listelerinde muhtemelen biraz yardım alabilirsiniz. Glasgow-haskell-users@haskell.org veya belki de haskell-cafe@haskell.org adresini deneyin.
dfeuer

33

C, 30 Bayt

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

Oldukça vanilya, ancak bunu daha kısa sürede yapmak için derlenebilir bir yol düşünemiyorum (belki de bir çeşit ham hile işe yarayabilir mi?). Yine de, çoğu eşanjörü yener!


3
Ayrı bir cevaba değmez, fakat tamamen ISO uyumlu C89 ve C99 cevapları sırasıyla 39 main(){puts("Hello, World!");return 0;}ve 53 #include <stdio.h> int main(){puts("Hello, World!");}bayttır. Ana (boş) gerekli olduğunu düşünüyorsanız, biraz daha fazla.
Random832

20
@ Random832: birincisi, main(){return!puts("Hello, World!");}iki bayt daha kısa.
Lynn,

15
Program h29 bayt daha kısa. Not: -Dh='main(){puts("Hello, World!");}'Ben yarı trolling, yarısı derleyici istismarı kendimi eğlendirmek ile derlemek zorunda kalacaksınız .
matega,

19
@matega Bu açıkça hile. Hile yapmamak için dosyayı yalnızca __FILE__(8 bayt) içermesi ve dosyayı adlandırmanız gerekir main(){puts("Hello, World!");}. O zaman tamamen aldatma değildir;)
C0deH4cker

Aslında, 2017 kurallarına göre bunlar sırasıyla 34 ve 38 bayt olacaktır.
Hesap MakinesiFeline

32

Okunamayan , 843 755 732 666 645 629 577 bayt

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

Okunamayan programların değişken genişlikte bir fontla gösterilmesi gerekiyor, bu nedenle dilin adını onurlandırıyorlar. Daha sofistike yaklaşımlarımın çok daha uzun sürdüğünü biraz hayal kırıklığına uğrattım. Okunamayan döngüler delicesine pahalıdır ...

Çevrimiçi deneyin!

Nasıl çalışır

Okunamayan sadece on işlevi vardır; bunlardan altısı bu kodda kullanılır:

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

Tek karakterli gösterimimi kullandıktan ve biraz boşluk ve yorum ekledikten sonra, yukarıdaki kod aşağıdakine benzer. Çok satırlı ifadeler aşağıdan yukarıya doğru yürütülür.

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

Yukarıdaki sözde kodun yorumlanmamış sürümünü bu CJam programı aracılığıyla çalıştırarak gerçek kaynak kodunu oluşturdum .


3
Neden bahsediyorsun? Oldukça okunabilir!
Doktor

19
@Optimizer Sabit.
Dennis,

4
Hala okunabilir! (tabi ki doğruyu söylüyorum. Neden bana inanmıyorsun?)
Doktor

5
Bu dilin, hem büyüklük hem de okunaksızlık açısından daha iyi bir huffman kodlamasından fayda sağlayacağını düşünüyor.
primo

30

Befunge 98 , 19 18 Bayt

Yeni cevap (undergroundmonorail'den)

"ck,@!dlroW ,olleH

açıklama

  • " string modunu başlatır
  • Takip eden her şey yığına itilir. Yığın şimdiHello, World!@,kc
  • Sona geldikten sonra tercüman başa dön
  • "Dize modunu sonlandırarak tekrar karşılaşır
  • 12 yığına ( c) itilir
  • k yığının en üst değerini alır ve komut göstergesinin birçok kez görebileceği bir sonraki komutu çalıştırır.
  • ,stack'ten bir değer atar ve onu char olarak verir. Son ktalimata göre 12 defa ve yorumlayıcı gerçekten ,talimatı okuduğunda bir defa daha uygulandı.
  • @ programı sonlandırır

Eski cevapla "aradaki fark, çizginin sonuna geldiğinde Befunge'nin döngü davranışını kullanarak karakteri akıllıca tekrar kullanmamızdır . Daha az sezgisel olabileceğinden, eskisine de izin veriyorum. Ayrıca, yığının ck,@, bu güzel numaradan dolayı bazı karakterler ( ) içerdiğini fark etmiş olabilirsiniz, bundan sonra bir şey yapmak istiyorsak, biraz karışıklık bırakır.

Eski cevap

"!dlroW ,olleH"ck,@

Bu funge ve befunge 98 için çalışıyor

açıklama

  • Aradaki her şey ""yığına itilir. ( 'H'şimdi üstte.)
  • c (12) yığına itilir
  • k yığının en üst değerini alır ve komut göstergesinin birçok kez görebileceği bir sonraki komutu uygular.
  • ,stack'ten bir değer atar ve onu char olarak verir. Son ktalimata göre 12 defa ve yorumlayıcı gerçekten ,talimatı okuduğunda bir defa daha uygulandı.
  • @ programı sonlandırır

2
Sanmıyorum 93 vark
Sp3000

1
Eh, şimdi 98 olduğunu sadece siz kullanabilirsiniz ciçin 93+.
PurkkaKoodari 28:15

3
18'de:"ck,@!dlroW ,olleH
undergroundmonorail

1
Dizeye "başlamak için isabet eder , satırın geri kalanının tamamını dizgeye ekler, etrafına sarılır ve "dizgiyi sona erdirmek için aynı şekilde vurur . Şimdi bunun dışında tüm program üste "gelecek şekilde yığına itildi !dlroW ,olleH. Sonra, ilk 12 karakteri, sizinkiyle aynı şekilde basar ve durur @.
undergroundmonorail

1
18 baytlık çözüm için tercümanım “Merhaba, Dünya” (öncü alan, ünlem yok) üretir. Anarşi Golf tercüman (kullanım şekli, Befunge-98, yapıştırma kodunu seçmek göndermek) aynısını yapar.
primo

29

JSFuck , 6293 6289 6277 bayt

Bu, en uzun "en kısa Merhaba, Dünya! Programlarından" biri olarak anılabilir.

Uyarı: yalnızca Firefox ve Safari’de çalışır

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

Ayrıca, Chrome ve Microsoft Edge'de de çalışan, biraz daha uzun bir sürümü (+4 bayt) vardır:

JSFuck'a aşina olmayanlar için, bu sadece altı karakter varmış gibi JavaScript yazmakla ilgilidir ve zaman zaman oldukça çılgına dönebilir.

Bu tablo Merhaba, Dünya! 'Da kullanılan karakterlerin nasıl olduğunu gösterir . program JSFuck'ta kodlanmıştır. Düz metin kodu sadecealert("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                 |
+----------+--------------------------------------+---------------------------+

İşte dizeler "fill","fontcolor" vb olarak yazılmalıdır "f"+"i"+"l"+"l", "f"+"o"+"n"+"t"+"c"+"o"+"l"+"o"+"r"kodlanacak.

Global tanımlayıcılar self,atob ve btoabenzeri yazılı olsun Function("return self")().

Functionkendisi olmalı []["fill"]["constructor"].

Virgül ","zor, nasıl çalıştığından% 100 emin değilim ama o[]["concat"] bir dizi oluşturmak işlevi . Daha fazla test yapacak vaktim olduğunda güncelleme gönderirim.


Bunu JScrewIt kullanarak kodladım - GOTO 0'a kredi böyle gelişmiş bir araç oluşturmak :

  • Firefox'u açın (Başka tarayıcıları seçebilirsiniz, ancak yalnızca Firefox kodu en kısa olandır.)
  • JScrewIt adresine gidin : http://jscrew.it
  • Giriş: alert("Hello, World!")
  • Yürütülebilir kod: kontrol edildi
  • Uyumluluk: Sadece bu tarayıcı

Bu benim bu soruya cevabımdan farklı "Merhaba" den sonra virgül varlığı için.

İlginçtir, ES6 sözdizimi

alert`Hello, World!`

("ve yerine iki backtick kodlamanın daha yüksek karmaşıklığından ötürü kodlamak için (+1500 ya da öylesine) daha fazla bayt alır ").


Peki Android Chrome'da çalışır
Beta Decay

Chrome'da OS X'te de çalışıyor
C0deH4cker

1
Burada harika bir iş çıkardın! Son güncellemeyi kontrol ettiğinizden emin olun.
GOTO 0

4
@ GOTO0 Bekle ... JScrewIt'ın yazarı sensin değil mi?
ben ve kedim

1
Buna ne diyorsunuz?

29

Pada , 83 68 bayt

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

Bunun lineer bir program için optimal olduğuna inanıyorum (yani kontrol akış operatörlerini kullanmayan ?ve* ). Genel olarak optimal olabilir, ancak bu ek operatörlerden bu kadar küçük bir miktarda kod kullanmaya nasıl devam edeceğimi bilmiyorum (veya olasılıkları programlı olarak nasıl keşfedeceğimi).

Dil, e-postayla yazarla tartışmaya başladığımdan sonra yakın zamanda bazı değişikliklerden geçti. Ancak bir referans uygulaması yazdım geçen hafta dil spesifikasyonunun mevcut durumu için , bu yüzden yukarıdaki kod gerçekten çalıştırılabilir.

Metagolf

Başlangıçta referans uygulamamın çıktısını bu zorluğa kullanmıştım ve buna dayalı el yapımı bir çözüm yarattım. Ancak, bu sadece bir sezgisel yaklaşım oldu.

Bunun yerine Mathematica'da Pada veri yapılarını ve operatörleri en iyi çözümü bulmak için bilen bir çözücü yazdım. Ortalama olarak, dize uzunluğu ile doğrusal olarak büyür (bazı karakter kombinasyonları diğerlerinden biraz daha yavaş olmasına rağmen) ve yaklaşık 1.5 saat sürdü.Hello, World! .

Peki, çözücüyü yazmaya nasıl devam ettim. Öncelikle, sadece 6 operatör düşünmemiz gerektiğini fark ettik: ~.oOqQ(ayrıca wyazdırılan her karakter için gerekli ). Yığınları veya bit kilitlerini kullanmak doğrusal kodda kullanışlı değildir ve buna inanmıyorum ?ve* bunun 68 bayttan daha az bir sürede kullanılabileceğine .

Pada'nın durumu (yığınları ve kilitleri yok sayarak) şu şekilde düzenlenmiş 7 anahtar ve 8 bit'ten oluşur:

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

Yani bu 215 = 32768 mümkün durumlar. İlk ön işleme adımım, her bir kenarın tek bir işleme tekabül ettiği durumlara yönelik bir grafik çizmekti. Diğer bir deyişle, grafik 32768 köşeye sahiptir, her biri 6 derece (6 işlemin her biri için bir çıkış kenarı). Herhangi bir iki durum arasındaki en kısa yolu bulmak için bu grafiği kullanabiliriz (bu grafik yalnızca Pada golf oynamak için oldukça faydalı olabilir).

Şimdi her karakter için, wo karakteri basan bir duruma ulaşmak istiyoruz . Bu tür kaç eyalet var? wBırakılan bitin bayt değerini (döngüsel olarak) okur. Böylece, karakterin bitlerinin tümü bu karakteri basabilen 8 olası dönüş vardır. Bu rotasyonların her biri için, üç anahtar sabittir ( wdoğru konumda düşüş yapmak için). Bu 4 rasgele anahtar bırakır. Yani kodumuzdaki her biri için olası durumlarımız var .8 * 24 = 128w

Bunlarla başka bir grafik problemini çözebiliriz: kaynak verteksine sahip bir grafik, daha sonra her karakter için bir "katman" ve bir havuz verteksi. Katmanlar, her köşe için 128 durumdan oluşur, kaynak düğümü programın başlangıç ​​durumuna karşılık gelir (tüm sola döner ve tüm bitler sıfırdır). Lavabo düğümü özellikle hiçbir duruma karşılık gelmez. Kenarları bir kattaki her köşeden sonraki kattaki her köşeye yönlendirdik, burada kenar ağırlığı önceki grafiğimizdeki iki durum arasındaki mesafedir. Kenarların son katmandan lavaboya kadar bütün ağırlıkları 0'dır. Yani, tüm bu kenar ağırlıkları önceden hesaplayabiliriz. Bu, hesaplamanın en pahalı adımıdır ve 1.5 saat sürdü Hello, World!.

Bu grafik ile kaynaktan lavaboya en kısa yolu oldukça hızlı bir şekilde bulabiliyoruz (makinemde 0.05 sn sürdü). İçin Hello, World!istenen devletler şunlardır:

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

en az önemli 7 bit, anahtarlara karşılık gelir ve en önemli 8 bit, Pada'nın bitlerine karşılık gelir.

Şimdi ilk grafiğe geri dönüyoruz ve sonraki her bir durum çifti arasındaki en kısa yola karşılık gelen gerçek kenarları (yani işlemleri) buluyoruz ve her birini bir ile sonlandırıyoruz w. Voilà, optimum bir çözüm (yukarıdaki varsayımlara dayanarak).

İşte birileri Pada'da farklı bir dize metagolfu yapmak isterse tam Matematik:

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]) <> ""

Metagolf yapmak için ilginç bir dil =). Bu beni meraklandırıyor, günlük işin ne? oO
justhalf

4
@ justhalf Şu anda yüksek lisans derecesi ve doktora çalışmaları arasında limbo yaşıyorum (bu yüzden senin imaların olsaydı, kesinlikle ellerimde çok fazla zaman var;). (Bu genellikle sohbet için daha fazla tartışma olur :))
Martin Ender

Pada, Bahasa Indonesia / Malay’da olduğu anlamına gelir. Bu alakalı mı?
XiKuuKy,

@XiKuuKy afaik, dil Pada denir, çünkü Hırvatçada "düşmek" demektir.
Martin Ender

Ve bu cevabı ( buraya bakınız ). Muhtemelen bu harika Hello World problemini genel olarak tanımlamak için 2 cevabı bir arada kullanabilirsiniz.
Vitaliy Kaurov
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.