"Привет, мир!"


419

Так ... эээ ... это немного смущает. Но у нас нет простого "Привет, мир!" вызов еще (несмотря на то, что 35 вариантов помечены как и считаются). Хотя это не самый интересный кодовый гольф на распространенных языках, поиск кратчайшего решения в некоторых esolangs может быть серьезной проблемой. Например, насколько мне известно, неизвестно, было ли найдено самое короткое из возможных решений Brainfuck.

Кроме того, хотя вся Википедия (запись в Википедии была удалена, но на сайте archive.org есть копия ), esolangs и Rosetta Code имеют списки «Hello, World!» программы, ни одна из которых не заинтересована в том, чтобы иметь самый короткий для каждого языка (есть также этот репозиторий GitHub ). Если мы хотим быть значимым сайтом в сообществе Code Golf, я думаю, что мы должны попытаться создать окончательный каталог самых коротких "Hello, World!" программы (аналогично тому, как наш основной вызов квин содержит некоторые из самых коротких известных квин на разных языках). Итак, давайте сделаем это!

Правила

  • Каждое представление должно быть полной программой.
  • Программа не должна принимать никаких данных и печатать Hello, World!в STDOUT (этот точный поток байтов, включая заглавные буквы и знаки пунктуации) плюс необязательный завершающий перевод строки и ничего больше.
  • Программа не должна ничего писать в STDERR.
  • Если кто-то хочет злоупотребить этим, создав язык, на котором печатается пустая программа Hello, World!, а затем поздравляю, он просто проложил путь к очень скучному ответу.

    Обратите внимание, что должен быть переводчик, чтобы представление можно было проверить. Разрешается (и даже поощряется) самостоятельно писать этот переводчик для ранее не реализованного языка.

  • Представления оцениваются в байтах в соответствующей (ранее существующей) кодировке, обычно (но не обязательно) UTF-8. Некоторые языки, такие как папки , немного сложнее оценить - если есть сомнения, пожалуйста, спросите на Meta .
  • Речь идет не о поиске на языке с кратчайшим «Hello, World!» программа. Это о поиске самого короткого "Привет, мир!" программа на каждом языке. Поэтому я не буду отмечать любой ответ как «принятый».
  • Если выбранный вами язык является тривиальным вариантом другого (потенциально более популярного) языка, у которого уже есть ответ (например, диалекты BASIC или SQL, оболочки Unix или тривиальные производные Brainfuck, такие как Alphuck), рассмотрите возможность добавления примечания к существующему ответу, что такое же или очень похожее решение также является самым коротким на другом языке.

В качестве примечания, пожалуйста , не опускайте скучные (но действительные) ответы на языках, где гольфу не так уж и много - они все еще полезны для этого вопроса, так как он пытается составить каталог как можно более полным. Тем не менее, делайте в первую очередь откровенные ответы на языках, где авторам пришлось приложить усилия для игры в гольф.

Для вдохновения, проверьте Hello World Collection .

Каталог

Фрагмент стека в нижней части этого поста создает каталог из ответов а) в виде списка кратчайшего решения для каждого языка и б) в качестве общей таблицы лидеров.

Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:

## Language Name, N bytes

где Nразмер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:

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

Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:

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

Вы также можете сделать имя языка ссылкой, которая будет отображаться во фрагменте кода:

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


2
@isaacg Нет, это не так. Я думаю, что были бы некоторые интересные языки, в которых не очевидно, возможно ли тестирование на простоту.
Мартин Эндер

6
Если одна и та же программа, например "Hello, World!", самая короткая на многих разных и не связанных языках, должна ли она быть опубликована отдельно?
aditsu

2
@ mbomb007 Ну, по умолчанию он скрыт, потому что три блока кода занимают много места. Я мог бы минимизировать их так, чтобы они представляли собой одну строку, но я бы предпочел сохранить код поддерживаемым в случае появления ошибок.
Мартин Эндер

7
@ETHproductions «В отличие от наших обычных правил, не стесняйтесь использовать язык (или языковую версию), даже если он более новый, чем этот вызов». Публикация языка и реализации перед публикацией, безусловно, будет полезна.
Мартин Эндер

2
@MartinEnder ... Почти. Если два BF-решения имеют одинаковый размер, то решение с меньшим лексикографическим порядком займет меньшее количество байтов в Unary. Конечно, самое маленькое решение Unary в переводе на BF гарантированно будет самым маленьким.
user202729

Ответы:


442

Застрял, 0 байт

Ну, не могу быть короче этого ... Пустая программа будет выводить Hello, World!в Stuck .


57
Черт, я опоздал на 20 минут! : P
Kade

33
Noooo давай самый быстрый пистолет на западе эффект;)
бета-распад

30
@ Zuck Ну да, Stuck был создан для игры в гольф, как CJam / GolfScript / Pyth. Это Hello, World!было просто то, что я положил в качестве заполнителя в начале разработки. Я не собирался оставлять его так долго, просто не удосужился его удалить.
Каде

132
Я пытался найти более короткое решение, но я застрял.
Cyoce

51
-1 байт в jQuery. Вы пробовали jQuery?
10 Ответов

244

PHP, 13 байт

Hello, World!

Да. Оно работает.


261
Как обычно с PHP, вам всегда интересно, как он может работать
Fatalize

95
Конечно, это работает, потому что <?phpв коде его нет, поэтому PHP вообще его не интерпретирует :)
Lynn

58
Это означает, что это всего лишь HTML-ответ ...
Нельсон

82
@ Нельсон нет, это не так. PHP не обязательно должен быть помещен в HTML. Кроме того, HTML-
код не выводится

26
Это самый веселый ответ за всю историю
Оливер Ни

241

Brainfuck, 78 байт

Открытая награда: если кто-то может улучшить этот счет, я передам им награду (+500). @KSabнашелрешение 76 72 байта!

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

Попробуйте онлайн!

Первые 28 байтов --<-<<+[+[<+>--->->->-<<<]>]инициализируют ленту со следующим отношением повторения (мод 256):

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

Коэффициент 171 возникает потому, что 3 -1 ≡ 171 (мод 256) . Когда текущее значение переводится на одну ячейку обратно (через <+>---), вычитая 3 каждый раз, эффективно умножает значение на 171.

При n = 220 переводимое значение равно нулю, итерация останавливается. Десять байтов, предшествующих точке остановки, следующие:

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

Он содержит все компоненты, необходимые для производства Hello, World!, в стиле "охота и клевание", с небольшими изменениями.

Я также нашел альтернативное 78-байтовое решение:

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

Попробуйте онлайн!

Я считаю, что этот лучше первого по нескольким причинам: он использует меньше ячеек, оставшихся дома, он изменяет меньше ячеек в целом и завершается быстрее.


Подробнее

Рекуррентные отношения имеют удивительно краткие представления в Brainfuck. Общий макет выглядит следующим образом:

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

который представляет:

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

с участием

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 и т. д.

Кроме того, значение <+>может быть изменено для умножения диапазона на константу, не влияя на точку останова, и перед добавлением члена может быть добавлен >{k}член, чтобы снова изменить диапазон на константу, опять же, не влияя на точку останова.


Другие примеры

Последовательность Фибоначчи

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

N-гональные числа

Треугольные числа

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

Определяется как f n = 2 · f n-1 - f n-2 + 1 , с f 0 = 0 , f 1 = 1 .

Квадратные числа

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

Пятиугольные числа

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

и т.п.


BF Crunch

