23 Befunges, 713 байтов
Единственный язык, который я действительно знаю, это Befunge, поэтому вместо нескольких языков я просто выбрал несколько реализаций Befunge. Я считаю, что это все еще действует в соответствии с правилами PPCG, которые считают, что язык будет определяться его реализацией .
8023/# !-1401p680p88+79*6+1p238*7+0pg90p$#v0';1';+>9%80p$$$$"ph~s"+3vv
vv_2#!>#-/\#21#:+#:>#\<0/-2*3`0:-/2g01g00p>#< 2#0 ^#1/4*:*9"9"p00***<<
>>$:2%3*-4/3g68*-70p1-0`02-3/-03-2%1+2/-70g+80g65+70g`7++3g68*-70g9`*v
0168:0>0133?45130120340200v00:<+8*+76%4p00+5/4:+-*86g3++98/2%+98g09+<<
@>gg#^:#+,#$"!"-#1_@
!Helo Byd!!!!!Hai dunia!!!!Ciao mondo!!!Hallo Wereld!!!!
!Hallo Welt!!!Halo Dunia!!!Halo Dunya!!!Bonjour monde!!!
!Hei Verden!!!Hej Verden!!!Moien Welt!!!Labas pasauli!!!
!Molo Lizwe!!!Salut Lume!!!Hei maailma!!Sveika pasaule!!
!Hello World!!Salom Dunyo!!Tere maailm!!Sawubona Mhlaba!
!Kaixo Mundua!Salamu Dunia!Sannu Duniya!!!!!!!!!!!!!!!!!
Разочарование в Befunge состоит в том, что хотя существует эталонная реализация с открытым исходным кодом, а сам язык очень прост, нет ни одного стороннего интерпретатора (который мне известен), который бы точно соответствовал эталонному поведению. Каждая реализация терпит неудачу по-своему.
С другой стороны, это дает нам возможность разработать отдельный фрагмент кода, который будет давать разные результаты практически для каждого интерпретатора. И это то, что я пытаюсь в программе выше.
Если кто-то заинтересован в проверке результатов, я попытался сгруппировать различные реализации по категориям в зависимости от того, насколько легко их запустить и запустить (например, некоторые люди могут не иметь возможности запускать двоичные файлы Windows или могут не захотеть сборка из исходного кода, но каждый должен иметь возможность протестировать онлайн-переводчиков).
Онлайн переводчики
Установка не требуется. Обычно это просто вставка в код и нажатие кнопки или двух. Но обратите внимание, что некоторые из них довольно медленные, поэтому может потребоваться некоторое время, чтобы закончить выполнение.
Детская площадка Alexios 'Befunge -
Саламу Дуня!
Нажмите Clear...кнопку и вставьте код в поле ввода. Переключите Editпереключатель, чтобы активировать переводчик, а затем нажмите Runкнопку, чтобы начать выполнение.
Обратите внимание, что этот сайт, вероятно, не будет работать в браузере, кроме Chrome.
Бефунгус -
Моло Лизве!
Вставьте код в поле ввода, убедившись, что перезаписать существующий код. Затем нажмите Runкнопку, чтобы выполнить.
Переводчик Дэвида Клика Befunge 93 -
Санну Дуния!
Вставьте код в поле ввода Playfield , а затем нажмите Runкнопку, чтобы начать выполнение.
Переводчик Яна Осгуда Befunge-93 -
Салют Люме!
Вставьте код в поле ввода под Showкнопкой, убедившись, что перезаписали @
уже существующее. Нажмите Showкнопку, чтобы импортировать код, затем нажмите Runкнопку, чтобы начать выполнение.
jsFunge IDE -
Хей Верден!
Сначала закройте диалоговое окно « Справка », затем нажмите кнопку панели инструментов « Открыть / импортировать» (вторая слева), вставьте код и нажмите 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 -
Привет, Верден!
Командная строка: bef93w32 -q source.bf
CCBI: Соответствующий параллельный переводчик Befunge-98 -
Sveika pasaule!
Командная строка: ccbi --befunge93 source.bf
MTFI: переводчик Magus Technica Funge -
Hai dunia!
Командная строка: mtfi -3 source.bf
( Попробуйте онлайн! )
Консольные приложения Python и PHP
Для этого требуется соответствующий язык сценариев - Python или PHP.
Befungee -
Helo Byd!
Командная строка: befungee.py source.bf
PyFunge -
Halo Dunya!
Командная строка: pyfunge -v 93 source.bf
( Попробуйте онлайн! )
Bephunge -
Bonjour Monde !
Командная строка: php bephunge.phps source.bf
Консольные приложения только для исходного кода
Они должны быть собраны из исходного кода, и это обычно проще всего в * nix-подобной среде. В Windows я использую подсистему Windows для Linux .
BEF: Справочное распределение Befunge-93 -
Ciao mondo!
Командная строка: bef -q source.bf
( Попробуйте онлайн! )
cfunge -
Савубона Мхлаба!
Командная строка: cfunge -s 93 source.bf
FBBI: Flaming Bovine Befunge-98 Intepreter -
Привет, маайлма!
Командная строка: fbbi -93 source.bf
( Попробуйте онлайн! )
Грибы -
Kaixo Mundua!
Командная строка: fungi source.bf
Rc / Funge-98 -
Салом Дуньо!
Командная строка: rcfunge -93 source.bf
Как это устроено
Проблема с этим заключалась в том, чтобы найти наименьшее количество тестов, обеспечивающих наибольшую разницу между переводчиками. В итоге дело дошло до четырех основных последовательностей испытаний:
Первый - это чтение памяти за пределами допустимого диапазона со смещением -1,1. Теоретически это всегда должно возвращать 32 (пробел ASCII), но на практике было 10 вариантов. Этот тест усложняется тем фактом, что два интерпретатора дают сбой при чтении за пределами границ, поэтому для принудительного возврата этих двоих в границы потребовалась пара специальных тестов (округление деления и пробел).
Вторая последовательность - это проверка работоспособности Befunge-98, в частности, инструкций ;
и '
. Почти все переводчики - Befunge-93 или работают в режиме совместимости с Befunge-93, поэтому они должны просто игнорировать эти инструкции. На практике было 6 различных способов интерпретации этой последовательности.
Третий тест проверяет диапазон ячеек памяти. В эталонном интерпретаторе ячейки памяти подписаны 8-разрядными, но другие реализации варьируются в диапазоне от 8-разрядных до неограниченных, некоторые подписаны, а некоторые - без знака. Однако для целей этого теста нам нужно было только различить 5 из этих вариантов.
Четвертая и последняя последовательность представляет собой комбинацию тестов недостаточного и отрицательного деления. Существует несколько способов, с помощью которых интерпретаторы неправильно понимают недополнение, и существует по крайней мере 3 различных способа реализации команд деления и по модулю, но здесь мы заботились только о 3 комбинациях.
Каждая из этих последовательностей возвращала одно число, и эти четыре числа были объединены (с помощью некоторых базовых арифметических таблиц и таблиц перевода) для получения окончательного значения в диапазоне от 0 до 22. Затем это значение можно использовать в качестве индекса для поиска фактического сообщения. для отображения.