задача
Создайте программу или функцию, которая действует на нескольких языках программирования, и при компиляции / интерпретации как другой язык выдает «Hello, World!» на другом естественном языке.
Например, допустимое решение может выводить Hello World!
(английский) при компиляции и запускать как C, Hallo Welt!
(немецкий) при компиляции и запускать как C ++ и 你好世界!
(китайский) при запуске как Python.
правила
Чтобы избежать двусмысленности относительно правильности ответа, ниже приведен список разрешенных версий фразы на нескольких языках. Список состоит из фразы на языках, для которых Google Translate имеет проверенный сообществом перевод фразы (на момент написания статьи). *
Точность этих переводов спорна, но именно они будут использовать этот вызов. Напечатанные строки должны точно соответствовать указанному ниже формату (за исключением начальных или конечных пробелов).
Afrikaans: Hello Wêreld!
Albanian: Përshendetje Botë!
Amharic: ሰላም ልዑል!
Arabic: مرحبا بالعالم!
Armenian: Բարեւ աշխարհ!
Basque: Kaixo Mundua!
Belarussian: Прывітанне Сусвет!
Bengali: ওহে বিশ্ব!
Bulgarian: Здравей свят!
Catalan: Hola món!
Chichewa: Moni Dziko Lapansi!
Chinese: 你好世界!
Croatian: Pozdrav svijete!
Czech: Ahoj světe!
Danish: Hej Verden!
Dutch: Hallo Wereld!
English: Hello World!
Estonian: Tere maailm!
Finnish: Hei maailma!
French: Bonjour monde!
Frisian: Hallo wrâld!
Georgian: გამარჯობა მსოფლიო!
German: Hallo Welt!
Greek: Γειά σου Κόσμε!
Hausa: Sannu Duniya!
Hebrew: שלום עולם!
Hindi: नमस्ते दुनिया!
Hungarian: Helló Világ!
Icelandic: Halló heimur!
Igbo: Ndewo Ụwa!
Indonesian: Halo Dunia!
Italian: Ciao mondo!
Japanese: こんにちは世界!
Kazakh: Сәлем Әлем!
Khmer: សួស្តីពិភពលោក!
Kyrgyz: Салам дүйнө!
Lao: ສະບາຍດີຊາວໂລກ!
Latvian: Sveika pasaule!
Lithuanian: Labas pasauli!
Luxemburgish: Moien Welt!
Macedonian: Здраво свету!
Malay: Hai dunia!
Malayalam: ഹലോ വേൾഡ്!
Mongolian: Сайн уу дэлхий!
Myanmar: မင်္ဂလာပါကမ္ဘာလောက!
Nepali: नमस्कार संसार!
Norwegian: Hei Verden!
Pashto: سلام نړی!
Persian: سلام دنیا!
Polish: Witaj świecie!
Portuguese: Olá Mundo!
Punjabi: ਸਤਿ ਸ੍ਰੀ ਅਕਾਲ ਦੁਨਿਆ!
Romanian: Salut Lume!
Russian: Привет мир!
Scots Gaelic: Hàlo a Shaoghail!
Serbian: Здраво Свете!
Sesotho: Lefatše Lumela!
Sinhala: හෙලෝ වර්ල්ඩ්!
Slovenian: Pozdravljen svet!
Spanish: ¡Hola Mundo! // Leading '¡' optional
Sundanese: Halo Dunya!
Swahili: Salamu Dunia!
Swedish: Hej världen!
Tajik: Салом Ҷаҳон!
Thai: สวัสดีชาวโลก!
Turkish: Selam Dünya!
Ukrainian: Привіт Світ!
Uzbek: Salom Dunyo!
Vietnamese: Chào thế giới!
Welsh: Helo Byd!
Xhosa: Molo Lizwe!
Yiddish: העלא וועלט!
Yoruba: Mo ki O Ile Aiye!
Zulu: Sawubona Mhlaba!
Таким образом, есть 74 языка, которые можно использовать.
Критерий победы
Решение, которое может выводить фразу на наибольшем количестве языков, выигрывает. В случае ничьей выигрывает более короткое решение (в байтах).
* Переводы на малагасийский и мальтийский были помечены проверенными сообществом, но были явно неправильными (один был просто «Hello World!», А другой «Hello dinja!», Но только «Hello!» Переводится как «Бонгу!»). Они были исключены. Также некоторые языки (арабский, иврит, пушту, персидский и идиш) читаются справа налево в переводчике Google, но при копировании здесь читаются слева направо. Я надеюсь, что все в порядке.
!
, U + FF01) отличаются от других (!
, U + 0021).Ответы:
23 Befunges, 713 байтов
Единственный язык, который я действительно знаю, это Befunge, поэтому вместо нескольких языков я просто выбрал несколько реализаций Befunge. Я считаю, что это все еще действует в соответствии с правилами PPCG, которые считают, что язык будет определяться его реализацией .
Разочарование в Befunge состоит в том, что хотя существует эталонная реализация с открытым исходным кодом, а сам язык очень прост, нет ни одного стороннего интерпретатора (который мне известен), который бы точно соответствовал эталонному поведению. Каждая реализация терпит неудачу по-своему.
С другой стороны, это дает нам возможность разработать отдельный фрагмент кода, который будет давать разные результаты практически для каждого интерпретатора. И это то, что я пытаюсь в программе выше.
Если кто-то заинтересован в проверке результатов, я попытался сгруппировать различные реализации по категориям в зависимости от того, насколько легко их запустить и запустить (например, некоторые люди могут не иметь возможности запускать двоичные файлы Windows или могут не захотеть сборка из исходного кода, но каждый должен иметь возможность протестировать онлайн-переводчиков).
Онлайн переводчики
Установка не требуется. Обычно это просто вставка в код и нажатие кнопки или двух. Но обратите внимание, что некоторые из них довольно медленные, поэтому может потребоваться некоторое время, чтобы закончить выполнение.
Детская площадка Alexios 'Befunge - Саламу Дуня!Нажмите Clear...кнопку и вставьте код в поле ввода. Переключите Editпереключатель, чтобы активировать переводчик, а затем нажмите Runкнопку, чтобы начать выполнение.
Бефунгус - Моло Лизве!Обратите внимание, что этот сайт, вероятно, не будет работать в браузере, кроме Chrome.
Вставьте код в поле ввода, убедившись, что перезаписать существующий код. Затем нажмите Runкнопку, чтобы выполнить.
Переводчик Дэвида Клика Befunge 93 - Санну Дуния!Вставьте код в поле ввода Playfield , а затем нажмите Runкнопку, чтобы начать выполнение.
Переводчик Яна Осгуда Befunge-93 - Салют Люме!Вставьте код в поле ввода под Showкнопкой, убедившись, что перезаписали
jsFunge IDE - Хей Верден!@
уже существующее. Нажмите Showкнопку, чтобы импортировать код, затем нажмите Runкнопку, чтобы начать выполнение.Сначала закройте диалоговое окно « Справка », затем нажмите кнопку панели инструментов « Открыть / импортировать» (вторая слева), вставьте код и нажмите OK. Для выполнения нажмите кнопку « Run Mode» (четвертый слева), а затем « Start» (пятый слева).
Также обратите внимание, что некоторые консольные интерпретаторы фактически доступны в TIO, поэтому, хотя они не являются технически онлайн-переводчиками, их можно тестировать онлайн. Для тех, кто поддерживается (в настоящее время BEF, FBBI, MTFI и PyFunge), я включил пробную версию онлайн! ссылка рядом с их записью.
Java IDE
Для этого вам нужно установить среду выполнения Java, но теоретически они должны работать на любой платформе. Только проверено на Windows, хотя.
Визуальный апплет Эшли Миллс - Moien Welt!Первоначально это был онлайн-апплет, который, к сожалению, больше не доступен, но вы все равно можете скачать jar и запустить его локально, как настольное приложение. Вам нужно будет вставить код в окно редактора программ , затем нажать Convertкнопку, а затем Runкнопку.
ВАСАБИ: Васаби - великолепно асининский переводчик - привет привет !Чтобы вставить код, щелкните правой кнопкой мыши в верхнем левом углу окна редактора (он должен находиться в самом верхнем левом углу) и выберите пункт меню « Вставить» . Затем включите флажок « Полная скорость» (в противном случае это займет вечность) и нажмите Run!кнопку, чтобы начать выполнение.
YABI93: еще один переводчик Befunge93 - Halo Dunia!Нажмите Ctrl+ A, Ctrl+, Vчтобы вставить код в окно редактора, обязательно перезаписав источник по умолчанию. Затем нажмите Startкнопку, чтобы начать выполнение.
Windows IDE
Обычно для этого вам понадобится Windows, хотя в некоторых случаях могут быть доступны двоичные файлы для других операционных систем. Я не могу обещать, что код будет работать на других платформах.
BefunExec - Привет, мир!Вы не можете вставить код в редактор, поэтому сначала вам нужно сохранить его где-нибудь на диск. Затем из среды IDE используйте меню « Файл»> «Открыть», чтобы загрузить код с диска, и выберите меню « Моделирование»> «Выполнить / Пауза», чтобы запустить его.
BeQunge - Лабас пасаули!Нажмите Ctrl+, Vчтобы вставить код, а затем нажмите кнопку « Отладка» на панели инструментов (синий значок), чтобы начать выполнение. Как только появится панель « Отладчик» , вы захотите установить максимальную скорость ( кнопка справа от ползунка), в противном случае для ее завершения потребуется целая вечность.
Грибок - тере маалм!Нажмите Ctrl+, Vчтобы вставить код, а затем нажмите, F5чтобы запустить его.
Visbef: Visual Befunge '93 для Windows - Привет, оборотень !Вы не можете вставить код в редактор, поэтому сначала вам нужно сохранить его где-нибудь на диск. Затем в IDE нажмите Ctrl+, Oчтобы открыть браузер файлов, загрузите код с диска и нажмите, F5чтобы запустить его.
Консольные приложения Windows
Опять же, они обычно требуют Windows, хотя другие платформы могут быть доступны, но не гарантированно работать.
Во всех случаях код должен быть сохранен в файл на диске, а имя файла передается интерпретатору в качестве параметра командной строки ( source.bf в приведенных ниже примерах командных строк). Также обратите внимание, что некоторые из них являются технически интерпретаторами Befunge-98 и должны запускаться с определенной опцией командной строки, чтобы включить режим совместимости с Befunge-93. Если вы этого не сделаете, вы не получите правильные результаты.
BEFI: переводчик Rugxulo Befunge-93 - Привет, Верден!Командная строка:
CCBI: Соответствующий параллельный переводчик Befunge-98 - Sveika pasaule!bef93w32 -q source.bf
Командная строка:
MTFI: переводчик Magus Technica Funge - Hai dunia!ccbi --befunge93 source.bf
Командная строка:
mtfi -3 source.bf
( Попробуйте онлайн! )Консольные приложения Python и PHP
Для этого требуется соответствующий язык сценариев - Python или PHP.
Befungee - Helo Byd!Командная строка:
PyFunge - Halo Dunya!befungee.py source.bf
Командная строка:
Bephunge - Bonjour Monde !pyfunge -v 93 source.bf
( Попробуйте онлайн! )Командная строка:
php bephunge.phps source.bf
Консольные приложения только для исходного кода
Они должны быть собраны из исходного кода, и это обычно проще всего в * nix-подобной среде. В Windows я использую подсистему Windows для Linux .
BEF: Справочное распределение Befunge-93 - Ciao mondo!Командная строка:
cfunge - Савубона Мхлаба!bef -q source.bf
( Попробуйте онлайн! )Командная строка:
FBBI: Flaming Bovine Befunge-98 Intepreter - Привет, маайлма!cfunge -s 93 source.bf
Командная строка:
Грибы - Kaixo Mundua!fbbi -93 source.bf
( Попробуйте онлайн! )Командная строка:
Rc / Funge-98 - Салом Дуньо!fungi source.bf
Командная строка:
rcfunge -93 source.bf
Как это устроено
Проблема с этим заключалась в том, чтобы найти наименьшее количество тестов, обеспечивающих наибольшую разницу между переводчиками. В итоге дело дошло до четырех основных последовательностей испытаний:
Первый - это чтение памяти за пределами допустимого диапазона со смещением -1,1. Теоретически это всегда должно возвращать 32 (пробел ASCII), но на практике было 10 вариантов. Этот тест усложняется тем фактом, что два интерпретатора дают сбой при чтении за пределами границ, поэтому для принудительного возврата этих двоих в границы потребовалась пара специальных тестов (округление деления и пробел).
Вторая последовательность - это проверка работоспособности Befunge-98, в частности, инструкций
;
и'
. Почти все переводчики - Befunge-93 или работают в режиме совместимости с Befunge-93, поэтому они должны просто игнорировать эти инструкции. На практике было 6 различных способов интерпретации этой последовательности.Третий тест проверяет диапазон ячеек памяти. В эталонном интерпретаторе ячейки памяти подписаны 8-разрядными, но другие реализации варьируются в диапазоне от 8-разрядных до неограниченных, некоторые подписаны, а некоторые - без знака. Однако для целей этого теста нам нужно было только различить 5 из этих вариантов.
Четвертая и последняя последовательность представляет собой комбинацию тестов недостаточного и отрицательного деления. Существует несколько способов, с помощью которых интерпретаторы неправильно понимают недополнение, и существует по крайней мере 3 различных способа реализации команд деления и по модулю, но здесь мы заботились только о 3 комбинациях.
Каждая из этих последовательностей возвращала одно число, и эти четыре числа были объединены (с помощью некоторых базовых арифметических таблиц и таблиц перевода) для получения окончательного значения в диапазоне от 0 до 22. Затем это значение можно использовать в качестве индекса для поиска фактического сообщения. для отображения.
источник
3y
).16 языков, 1363 байта
Попробуйте онлайн!
(используйте «переключение языков» для изменения языка)
Питон 3 = Halo Dunia! (Индонезийский)
Python 2 = Хей Верден! (Датский)
Питон 1 = Хай Дуня! (Малайский)
C (GCC) = Helo Byd! (Валлийский)
C ++ (gcc) = Halo Dunya! (Сунданский)
Цель C (лязг) = Привет Welt! (Немецкий)
Brainfuck = Привет, мир! (Очевидно, английский)
Befunge-93 = Салют Люм! (Румынский)
Рубин = Мойен Вельт! (Люксембургский)
Баш = Салом Дуньо! (Узбекский)
Befunge-98 (PyFunge) = Kaixo Mundua! (Басков)
Unefunge-98 (PyFunge) = Санну Дуния! (Хауса)
Кардинал = Привет! (Нидерландский язык)
Альфак = Чао Мондо! (Итальянский)
> <> = Мони Джико Лапанси! (Чичева)
Деление = Поздрави свиете! (Хорватский)
Любые советы по игре в гольф приветствуются (особенно на Brainfuck)!
Спасибо @JonathanFrech за -1 байт! Также спасибо @ovs за -40 байтов!
Как (общие идеи, я на самом деле забыл конкретику) ??
Языки можно разделить на четыре группы:
Языки макросов рассматриваются
#
как начало директивы препроцессора. Они используются по трем причинам: для размещения кода для других групп, для различения языков макросов и для определения макроса. Все три используются в//
качестве комментариев, поэтому после этого мы храним код для других групп. Также обратная косая черта продолжает комментарий на этих языках.Языки комментариев видятся
#
как начало комментария. Причудой здесь являются тройные кавычки, которые отличают Питонов от Руби от Баша. И чтобы отличить Python 1 от 2 от 3, мы используем отличительную особенность во всех трех, а также массив выходных данных. Ах да, есть и это__END__
. Это используется для завершения кода для некоторых (не помню точно, какие именно) языков комментариев.Пространственные языки различаются так, что их трудно объяснить. Нужно знать специфику каждого языка, чтобы понять это. Например,
#
это только пропуск в фунгеоидах, в то время как он делает разные вещи на других языках. Код разбросан повсюду для этих языков.И наконец, мы приходим к вульгарным языкам. Эти двое игнорируют все, что не входит в их набор допустимых символов. Необходимо выполнить балансировку с этими и другими языками, так как код уже содержит символы в наборах символов.
источник
"abcabcabc"[n::3] -> "aaa" for n = 0, "bbb" for n = 1
. Я чувствую, что, возможно, есть способ нарезать его и сохранить байты, как-то включив дублированные символы в срез (например, H и!).["Hai dunia!","Hej Verden!","Halo Dunia!"]
щите запятые!+[++[<+++>->+++<]>+++++++]<<<--.<.<--..<<---.<+++.<+.>>.>+.>.>-.<<<<+.
свою часть BF? ( источник )15 языков, 532 байта
Попробуйте онлайн!
Kaixo Mundua!
в Befunge-93Hej Verden!
в деленииTere maailm!
в Unefunge-98Hei maailma!!
в Befunge-98Hai dunia!
в> <>Hola món!
в рубинеHola Mundo!
в GolfScriptHallo Welt!
в башNdewo Ụwa!
в кшCiao mondo!
в спешкеMoien Welt!
в зшHei Verden!
в пеплеOlá Mundo!
в кардиналHello World!
в мозгах, любезно предоставлено primo .Helo Byd!
в пробелахобъяснение
Строка 1 различает пять двумерных эсолангов:
><>
читает#
как зеркало, оборачивается влево, печатает"Hai dunia!"
и вылетает (@
). Все Веселья читают это как батут и идут прямо.;
, печатаетKaixo Mundua!
и выходит (@
).;
на второе, затем с третьего;
на четвертое.w
это NOP для Befunge-98, печатьHei maailma!
.w
отражает указатель инструкции в Unefunge-98, печатаяTere maailm!
.R"Hej Verden!";
выполнен. (Другой указатель инструкции начинается сD
in__END__
, но он ничего не делает, затем умирает для;
intrue;
.)Руби видит
`true #{puts'Hola món!'}`
, тогда__END__
.GolfScript видит
`
, затемtrue
(NOP), затем комментарий; затем__END__
(NOP); затем"Hola Mundo!" puts
(это выполняется); затемcase
(NOP), затем`
(вылетает при пустом стеке).Оболочки видят комментарий, затем вызов
true
(NOP), затем вызовы неизвестных команд__END__
и"Hola Mundo!"
(какая ошибка для STDERR, но выполнение продолжается), затемcase
оператор, который различается на основе первой буквы имени текущего процесса.Cardinal - это еще один двумерный esolang, который начинается с
%
отправки 4 IP-адресов вверх, вниз, влево и вправо. Они все убиты окружающимиx
командами, но один печатает"Olá Mundo!"
перед смертью.Код брейкфак - это примо, с префиксом,
++
чтобы противодействовать тиреps -p$$ -oargs=
.Пробелы в моем коде выполняются как программа пробелов
какие отпечатки
Helo Byd!
РЕДАКТИРОВАТЬ : я забыл, что добавление
UDLR
символов нарушает программу Fission, поэтому я изменил строки, чтобы избежать этого.источник
#define
не вещь в D ... которая мешает многоплановости). Кроме того, мне действительно нужно учить пробелы.4 языка, 75 байтов
Python -
Hai dunia!
Perl -
Helo Byd!
Рубин -
Hola món!
Хейстек -
Hej Verden!
источник
7 языков, 221 байт
Так как эта программа содержит несколько неприятных символов, вот xxd:
Përshendetje Botë!
- попробуйте онлайн!Hallo Wereld!
- попробуйте онлайн!ሰላም ልዑል!
- попробуйте онлайн!Hello Wêreld!
- попробуйте онлайн!Kaixo Mundua!
- попробуйте онлайн!مرحبا بالعالم!
- попробуйте онлайн!Բարեւ աշխարհ!
- попробуйте онлайн!источник
<?='مرحبا بالعالم!';die?>
? Это действительный PHP (по сути, такой же, как<?php echo ... ?>
),5 языков, 168 байт
Я думаю, что двумерные языки интересны.
> <> принты
Tere maailm!
Befunge-98 принты
Hej Verden!
пчелиный воск принты
Sawubona Mhlaba!
кардинальные принты отпечатки
Helo Byd!
деления
Hello World!
Попробуйте онлайн! (Кардинал)
источник
//
есть комментарии на многих языках.*/\_
и могут быть перенаправлены в фиксированных направлениях или с помощью зеркал или поворота. Смотрите здесь для получения дополнительной информации.;
после второго обратного удара не требуется. Пчела просто бежит от соты вправо.2 языка, 16 символов, 24 байта
Ну, по крайней мере, это короче, чем обе строки.
05AB1E -
שלום עולם!
Помогите, WarDoq! -
Hello World!
Помогите, WarDoq! Можно добавить два числа и проверить на простые числа, поэтому он считается допустимым языком программирования для этой мета-записи .
источник
3 языка,
6762 байтаЧтобы претендовать на эту награду (100 респ).
Добавить ++: Попробуйте онлайн!
Foo: попробуйте онлайн!
Сомма: попробуйте онлайн!
объяснение
Добавить ++
Add ++ видит:
«Выходная
x
строка»«Установите y в другую строку»
"Иди что-нибудь странное, я выведу ошибку"
Foo
Фу видит:
«О, цитаты, я выведу их».
"Э-э ... что-то о режиме? Идк, я выведу ошибку".
Сомма
Сомма видит, ну, это:
Каждый столбец преобразуется в кодовые точки, затем из них вычитается 32, затем каждый берется по модулю 95. Это соответствует этим символам, которые печатают «Hei Verden!»
источник
4 языка, 138 байтов
Попробуйте онлайн!
Py1, Py2, Py3, Proton; спасибо мистеру Xcoder; переведено из ответа Захари
источник
4 языка, 115 байт
Perl 5 дает
Hallo Wereld!
- TIOРуби дает
Hello World!
- TIOPython 2 дает
Hej Verden!
- TIOPython 3 дает
Hei Verden!
- TIOисточник
print (((“b”+”0"==0)and eval('"Hallo Wereld!"'))or(0and"Hello World!”or((1/2and"Hei"or"Hej")+" Verden!")));
Четыре языка, колоссальные 650 байтов
Ява дает "Салют Люм!" Попробуй!
СИЛОС дарит "Хола Мундо" Попробуйте!
Brainfuck дает "Ciao Mondo!" Попробуй!
(Код alphuck изменен со страницы Esolangs в Alphuck )
Alphuck дает "Hello World!" Попробуй!
Начало строки \ u000A - это код Java. Код в первой строке - это код Alphuck, который игнорирует остальную часть кода (до тех пор, пока "p" и "s" сбалансированы. Соответствующей строкой для SIL / SILOS является "print Hola Mundo", а также код brainfuck находится в конце и будет игнорировать остальную часть кода.
источник
+>++>+>+++[+++++[>+++++++++++>++++<<-]+++<]>>--.>+.>.>-.>.<--.++.-.<+++.>+.>+.
Использование последовательности байтов [69, 104, 97, 112, 32]5 языков, 213 байтов
Я решил попробовать написать небольшой ответ сам.
Языки:
C и C ++ видят код как:
auto i=.5;
(в действительности) равенint i=0;
в C, но равенdouble i=0.5;
в C ++.Попробуйте онлайн! (как С)
Попробуйте онлайн! (как C ++)
Python 3 видит код как:
Попробуйте онлайн!
Язык сценариев OFP видит:
Деление видит:
Попробуйте онлайн!
источник
3 языка,
184181 байтРаботает только один раз - вы должны очистить список, чтобы запустить его снова.
Царапина 1.4:
Helo Byd!
Скретч 2.0:
Hello world!
Скретч 3.0 бета на момент ответа:
Hai dunia!
объяснение
В Царапина 1.4, добавив булево к списку добавляет
1
или0
, но в версии 2.0 и выше он добавляетtrue
илиfalse
, но при проверке , если элемент равен1
с <[] = []>, она возвращает истину , если элемент либо1
илиtrue
поэтому мы добавляем еще одно письмо и проверяем это.В Scratch 3.0 максимальный размер списков составляет 200 000 элементов, поэтому мы просто добавляем несколько элементов и проверяем, не слишком ли длинный список.
источник
3 языка, 61 байт
Добавить ++ выходы
Hai dunia!
Желе выходы
Hello World!
Foo выходы
Helo Byd!
То, что я назначил награду, не означает, что я не могу принять участие: D (ab) использует блестящий трюк с настройкой струн, который нашел Конор для Add ++
Как это устроено
Добавить ++
Желе
Комментарии в Jelly могут быть сформированы с помощью синтаксиса
ḷ“comment”
, так как код Add ++ и Foo игнорируется. Код, который фактически выполняется Jelly,Foo
Foo игнорирует все символы здесь, кроме
"Helo Byd!"
, которые, как и в кавычках, выводятся.источник