Я опубликовал код, который использовал для поиска некоторых из этих решений на github . Требуется .NET 4.0 или выше.

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.

Вывод дается в три строки:

  1. Общая длина найденной программы и сегмент инициализации.
  2. Путь взят, начиная с текущего указателя ленты. Каждый узел соответствует одному символу вывода, представленному как (указатель, стоимость).
  3. Используется сегмент ленты.

Например, конечный результат для bfcrunch "hello world" 70 -r -i23:

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

Это соответствует полной программе:

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

Другие записи

Привет, мир!

Упаковка, 78 байт :

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

или же

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

Без упаковки, 87 байтов (ранее 92 байта (mitchs) ):

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

Привет, мир!

Упаковка, 80 байт :

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

Без упаковки, 81 байт (ранее 92 байта (hirose) ):

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

Привет, мир!

Упаковка, 74 байта :

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

Без упаковки, 84 байта :

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

Версия Esolangs

Привет, мир! \ N

Упаковка, 76 байт :

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

Это использует одну ячейку слева от дома, и, следовательно, будет рассматриваться 77.

Без упаковки, 83 байта :

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

Rdebath утвержден . Вывод 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 (Петр Карпов)

Привет, мир!

Упаковка, 70 байт (ранее 78 1 ):

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

Без упаковки, 77 байт (ранее 89?):

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

Автор утверждает, что самое короткое кодовое слово "Hello World!" составляет 89 байт, но не дает ссылки. Настоящим я также требую запись для этого.

Привет, мир!

Обтекание, 65 байтов (ранее 66 байтов):

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

Это на самом деле также и ручная кодировка (лучшее, что я смог найти, - 68 байтов ). Первая ячейка инициализируется 259 (3) и уменьшается на 7 на каждую итерацию, выполняя цикл 37 раз. Следующая ячейка уменьшается на 6, в результате чего получается 256 - 6 · 37 = 34 . Остальные ячейки уменьшаются на 4 каждый раз, добавляя одну ячейку за каждую итерацию, и каждая новая ячейка инициализируется до 252 (-4). Результат следующий:

[  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 Данное решение (79 байт) может быть тривиально уменьшено на единицу:

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

39
Это чокнутый. Один из вас должен представить 82-байтовую версию в анархии гольф.
Мартин Эндер

117
Лучшее Java-решение этого вопроса - 76 байт. Осталось только 9 байтов, чтобы доказать, что разработчики Java должны перейти на Brainfuck.
Уровень Река Сент-

9
@LevelRiverSt Строчная буква на 2 байта короче, чем Java. Конец времени настал.
Конор О'Брайен

13
«Осталось всего 9 байтов, чтобы доказать, что разработчики Java должны перейти на Brainfuck». interface a{static void main(String[]A){System.out.print("No!");}}
дорукаяхан


222

ArnoldC , 71 байт

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

Просто для LOL ..


4
Работал на меня. Попробуйте поставить это showtime на первой строке, и вы были
прерваны

72
Мне действительно нужно научиться использовать этот язык.
Базз

3
Разве пробел и символ новой строки не занимают одинаковое количество байтов? И технически так IT'S SHOWTIMEи TALK TO THE HANDдолжно быть на первой и последней строчках.
wizzwizz4 29.12.15

5
@AlCode Но это более правильно и занимает то же самое количество байтов, и там больше совместимости, и это выглядит лучше, и почему я делаю суету, это вызов кода для гольфа на PPCG, и удивительно, что ваш код хорошо читается Сделано, вы сделали хороший гольф-ответ, который был читабельным и +1.
wizzwizz4

11
@ wizzwizz4 большое спасибо, я стараюсь быть максимально профессиональным с ArnoldC - языком будущего!
AlCode

204

Семя , 6016 4234 4203 байта

20 854872453003476740699221564322673731945828554947586276010721089172712854441839676581917455319274850944955030258951339804246125714958815519550291630078076933441706558540342671975808828643360922071900333028778314875248417953197990571991784126564752005357199892690656368640420204822142316716413192024742766282266114842280731756458212469988291309261528542889299297601723286769284159107438930448971911102280330101196758384815655479640836157495863547199726234352265518586460633795171196315255736880028338460236768181141732764911402112878175632130129852788301009582463631290071329795384336617491655825493435803011947670180368458659271192428341035912236946048939139042310380278430049252171822721598175984923434205610723412240162418996808671543770639111617709604242882388664919702606792443015941265168129550718541372361144081848761690730764968771245566074501485020726368378675085908872608679630368472956274468410052703615106090238423979678950131481176272880569100533049143775921798055136871254424261001442543122666701145111965968366507060931708140304772342855064834334129143038575569044150428480231956133612367393837580345180691911525531699573096952433882387811884727975431823620782822755161559988205401134640722220804177812794328129589949692446031008866917615922944976151073653201316255518389496411696741029209242119521978920200314572718584995265523235225587228975886710511855501710470163649632761488899317729943053884132314641377747687975638119132094777769497069556255954031537245957811105217875011509899497752696062748928963281605780942517262774976217663461063680912331030221981433051827519906741285738915397005702326447635845195923640649166530310494885569783989508000344280715868581532826832242144647203531393142251025361866506821695860883605004105862208004440476654027574832078603305884731766236740069411566854496824754558761536201352147934963241039597221404341132342297870517293237489233057335406510464277610336142382379135365550299895416613763920950687921780736585299310706573253951966294045814905727514141733220565108490291792987304210662448111170752411153136765318541264632854767660676223663544921028492602135525959428999005153729028491208277493747933069008199074925710651071766675870081314909460661981433426167330215548196538791617762566403934129026219366764038390123622134753742930729751695349588862441999672547791630729398908283091638866715502470152431589429837867944760012419885615525232399584379209285060418518373512154801760060312646951597932345591416241634668119867158079946680321131213357200382937049485606706114467095019612014749723443159443363662563254359712162432143334612180576945072905749883870150120687696027984317320305291407322779803583395375616762530641605634303022155218169343410634115050596030685041633824154135240376022159918501703555881290333205131375705406831260759974112248490451605422031345264183102048614606636275942039438138959188478277971377232005036301145411215067576576667743288951344423152531417111852584846747428443123174595987315325304540564683047858415059703724263652136185848573853965992798725654430360647040362341567082462847275277303225817689141675391972818943419663764371222973269129542760661385278009266471167618553065823580448848795731295589715602705860758954890415040763604082216728159486423396295188510311881004469017351709060492844398219491990895826924575575549615118821417543037296628825303328056839433114519945243963946989899508355224823109677424196639930153649890175062456649384605721510239142861693109687536600667811037619175927995599388547421689316110236566026931360164495251160997857372500940728057700473763884480342708897319990346726967220426504612260565552531158509215849649565188655100774748485416791517853427613458459889062942881409801879085054494129489535044719193283409051007851153504224002807392992520076910314763705776345053922387355156981872691537772657428096384535960466923475731297217863371650154415835785630016335858514130863258775100537612371430357576913148500310344278511588325852376442503898849856566716198848377379400158332792027967216204970114516984638014129252882482309132898416484525230488700253065644547798869056136044415413099076332059572505138116227535024546891015836838323022822272664771489129085797354578016574544759934333471793

Результирующая программа Befunge-98 (основанная на этом )

"9!dlroW ,olleH"ck,@

35
Вау! Как ты это нашел?
ETHproductions

31
Что . Это безумно.
Конор О'Брайен,

47
КАК ВЫ ЭТО ПОЛЬЗУЛИСЬ?
Уничтожаемый лимон

40
Вы перепроектировали твистер Мерсенна? И имеет ли это какие-либо последствия для безопасности?
Примо

68
Я дам вам еще +500 за подробное (теоретическое) объяснение.
Примо

156

Морнингтон Полумесяц , 3614 3568 байт

Спасибо NieDzejkob за сохранение 46 байт с использованием более коротких названий строк.

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

Попробуйте онлайн!

Это, безусловно, неоптимально, но это половина размера решения на esolangs.

Hello, World создается путем нарезки следующих имен станций и объединения результатов:

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

Наконец, я вычисляю код символа !as (2<<4)+1 == 33. Все эти части объединяются в Паддингтоне и, наконец, печатаются в Морнингтонском Полумесяце.

Примечание: язык не определяет, можно ли ездить на одну и ту же станцию ​​дважды подряд, но переводчик разрешает это, поэтому я воспользовался этим.


44
Это абсолютно блестяще : D
бета-распад

32
Я люблю этот язык. Извините, пока я занимаюсь системным программированием на этом языке.
кот

4
Где на ЗЕМЛЕ этот язык был всю мою жизнь?
ScottMcGready

30
@ScottMc Уже между Камден Таун и Юстоном.
Мартин Эндер

3
Морнингтон Кресент сейчас на TIO. tio.run/#mornington-crescent
Деннис

123

зло , 70 байт

aeeeaeeewueuueweeueeuewwaaaweaaewaeaawueweeeaeeewaaawueeueweeaweeeueuw

Он использует следующие четыре команды:

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
Это зло ...
Дэвид Гринберг

61
Тем более, что твой аватар Black Hat.
Доктор

5
Можете ли вы объяснить мне процесс переплетения.
Кишан Кумар

4
@KishanKumar да
GRC

30
Если вы читаете эту программу вслух, она звучит как дабстеп бас.
Джо З.

112

брейкфук, 72 байта

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

Попробуйте онлайн!

И оригинальное 76-байтовое решение без упаковки :

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

Попробуйте онлайн!

Другие кратчайшие (насколько мне известно) решения, которые я нашел

'Привет, мир!' 77 байт:

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

Попробуйте онлайн!

'Привет, мир!' 70 байт:

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

Попробуйте онлайн!


Они были найдены с помощью программы на С ++, которую я написал здесь: https://github.com/ksabry/bfbrute

Примечание. Изначально я хотел очистить этот код перед тем, как опубликовать его, чтобы сделать его более читабельным и удобным для использования, но, поскольку я не нашел его более года, я решил опубликовать его как есть. Он интенсивно использует шаблоны и постоянные времени компиляции для любых потенциальных оптимизаций, и в нем есть закомментированный код из моего тестирования, но нет полезных комментариев, извините, но это немного ужасно.

В коде нет ничего ужасно умного, в его ядре грубая сила, однако он довольно оптимизирован. Основная оптимизация заключается в том, что он сначала выполняет итерации по всем программам без циклов (без [или без ]) до заданной длины (в настоящее время 16) и кэширует массив всех изменений, которые он будет вносить в массив данных. Он будет хранить только одну программу на уникальный массив изменений так, например , только один из >+<<->и <->>+<будет храниться. Затем он перебирает все возможные программы, которые состоят из любой программы в этом кэше с любой комбинацией циклов между ними. После выполнения каждой программы она выполняет простую жадную охоту и клюет на символы и добавляет это в конец программы.

После выполнения этого через пространство всех программ я заметил, что почти все самые короткие программы (до длины ~ 19) были в форме *[*[*]*]. Ограничение поиска программами этой формы значительно ускорило поиск. Текущий держатель записи был найден на длине 27. На самом деле он был рассчитан на длину 74, но я заметил определенную последовательность, .>.>.>.которой посчастливилось иметь 0 в ячейке данных справа, что позволяет упростить его до [.>]<уменьшения до 72

Я позволил этому работать некоторое время и завершил поиск с текущими параметрами до длины 29, я подозреваю, что будет трудно превзойти текущий, просто поднимаясь выше, я думаю, что наиболее многообещающим подходом, вероятно, будет увеличение пространства поиска в какой-то разумный способ.


32
Как на земле вы нашли это?
Деннис

2
@Dennis Я, вероятно, опубликую объяснение своего процесса, когда у меня будет возможность, вместе с исходным кодом, который я использовал (как только я его почистил)
KSab

32
Эй, ты победил Java.
Poke

18
Это какое-то устройство, оно даже не требует обтекания ячеек
primo


84

Пит, 90 кодеков

введите описание изображения здесь

Это изображение 30 на 3. В качестве альтернативы, при размере кода 10:

введите описание изображения здесь

Используется макет с тремя высотами, так что мне нужно указывать только один раз. Если это все еще возможно для игры в гольф, я, вероятно, мог бы побрить самое большее другой столбец, так как там нет никакого опрокидывания без опциона там.

Редактировать: @ primo в 84 коде решения .


6
Пытаетесь взять свою награду? Я думал больше о тебе Sp3000;)
Beta Decay

7
Ха, только потому, что я назначил награду, не значит, что я не могу участвовать в веселье: P
Sp3000

9
Пуш-поп не для меня. Это так .
mbomb007

1
Какого черта этот "язык"? Я люблю это!
Золтан Шмидт

8
«push-pop no-op» теперь моя любимая фраза
BobTheAwesome

82

Стог сена , 17 байт

Стог сена - это двумерный язык программирования, который выполняется до тех пор, пока не найдет иголку в стоге сена |, при выполнении операций на основе стека. Все программы начинаются с верхнего левого угла и могут использовать символы направления ><^vдля перемещения по программе. Направление унаследовано, поэтому вам не нужно продолжать использовать >направление, направление будет меняться только при попадании в другой символ направления.

По умолчанию интерпретатор читает слева направо, поэтому мы можем просто поставить «Hello, World!» на стопку, используйте oдля печати, затем поместите иглу, чтобы закончить выполнение.

"Hello, World!"o|

Бонус: более захватывающая версия:

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

Просто из любопытства, что произойдет, если вы включите один из символов в строку?
Random832

@ Random832 В строке направленные символы рассматриваются как обычные символы, то есть вы можете включить их в строку.
Каде

38
> + о
bjb568

3
Хотелось бы мне быть наполовину таким же умным, как все здесь, но в «документации» (читай: сообщение на форуме какого-то парня) говорится, что oрезультаты выводятся как числа. Разве это не должно быть cв конце? Где-нибудь есть соответствующая документация? Это супер интересно!
Адвокат дьявола

2
@ Скотт Супер поздно, чтобы ответить на это, что сообщение на форуме, вероятно, был я! oвыводит верхний элемент стека как есть, то есть, если число там, оно печатает это. cпросто бросил бы это чарсу. Так что, если у вас есть строка или символ на вершине стека, oэто то, что вы хотите :) В конечном итоге эти документы будут обновлены ..
Kade

70

Помогите, WarDoq! 1 байт

H

Помогает не только WarDoq! есть встроенная функция для наиболее распространенного написания фразы, она даже удовлетворяет нашему обычному определению языка программирования.

Попробуйте это в официальном онлайн-переводчике (код входит в Input ).


7
Итак, HQ9 ++, по сути, а? ;-)
AdmBorkBork

6
@TimmyD Нет, не HQ9 ++ .
Деннис

30
О, за то, что громко плачу. Есть ли что-то, что не является esolang на данный момент? :)
AdmBorkBork

97
"Space: Begin a comment. The next non-space character ends the comment and is interpreted as usual."Таким образом, вы можете сделать комментарии только из пробелов ??? Я полагаю, что даже самый полезный язык в мире должен иметь одну бесполезную особенность +1,
Level River St

29
@steveverrill Может быть, если вкладки также рассматриваются как комментарии, тогда мы можем записать комментарии в виде программ Whitespace
Optimizer

66

MarioLANG , 259 249 242 240 235 байт

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

Это было проверено в реализации Ruby .

После запутывания "Привет, мир!" в MarioLANG я немного изучал игру в гольф. Вышеупомянутое самое короткое, что я нашел до сих пор.

Как и прежде, я начал с решения Brainfuck, которое устанавливает четыре ячейки с ближайшим кратным 10 от символов He,и пробела и преобразовал его в MarioLANG . Затем вы можете немного сократить код, используя вспомогательный пол в цикле, который почти вдвое уменьшает ширину цикла. Обратите внимание, что нижняя часть выполняется только в один раз меньше верхней, поэтому вы больше не получаете точные кратные начального счетчика во всех 4 ячейках.

Наконец, я хотел использовать пустое пространство перед петлей, поэтому я добавил несколько лифтов, чтобы использовать там вертикальное пространство. И тогда я понял, что могу свернуть код после цикла (см. Предыдущую ревизию) под циклом, чтобы использовать больше вертикального пространства, что позволило сэкономить еще пять байтов.

Это, вероятно, еще далеко от совершенства, но я думаю, что это приличное улучшение по сравнению с наивным решением.

Metagolf

Время для некоторой автоматизации ...

Я начал настраивать решатель в Mathematica, чтобы найти оптимальное решение. В настоящее время предполагается, что структура кода является фиксированной: счетчик установлен на 12, 4 ячейки для печати с фиксированным назначением He,<space>и тем же порядком этих ячеек. То, что это изменяется, является числом +s в цикле, а также необходимыми исправлениями впоследствии:

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
 ]

Получается, что для начального счетчика 12 мое решение ручной работы уже оптимально. Однако использование 11 вместо этого сохраняет два байта. Я перепробовал все значения счетчиков от 6 до 20 (включительно) со следующими результатами:

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

Примечание. Этот решатель предполагает, что линейный код после цикла находится в верхней строке, а приведенный выше код - это сложенное решение. Общее решение может быть короче, если решатель узнает о свертывании, потому что теперь я получаю еще 3 +секунды в первой части бесплатно, а следующие 4 инструкции будут стоить всего 1 байт вместо 2.


2
@justhalf Вы должны увидеть мой ответ Pada. : P
Мартин Эндер

Мартин, я люблю этот ответ. Не могли бы вы написать об этом на нашем официальном форуме ? Мы используем то же самое, что и редактор stackexchange. Наша редакция хотела бы добавить его в Staff Picks .
Виталий Кауров

61

Темный , 106 байт

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

Я просто позволю некоторым цитатам из спецификации языка говорить о блеске этого esolang:

Темный - это язык, основанный на манипулировании целыми мирами и измерениями для достижения целей и построения наилучшей мучительной реальности.

Всякий раз, когда возникает синтаксическая ошибка, разумность программы уменьшается на 1. [...] Если здравомыслие программы достигает нуля, интерпретатор сходит с ума.

Коррупция переворачивает один бит в переменной, когда это происходит.

Когда мастер умирает, все переменные слуги, связанные с ним, также умирают. Это полезно для группировки и массового уничтожения переменных.

Заставляет переменную убивать себя, освобождая ее (помните, что она оставит упадок).

Устанавливает переменную в случайное значение. Использует Генератор Глобального Хаоса.

Если сталкер не инициализирован, любые попытки выполнить ввод-вывод приведут к снижению количества сообщений об ошибках, которые будут записаны на консоль.


37
Этот язык такой металлический.
Алекс А.

6
Если бы нам пришлось перечислять языки программирования в порядке зла, Дарк был бы лучшим злом.
LukStorms

35
в аду привет
Халед.К

супер злой, вы даже можете собрать армию ходячих готов
бобробоб

60

Родная весна , 58 байт

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

Задний пробел является значительным.

Позвольте мне рассказать вам историю. Когда-то была электростанция, которая питала близлежащий инкубаторий по выращиванию лосося. В инкубатории для лосося вылупился молодой бездомный лосось, который отправился в путешествие вверх по реке, чтобы найти весну. Он нашел такой источник с поэтическим названием «Привет, мир!», Где он созрел и породил нового молодого лосося. Обе рыбы теперь плавали вниз по течению, в поисках широкого океана. Но в непосредственной близости от устья реки в реке была сеть - зрелая рыба была поймана, и только молодой удалось проскользнуть и достичь океана и остальной части вселенной. Тем временем, в инкубатории вылупилось больше лосося, который также путешествовал вверх по течению и нерестился, и так далее, и так далее.

Однако огромное количество тающего снега путешествовало по другому руслу реки. И сразу после нашего первого молодого лосося из источников "Hello, World!" достиг океана, таяние снега поразило вселенную и ... э-э ... уничтожило его. И они жили долго и счастливо ... или я думаю, что нет.

На самом деле это была семантика вышеуказанной программы. Домашняя весна странная.


15
Это ... странно ...
kirbyfan64sos

10
Я нашел новый любимый разрушитель вселенных на лососе ... э-э ... Я имею в виду "Привет, мир!" программа. +1
ETHproductions

7
Каждый раз, когда я возвращаюсь к этому, я хорошо смеюсь. Спасибо за создание, возможно, самого занимательного Hello, World! программа всех времен.
ETHproductions

2
Это мой новый любимый язык.
Mega Man


59

Шеф-повар , 465 байт

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. Делает алфавитный суп.

Я пытался быть настолько совместимым с оригинальной спецификацией, насколько мог, поэтому, несмотря на то, что используемый мной интерпретатор позволяет вам бросить thes в Pour contentsинструкции, я этого не сделал.

Чаша для смешивания довольно дорогая, так что может быть лучше. Я попытался использовать базовое преобразование для кодирования сообщения, но, к сожалению, в спецификации не уточняется, Divideиспользует ли целочисленное деление или деление с плавающей запятой, а интерпретатор, который у меня есть, использует последнее. Там также нет оператора по модулю, который тоже не помогает.


19
Если кто-то может играть в гольф в Chef, это Sp.
Алекс А.

11
Теперь попробуйте рецепты игры в гольф в реальной жизни. : D
mbomb007

2
Lol, это не только не вкусно поесть, но и использует нестандартные единицы измерения. XD
thepiercingarrow

53

Пит, 84 кодекса

Piet Hello World

28x3, здесь показано с шириной кода 10.

Создано с помощью PietDev , протестировано с помощью npiet . Компоновка программы следующая:

План Пита

Желтая заливка указывает кодеки, где путь перекрывается, оранжевая заливка указывает кодеки, которые должны быть одного цвета, для целей управления потоком.

Чтобы помочь в создании этого, я написал рудиментарный интерпретатор для стекового языка с подобными командам командами, которые я назвал «pasm» ( источник ). Вывод этого интерпретатора (с этим вводом ) следующий:

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

Команды указателя, переключения или прокрутки не используются. Нет кодов также впустую; фактически два используются повторно.


Поздравляю, ты получил мою награду :)
LegionMammal978

@ LegionMammal978 Спасибо, было весело работать. И счастливого Рождества :)
Примо

7
Это то, что Голливуд должен показать на «хакерских» экранах.
Юбер Гжесковяк

50

Пробелы , 192 150 146 байт

Пробелу нужны только пробелы, символы табуляции и перевода строки, тогда как другие символы игнорируются.
Что может быть проблематичным для отображения здесь.
Таким образом, в коде ниже пробелы и вкладки были заменены.
И ';' был помещен перед linefeeds для ясности.
Чтобы запустить код, сначала замените. и> пробелами и табуляцией.

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

Hexdump кода

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

Код сборки пробелов:

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

Примечания:

Я должен был написать программу, чтобы вычислить, что добавление 107 дает оптимальный вариант для предложения. Поскольку размер байта, который принимает целое число в коде, изменяется. : 4 + int (abs (log2 ($ n)))
Код будет по-прежнему выполняться без метки "e:" и выхода из whitespace.kauaveel.ee . Но это может сделать код пробела недопустимым в других компиляторах пробелов. Таким образом, эти байты не были выведены из решения.

Необходимо отметить, что

Как отметил Кевин Круйссен в комментариях, разрешив «выход по ошибке» в соответствии с мета-символом, пробел может быть закодирован до 126 символов.

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

Монтаж:

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

Я знаю, что это было давно, и я вижу, вы упоминаете, что он работает без метки выхода на большинстве компиляторов, но вы можете уменьшить его до 129 байт , выйдя с ошибкой, используя SSN(значение ошибки) вместо SSSN(push 0 ), что разрешено в соответствии с мета . Попробуйте онлайн (с добавлением выделения и пояснений) или попробуйте онлайн .
Кевин Круйссен

@KevinCruijssen Я наконец проверил вашу версию. Это в основном старая версия со сборкой dup jumpz eи e: exitудаленной. Но по крайней мере на whitespace.kauaveel.ee он продолжает работать до тех пор, пока браузер не пожалуется. Я бы предпочел не менять свою версию на это, несмотря на более низкий гольф и метаданные, позволяющие «выйти по ошибке». Но вы можете отправить свою версию в качестве нового ответа.
LukStorms

Нет, я не буду публиковать отдельный ответ. По сути, он такой же, как у вас, только чуть-чуть короче из-за выхода по ошибке. Я также только что понял, что могу уменьшить его до 126 вместо 129, удалив SSNв начале, в этом случае он ошибается с Can't делать Infix Plus, когда в стеке только один элемент (107). ( Попробуйте онлайн. ) Я просто оставлю свой комментарий здесь, когда у кого-то есть такое же предложение. И я думаю, что я уже добавил ваш ответ около года назад. ;)
Кевин Круйссен

1
@KevinCruijssen В этом случае ваше решение было отмечено в ответе. Пробелы - один из самых неожиданных языков для игры в гольф. Но ради экономии байтов стоит упомянуть ваши выводы.
LukStorms

49

Ява, 79

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

Более ранние версии Java могли позволять вам использовать статический блок (51 байт), но в настоящее время я не знаю способа обойти этот mainметод.


7
Используйте enumвместо class.
Томас Эдинг

6
@ThomasEding Какой компилятор на самом деле работает? Я пробовал этот совет на нескольких, и никогда не был в состоянии сохранить байты с ним.
Geobits

4
@ Светящийся Ах, это могло бы сработать на 1.5. Я не собираюсь устанавливать это, чтобы узнать, хотя, но придерживаюсь чего-то выпущенного за прошлые 10 лет. Если я никогда не увижу Java 5 снова, это будет хорошая жизнь :)
Geobits

2
@TheDoctor Из того, что я видел, обработка обычно рассматривается как отдельный язык. Вы должны опубликовать его как ответ или, по крайней мере, попросить разъяснений у ОП.
Geobits

5
Пользователь OptiFine предложил сохранить 3 байта с помощью спецификатора interfaceи исключить его public. Я отверг редактировать следующую политику , но так как они не могут комментировать, я думал , что пусть вы знаете , так что вы можете использовать его , если вам нравится.
Мартин Эндер

48

CSS, 30 байт

:after{content:"Hello, World!"

Каскадные таблицы стилей (CSS) не являются типичным языком программирования, но они могут довольно хорошо фиксировать вывод. Это делается путем создания псевдоэлемента после каждого элемента с содержимым Hello, World!. Таким образом, <html>выбран только один элемент ( ), это предполагает, что мы используем самый простой HTML-документ, т.е.

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

Это работает в большинстве основных браузеров, с заметным исключением Firefox, который применяется селектором к <html>и <body>элементам. Вот почему фрагменты стека не работают, потому что всегда есть элемент body, который также стилизуется. Ниже приведена слегка измененная версия для тестирования.

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


3
Вы также можете использовать * *для выбора body.
jimmy23013

18
@ jimmy23013 Это звучит великолепно неэффективно. Спасибо
NinjaBearMonkey

1
По каким-то причинам, * :afterказалось, также работает.
jimmy23013

12
Я спрашиваю себя, какая из букв в CSS является аббревиатурой для «языка».
Зайбис

10
@zaibis то же самое письмо для PHP, вероятно :)
fcalderan

48

HTML, 13 байт

Hello, World!

Текст автоматически вставляется в <body>и отображается.


159
Ух ты. Вот некоторые действительно хардкорные навыки кодирования
BlueWizard

46
HTML - это не язык программирования, а язык разметки (поэтому он заканчивается на ML).
CoDEmanX

31
Но HTML не печатается в STDOUT.
Харшил Шарма

25
-1 HTML не соответствует требованиям для допустимого языка
Downgoat

123
-1 не хватает jQuery
Валентин Лоренц

45

машинный код x86_64 для Linux, 32 байта

Когда Linux запускает новый процесс, все регистры (кроме RSP) равны нулю, поэтому мы можем получить RAX = 1, только изменив младший байт. X86-64 System V ABI не гарантирует этого, но именно это и делает Linux. Этот код работает только как _startв статическом исполняемом файле.

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

Инструкция call помещает следующий адрес, который содержит строку приветствия, в стек. Мы вставляем адрес строки в rsi.

Затем другие аргументы устанавливаются для syscallto sys_write, который печатает строку.

Программа завершается с syscallдо sys_exit. sys_writeвозвращает количество записанных байтов, поэтому верхние байты RAX равны нулю после первого syscall(если только он не вернул ошибку), поэтому mov al, 60дает нам RAX = __NR_exitтолько в 2 байтах.

Вы можете сделать эту программу segfault, закрыв ее stdout ( ./a.out >&-), поэтому sys_write()она вернется -EBADF, вторая syscallвернется -ENOSYS, а затем выполнение прекратится. Но нам не нужно write()изящно обрабатывать ошибки.


В частности, это работает только в Linux , где __NR_write1. Это не является стандартным для разных систем x86-64 Unix. Вы также зависите от поведения Linux обнуления всех регистров, кроме RSP, перед входом в новый процесс (так что это работает, только если вы создаете его как статический исполняемый файл, в противном случае динамический компоновщик оставит мусор в старших байтах raxи вы '' достану -ENOSYS). ABI System V x86-64 говорит, что регистры могут содержать произвольные значения мусора при входе в систему _start, само ядро ​​Linux выбирает их ноль, чтобы избежать утечек информации.
Питер Кордес

Вы можете сохранить байт с mov al, 1/ mov edi, eax(2 байта), вместо того, чтобы нуждаться в префиксе REX для DIL, потому что__NR_write == STDOUT_FILENO = 1
Питер Кордес

Это работает только в статическом исполняемом файле Linux, поэтому адрес вашей строки гарантированно находится в пределах 2 ГБ виртуального адресного пространства (модель памяти по умолчанию для исполняемых файлов без PIE помещает все символы туда, где их можно использовать в качестве нуля или знака). расширенный 32-битный сразу). Таким образом, вы можете использовать 5-байтовый mov esi, msg(NASM) ака mov esi, OFFSET msg(GAS .intel_syntax) . Поставь свою строку после последней syscall. call/popна 1 байт меньше, чем 64-битный REA-относительный LEA, но лучше всего использовать mov.
Питер Кордес

Источник NASM для 30-байтовой версии (проверенный размер на моем рабочем столе), tio.run/##TY8/…
Питер Кордес,

42

Гексагония , 37 32 байта

Обратите внимание: я буду давать награду в 500 повторений первому человеку, который найдет правильное решение в шестиугольнике с длиной стороны 3 или доказуемо оптимальное решение с длиной стороны 4. Если вы не можете найти такое решение, но мне удастся побить мой результат в 4-х стороннем шестиграннике (получая больше бездействующих в конце программы, которые могут быть опущены в исходном коде), я готов также выделить меньшую награду за это ,

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

Попробуйте онлайн!

Я с гордостью представляю свой второй язык 2D-программирования и (насколько мне известно) первый в истории 2D-язык на гексагональной сетке.

Исходный код не выглядит очень 2D, не так ли? Ну, пробел необязателен в гексагонии. Сначала исходный код дополняется до следующего центрированного гексагонального числа с помощью no-ops ( .). Следующее такое число - 37, поэтому в конце мы вставляем пять операций. Затем исходный код переставляется в обычный шестиугольник:

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

Это также работает. Попробуйте онлайн!

Hexagony обладает множеством довольно прикольных функций, включая 6 различных указателей инструкций и макет памяти, который представляет собой линейный график гексагональной сетки, но этот код использует только один IP и один край памяти, поэтому давайте пока не будем об этом беспокоиться.

Вот обзор соответствующих команд:

  • Буквы просто устанавливают текущий край памяти в их значение ASCII
  • ; выводит текущее значение по модулю 256 в виде байта в STDOUT.
  • / это зеркало, которое ведет себя так, как вы ожидаете (в результате чего IP поворачивается на 120 градусов).
  • Цифры работают так же, как в Лабиринте : они умножают текущую ячейку на 10, а затем складывают себя.
  • @ завершает программу

Теперь последний улов заключается в том, что источник охватывает все 3 пары ребер. Кроме того, если IP покидает сетку через один из шести углов, есть два возможных ряда, к которым можно перейти. Какой из них выбран, зависит от того, является ли текущее значение положительным или не положительным. Следующая аннотированная версия показывает, где IP повторно вводится каждый раз, когда он покидает сетку:

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

Поэтому, если мы удалим все изменения направления, эта программа сводится к следующему линейному коду:

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

Что с Q2, P0а P1? Письма печатаются легко, потому что мы можем просто установить ребро на соответствующее значение. Для запятой, пробела и восклицательного знака, это не работает. Мы также не можем просто установить их значение с 44, когда берется по модулю . Таким образом, мы можем сохранить байт для каждого из этих трех символов. (К сожалению, это никогда не возможно получить с одной цифрой от значения, которое ячейка уже имеет. Забавно, где это32 , 33соответственно, потому что край памяти отлична от нуля , чтобы начать с, и из - за семантики отдельных цифр , которые будут сеять всякого рода опустошения. Если бы мы хотели это сделать, нам пришлось бы сбросить значение ребра до нуля, например,* , +, -, &или ^первым. Однако, поскольку значение берется по модулю 256 перед печатью, нам не нужно устанавливать значения точно на 44, 32 или 33. Например, Q2установим значение ребра равным 81*10 + 2 = 812, что44256 это работа является oв World, потому что это может также быть получен из W9.)

Вы можете использовать этот скрипт CJam, чтобы найти все комбинации букв и цифр, которые приводят к данному символу.

Я не уверен, является ли это оптимальным. Я сомневаюсь, что это возможно сделать в шестиугольнике с длиной стороны 3 (где у вас было бы доступно только 19 символов), но возможно было бы решить это в шестиугольнике с длиной стороны 4 с менее чем 32 командами, например что в конце сетки больше нет операций.


1
Черт возьми, ты меня побил. Я сам работаю над гексагональным языком, похожим на кардинал.
ML

Как вы нашли это решение? От руки или грубой силы? В любом случае +1 :)
Аднан

1
Q2, P0И P1очень умный. Я не знал часть по модулю 256.
Аднан

1
@Adnan Человек, который предложил часть mod-256 на GitHub, на самом деле сделал это вместе с примером того, что перевод строки может быть напечатан как M8;(или g4;), который я использовал с тех пор пару раз. До сих пор мне никогда не приходило в голову вернуться к этому ответу после того, как я внес это изменение.
Мартин Эндер

2
Примечание: это было уменьшено до 31 некоторое время назад. H;e;P;2Q/d;l;r/l;$@;o];o;W;03&;
Митч Шварц

38

Мальболже, 112 байт

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

Я посмотрю, есть ли более короткий. С прошлого раза компьютер стал лучше, поэтому я могу генерировать его немного быстрее.

Для шоу, вот "Hello World!" без запятой.

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

Как насчет этого? ('<;_#"~6Z|{y1UTvt,PrpMo,llj"Fgge{A??P=^t:8&7YtFVqjSQ@PNM)u(I8%$#"D2AA/[TYXQu88MLp3n1Gk.D-ge(92 байта)
dingledooper

37

Фурье , 15 байт

БОЛЬШИЕ ИЗМЕНЕНИЯ в Фурье!

`Hello, World!`

Попробуйте это на FourIDE!

Да, дни печатали в ASCII - коде каждого символа ушли навсегда: Фурье Теперь вроде поддерживает строку. Когда вы заключаете строку в обратные кавычки, эта строка будет выведена.

Обратите внимание, что вы не можете сделать ничего, кроме вывода этой строки: вы не можете сохранить ее в переменной, она не сохраняется в аккумуляторе и нет инструментов для работы со строками.


Здесь вы можете найти крушение поезда, которое было старым Фурье. ;)

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

Попробуйте онлайн!

Некоторые из вас, вероятно, уже встречались с Фурье и могут быть достаточно хорошо знакомы с языком. Весь язык основан на аккумуляторе: глобальной переменной, которую используют почти все операторы.

Наиболее важной частью кода является aоператор. Это берет числовое значение аккумулятора и преобразует его в символ, используя код Python chr(accumulator). Это тогда напечатано в STDOUT.

К сожалению, у меня еще не было возможности использовать Фурье ( подтолкнуть , подмигнуть; ), в основном из-за отсутствия строк и строковых операторов. Несмотря на это, он все еще пригоден для решения многих других задач (см. Раздел примеров на странице EsoLangs).

Обратите внимание, что это короче, чем моя запись в списке Esolangs, потому что я даже не думал, что смогу играть в гольф больше. А потом, когда я писал задачу по игре в гольф на струнах Фурье, я понял, что могу пойти немного короче.

Запись

Если вы задавались вопрос о переменном синтаксисе, Geobits написал программу , которая использует переменные и является такими же длинами:

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

Попробуйте онлайн!


Что можно использовать? Это как годный к употреблению?
CalculatorFeline

35

C-- , 155 байт

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

К сожалению, единственный известный компилятор C - Quick C-- больше не поддерживается. Это боль в шее , чтобы построить, но это возможно ...


8
Действительно захватывающий язык - я никогда не слышал об этом раньше, и это, безусловно, амбициозный проект, который они (были) делают. Но с точки зрения гольф-кода, я не думаю, что это будет соперником. Я имею в виду ... черт, эта штука проигрывает Java ...
AdmBorkBork

11
@TimmyD Это действительно ассемблер. Есть причина, по которой он проигрывает Java ... :)
kirbyfan64sos

У меня есть хорошие новости для вас. Хотя сам проект C-- кажется довольно мертвым, один вариант вполне жив. Компилятор Glasgow Haskell (GHC) использует C-- в качестве заключительного этапа перед сборкой или LLVM, и эта версия все еще активно поддерживается. Не должно быть никаких проблем с его установкой (вместе с остальной частью GHC).
dfeuer

@dfeuer На самом деле я пытался использовать их Cmm-сервер непосредственно раньше, но у меня были некоторые странные проблемы, и я никогда не
задумывался об

Вы, вероятно, можете получить некоторую помощь в списках рассылки Haskell. Попробуйте glasgow-haskell-users@haskell.org или, возможно, haskell-cafe@haskell.org.
dfeuer

33

C 30 байт

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

Довольно ванильно, но я не могу придумать, как обычно скомпилировать способ сделать это немного короче (разве может какой-то трюк с сырым ассамом подойдет?). Тем не менее, побеждает большинство esolangs!


3
Отдельного ответа не стоит, но полностью совместимые с ISO ответы C89 и C99 имеют размер 39 main(){puts("Hello, World!");return 0;}и 53 #include <stdio.h> int main(){puts("Hello, World!");}байта соответственно. Чуть больше, если вы считаете, что main (void) требуется.
Random832,

20
@ Random832: для первого на main(){return!puts("Hello, World!");}два байта короче.
Линн

15
Программа hна 29 байт короче. Примечание: вам придется скомпилировать его, -Dh='main(){puts("Hello, World!");}'я наполовину троллю, наполовину забавляюсь злоупотреблением компилятором.
Матега

19
@matega Это явно обман. Чтобы это не было обманом, вы должны сделать так, чтобы файл содержал только __FILE__(8 байт) и называл файл main(){puts("Hello, World!");}. Тогда это абсолютно не обманывает;)
C0deH4cker

На самом деле, по правилам 2017 года это будет 34 и 38 байт соответственно.
CalculatorFeline

32

Не читается , 843 755 732 666 645 629 577 байт

«„„„“““„„„“““» «„„“ „“ „““» «" „“ „„„“““ „„„“““ „„„“““»" „“ «„„„“““„“„“„„„“““„„„“““„“» «» «„“» «» «„“» «» «„“» «» «„“» «» «„“» «» «„“» «» «„“„“„“» «» «„“» «» «„„““» «„„““» «„„““» "» "«„„““» «„„““» «„„““» «„„““» "" „„„“““ „„„“““ „„„“““ „„„“““ «„„““» «„„““» «„„““» «„„““» «„„““» «„„““» «„„““» «„„““» "» «» «„“» «» «„“» «» «» «» «„“„“„“„“» «» «„„““» «„„““» «„„““» "» "«„„““» «„„““» «„„““» «» «» "" „“ „„„“““ „„„“““ „„„“““ „„„“““ «„„““» «„„““» «„„““» «„„““» «„„““» «„„““» «„„““» «„„““» "» «» «„“» «» «„“» «» «„“» «» "„“" „„„„“„“„“„„„“„“„“„“““„““““«» «» «» «" „“»«"» „“ „“ „“ „„„“““ «" „“ „„„„„“““ „„„“““““»" „“ «"»«»«»«»«„„““»«»«„„„“ „“ „“ „„„“““ „“““»«»«»«»«„„““» «„„““» «» «„„„“““„“„“„“» «»»«» «„“„„„„„“““„„„“““““„„„“““„„„“„“„“„„„“““„“““» «» «» «» «„„““» «» «„„„“„“„“„„„“““„„„“““„“““» «» «„“„“„“"»„“"«» «„“„„„„„“““„„„“““““„„„“““„„„“„“„“„„„“““„“““» «» «» «» «„„““» «» «„„„“„“„“„„„“““„„„“““„“““» «» «„“„“„“"»„“"«» «„„““» «» «„„„“„“„“„„„“““„„„“““„“““» «» «„“„“„“"»„“"«» «„„““» «» «„„„“„“„“„„„“““„„„“““„“““» «» «„“„“„“"»„“"

Предполагается, что нечитаемые программы будут отображаться шрифтом переменной ширины, поэтому они учитывают имя языка. Я немного разочарован тем, что мои более изощренные подходы оказались намного длиннее. Циклы безумно дороги в нечитаемом ...

Попробуйте онлайн!

Как это устроено

Нечитаемый имеет только десять функций; шесть из них используются в этом коде:

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

После использования моей односимвольной записи и добавления пробелов и комментариев приведенный выше код выглядит следующим образом. Многострочные операторы выполняются снизу вверх.

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

Я сгенерировал реальный исходный код, запустив незакомментированную версию вышеупомянутого псевдокода через эту программу CJam .


3
О чем ты говоришь? Это довольно читабельно!
Оптимизатор

19
@ Оптимизатор Исправлено.
Деннис

4
Все еще читабельно! (конечно, я говорю правду. Почему вы мне не верите?)
Оптимизатор

5
Похоже, что этот язык выиграет от лучшего кодирования Хаффмана - как с точки зрения размера, так и нечитаемости.
Примо

30

Befunge 98 , 19 18 Bytes

Новый ответ (из подземного монорельса)

"ck,@!dlroW ,olleH

объяснение

  • " запускает строковый режим
  • Все, что следует, помещается в стек. Стек сейчасHello, World!@,kc
  • После попадания в конец переводчик возвращается к началу
  • Встречается "снова, заканчивая строковый режим
  • 12 помещается в стек ( c)
  • k принимает верхнее значение стека и выполняет следующую команду, указатель команды может видеть это много раз
  • ,извлекает значение из стека и выводит его как символ. Это было выполнено 12 раз последней kинструкцией, и еще один раз, когда интерпретатор фактически читает ,инструкцию
  • @ заканчивает программу

Разница со старым ответом заключается в том, что мы ловко используем "символ повторно , используя циклическое поведение Befunge, когда оно достигает конца строки. Поскольку это может быть менее интуитивно понятно, я позволяю и старому. Кроме того, вы, возможно, заметили, что в стеке все еще будут содержаться некоторые символы ( ck,@) из-за этого приятного трюка, оставляя некоторый беспорядок, если мы когда-нибудь захотим что-то сделать после этого.

Старый ответ

"!dlroW ,olleH"ck,@

Это работает для веселья и befunge 98

объяснение

  • Все между ""помещается в стек. ( 'H'сейчас на вершине.)
  • c (12) помещается в стек
  • k принимает верхнее значение стека и выполняет следующую команду, указатель команды может видеть это много раз.
  • ,извлекает значение из стека и выводит его как символ. Это было выполнено 12 раз последней kинструкцией, и еще один раз, когда интерпретатор фактически читает ,инструкцию
  • @ заканчивает программу

2
Я не думаю, что 93 имеетk
Sp3000

1
Ну, теперь, когда это 98, вы можете использовать только cдля 93+.
PurkkaKoodari

3
В 18:"ck,@!dlroW ,olleH
подземный

1
Он нажимает, "чтобы начать строку, добавляет всю оставшуюся часть строки к этой строке, оборачивает и нажимает то же самое, "чтобы завершить строку. Теперь вся программа, кроме той, "которая была помещена в стек, !dlroW ,olleHсверху. Затем он печатает верхние 12 символов так же, как ваш и останавливается на @.
подземный

1
Для 18-байтового решения мой интерпретатор выдает `Hello, World` (начальный пробел, без восклицательного знака). Переводчик Anarchy Golf (используйте форму, выберите Befunge-98, код вставки, представить) делает то же самое.
Примо

29

JSFuck , 6293 6289 6277 байт

Это может быть упомянуто как один из самых длинных "самых коротких Hello, World!" » (На самом деле я не знаю, является ли это оптимальной, но это самая короткая, которую мне удалось получить).

Предупреждение: работает только в Firefox и Safari

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

Существует также немного более длинная версия (+4 байта), которая также работает в Chrome и Microsoft Edge:

Для тех, кто не знаком с JSFuck, речь идет о написании JavaScript, как если бы было только шесть символов, и иногда он может стать довольно сумасшедшим.

В этой таблице показано, как символы используются в Hello, World! Программа закодирована в JSFuck. Простой текстовый код просто 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                 |
+----------+--------------------------------------+---------------------------+

Вот строки "fill", "fontcolor"и т.д. , должны быть записаны в виде "f"+"i"+"l"+"l", который "f"+"o"+"n"+"t"+"c"+"o"+"l"+"o"+"r"должен быть закодирован.

Глобальные идентификаторы self, atobи btoaпишутся как Function("return self")().

Functionсам должен быть []["fill"]["constructor"].

Запятая ","хитрая, я не уверен на 100%, как она работает, но она использует []["concat"]функцию для создания массива. Я опубликую обновление, когда у меня будет время, чтобы сделать больше тестов.


Я закодировал это, используя JScrewIt - кредит GOTO 0 для создания такого сложного инструмента:

  • Откройте Firefox (Вы можете выбрать любой другой браузер (-ы), но только код Firefox самый короткий.)
  • Перейдите к JScrewIt : http://jscrew.it
  • Входные данные: alert("Hello, World!")
  • Исполняемый код: проверено
  • Совместимость: только этот браузер

Это отличается от моего ответа на этот вопрос наличием запятой после «Привет».

Интересно, что синтаксис ES6

alert`Hello, World!`

требуется еще больше байтов для кодирования (+1500 или около того) из-за более высокой сложности кодирования двух обратных символов, а не ("и ").


Ну, это работает в Chrome на Android
бета-распад

Работает в Chrome на OS X тоже
C0deH4cker

1
Вы проделали большую работу здесь! Обязательно проверьте последнее обновление.
GOTO 0

4
@ GOTO0 Подождите ... вы автор JScrewIt, верно?
я и моя кошка

1
Как, черт возьми, вы вызываете функции с этим?

29

Пада , 83 68 байт

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

Я считаю, что это оптимально для линейной программы (то есть той, которая не использует операторы потока управления ?и *). В целом это может быть оптимально, но я не знаю, как использовать эти дополнительные операторы в таком небольшом объеме кода (или как исследовать возможности программно).

Язык недавно претерпел некоторые изменения после того, как я начал обсуждать его с автором по электронной почте. Однако на прошлой неделе я написал эталонную реализацию текущего состояния языковой спецификации, поэтому приведенный выше код действительно работает.

Metagolf

Первоначально я использовал результаты своей эталонной реализации для решения этой задачи и создал на этой основе решение, созданное вручную. Однако это был просто эвристический подход.

Поэтому вместо этого я написал решатель в Mathematica, который на самом деле знает о структурах данных и операторах Pada, чтобы найти оптимальное решение. В среднем он растет линейно с длиной строки (хотя некоторые комбинации символов немного медленнее других) и занимает около 1,5 часов Hello, World!.

Так, как я пошел о написании решателя. Во-первых, мы заметили, что нам нужно рассмотреть только 6 операторов: ~.oOqQ(плюс необходимые wдля каждого из напечатанных символов). Использование стеков или битовых блокировок бесполезно в линейном коде, и я не верю этому, ?и его *можно эффективно использовать менее чем в 68 байтах.

Состояние Pada (без учета стеков и блокировок) состоит из 7 переключателей и 8 битов, расположенных следующим образом:

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

Так что это возможные состояния. Мой первый шаг предварительной обработки состоял в том, чтобы установить ориентированный граф состояний, где каждое ребро соответствует одной операции. Таким образом, граф имеет 32768 вершин, каждая из которых имеет степень превышения 6 (по одному исходящему ребру для каждой из 6 рассматриваемых операций). Мы можем использовать этот график, чтобы найти кратчайший путь между любыми двумя состояниями (сам этот график может быть весьма полезен для игры в гольф Pada).215 = 32768

Теперь для каждого символа мы хотим достичь состояния, в котором wпечатается этот символ. Сколько таких штатов? wчитает байт из бита, на который он сброшен (циклически). Таким образом, есть 8 возможных поворотов битов символа, которые могут все печатать этот символ. Для каждого из этих вращений установлены три переключателя (чтобы сделать wпадение в правильном положении). Это оставляет 4 произвольных переключателя. Таким образом, у нас есть возможные состояния для каждого в нашем коде.8 * 24 = 128w

С их помощью мы можем решить еще одну проблему с графом: построить граф с исходной вершиной, затем одним «слоем» для каждого символа и вершиной-приемником. Слои состоят из 128 состояний для каждой вершины, исходный узел соответствует начальному состоянию программы (все переключатели влево и все биты равны нулю). Узел приемника, в частности, не соответствует ни одному состоянию. У нас есть направленные ребра от каждой вершины в одном слое до каждой вершины в следующем слое, где вес ребра - это расстояние между двумя состояниями в нашем предыдущем графе. Все веса ребер от последнего слоя до приемника равны 0. То есть мы можем предварительно вычислить все эти веса ребер. Это самый дорогой этап вычислений, который занял 1,5 часа Hello, World!.

С помощью этого графика мы можем довольно быстро найти кратчайший путь от источника до приемника (на моей машине это заняло 0,05 с). Для Hello, World!желаемых состояний есть:

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

где младшие 7 битов соответствуют коммутаторам, а старшие 8 битов - битам Пады.

Теперь мы вернемся к первому графу и найдем фактические ребра (то есть операции), соответствующие кратчайшему пути между каждой парой последующих состояний, и завершим каждое из них знаком a w. Вуаля, оптимальное решение (на основе вышеуказанных предположений).

Вот полный Mathematica, если кто-то хочет метагольфить другую строку в 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]) <> ""

Интересный язык, чтобы сделать метагольф на =). Это заставляет меня задуматься, какая у тебя дневная работа? oO
полугодие

4
@justhalf Сейчас я нахожусь в подвешенном состоянии между степенью магистра и аспирантурой (так что у меня определенно слишком много времени у меня на руках, если бы это было вашим намерением;)). (Это, как правило, больше дискуссия для чата :))
Мартин Эндер

Пада означает, когда в Бахасе Индонезия / Малайский. Это актуально?
XiKuuKy

@XiKuuKy afaik, язык называется Pada, потому что это означает «падение» на хорватском языке.
Мартин Эндер,

И этот ответ (см. Здесь ). Вы, вероятно, можете объединить 2 ответа в одном, чтобы описать эту замечательную проблему Hello World в целом.
Виталий Кауров
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.