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 -
Salamu Dunia!
Натисніть Clear...кнопку та вставте код у поле введення. Натисніть Editперемикач, щоб активувати перекладач, а потім натисніть Runкнопку, щоб почати виконання.
Зауважте, що цей сайт, ймовірно, не працюватиме в браузері, крім Chrome.
Бефунгіус -
Моло Лізве!
Вставте код у поле введення, переконайтесь, що ви перезаписали існуючий код. Потім натисніть Runкнопку для виконання.
Перекладач Девід Кліка Befunge 93 -
Sannu Duniya!
Вставте код у поле вводу Playfield та натисніть Runкнопку, щоб розпочати виконання.
Перекладач Befunge-93 Яна Осгуда -
Салют Лам!
Вставте код у поле введення під Showкнопкою, переконайтесь, що ви перезаписали те, @
що вже є. Натисніть Showкнопку, щоб імпортувати код, а потім натисніть Runкнопку, щоб почати виконання.
jsFunge IDE -
Хей Верден!
Спочатку закрийте діалогове вікно довідки , потім натисніть кнопку Відкрити / Імпортувати панель інструментів (друга зліва), вставте код та натисніть кнопку OK. Щоб виконати, натисніть кнопку « Режим запуску » (четверта зліва), а потім « Пуск» (п'ята зліва).
Також зауважте, що деякі з консольних перекладачів фактично доступні в TIO, тому, хоча вони технічно не є онлайн-перекладачами, їх можна перевірити в Інтернеті. Для тих, хто підтримується (в даний час BEF, FBBI, MTFI та PyFunge), я включив Спробуйте це в Інтернеті! посилання поруч із їх записом.
Java IDE
Для цього вам потрібно встановити час виконання Java, але теоретично вони повинні працювати на будь-якій платформі. Проте протестується лише в Windows.
Елемент візуального запуску Ешлі Міллс -
Moien Welt!
Спочатку це був онлайн-аплет, який, на жаль, більше не доступний, але ви все одно можете завантажити банку та запустити її локально як настільний додаток. Вам потрібно буде вставити код у вікно редактора програм , потім натиснути Convertкнопку, а потім Runкнопку.
ВАСАБІ: Перекладач Васабі - це надзвичайно асинінський перекладач -
Hallo Welt!
Щоб вставити код, клацніть правою кнопкою миші у верхньому лівому куті вікна редактора (він повинен бути в самому верхньому лівому куті) та виберіть пункт меню Вставити . Потім увімкніть прапорець " Повна швидкість " (інакше це буде вічно) і натисніть Run!кнопку, щоб почати виконання.
YABI93: Ще один перекладач Befunge93 -
Halo Dunia!
Натисніть Ctrl+ A, Ctrl+, Vщоб вставити код у вікно редактора, обов'язково перезаписавши джерело за замовчуванням. Потім натисніть Startкнопку, щоб почати виконання.
Ідентифікатори Windows
Зазвичай для цього вам знадобиться Windows, хоча в деяких випадках можуть бути доступні бінарні файли для інших операційних систем. Я не можу пообіцяти, що код буде працювати на інших платформах.
BefunExec -
Hello World!
Ви не можете вставити код у редактор, тому спочатку потрібно буде його зберегти на диску десь. Потім з IDE використовуйте меню Файл> Відкрити для завантаження коду з диска та виберіть меню Моделювання> Запуск / пауза, щоб запустити його.
BeQunge -
Labas pasauli!
Натисніть Ctrl+, Vщоб вставити код, а потім натисніть кнопку панелі інструментів налагодження (синій зубчик), щоб почати виконання. Щойно з'явиться панель налагодження , ви захочете встановити швидкість на максимум - кнопку праворуч від повзунка - інакше закінчиться вічно.
Грибок -
Tere maailm!
Натисніть Ctrl+, Vщоб вставити код, а потім натисніть F5для запуску.
Visbef: Visual Befunge '93 для Windows -
Hallo Wereld!
Ви не можете вставити код у редактор, тому спочатку потрібно буде його зберегти на диску десь. Потім з IDE натисніть Ctrl+, Oщоб відкрити браузер файлів і завантажити код з диска, і натисніть, F5щоб запустити його.
Програми консолі Windows
Знову для цього зазвичай потрібна Windows, хоча інші платформи можуть бути доступні, але не гарантовано працювати.
У всіх випадках код потрібно буде зберегти у файл на диску, а ім'я файлу передано інтерпретатору як параметр командного рядка ( source.bf у прикладі командних рядків, наведених нижче). Також зауважте, що деякі з них технічно є перекладачами Befunge-98, і їх слід запускати з певним параметром командного рядка, щоб застосувати режим сумісності Befunge-93. Якщо цього не зробити, ви не отримаєте правильних результатів.
БЕФІ: Перекладач Rufunx-Befunge-93 -
Хей Верден!
Командний рядок: bef93w32 -q source.bf
CCBI: Відповідний перекладач Befunge-98 -
Sveika pasaule!
Командна лінія: ccbi --befunge93 source.bf
MTFI: Magum Technica Funge Interpreter -
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
( Спробуйте в Інтернеті! )
забитися -
Sawubona Mhlaba!
Командний рядок: cfunge -s 93 source.bf
FBBI: Палаючий телячий бичок Befunge-98 -
Hei maailma!
Командний рядок: fbbi -93 source.bf
( Спробуйте в Інтернеті! )
Гриби -
Кайшо Мундуа!
Командний рядок: fungi source.bf
Rc / Funge-98 -
Salom Dunyo!
Командний рядок: rcfunge -93 source.bf
Як це працює
Завданням цього було пошук найменшої кількості тестів, які забезпечували найбільшу диференціацію між перекладачами. Врешті-решт, вона зійшла до чотирьох основних тестових послідовностей:
Перший - це позапам’ятна пам'ять, яку читають із зміщення -1,1. Теоретично це завжди повинно повертати 32 (простір ASCII), але насправді було 10 варіацій на практиці. Цей тест ускладнюється тим, що двоє перекладачів виходять з ладу за межею читання, тому для змушення цих двох повернень у межі потрібно було декілька тестів на випадок особливих випадків (округлення поділу та зведення міст).
Друга послідовність - це тест функціональності Befunge-98 - конкретно інструкції ;
та '
. Майже всі перекладачі є Befunge-93 або працюють у режимі сумісності Befunge-93, тому вони повинні просто ігнорувати ці інструкції. На практиці було 6 різних способів інтерпретації цієї послідовності.
Третій тест перевіряє діапазон комірок пам'яті. У довідковому інтерпретаторі комірки пам'яті підписані 8-бітовими, але інші реалізації відрізняються в діапазоні від 8-бітових до безмежних, деякі підписані та деякі непідписані. Однак для цілей цього тесту нам довелося розрізняти лише 5 таких варіантів.
Четверта і заключна послідовність - це комбінація тестів на підтік та негативний поділ. Існує декілька способів, за допомогою яких перекладачі неправильно перетворюються, і є щонайменше 3 різних способи втілення інструкцій щодо поділу та модуля, але тут було лише три комбінації, про які ми піклувались.
Кожна з цих послідовностей повертала одне число, і ці чотири числа поєднувались (через деякі основні таблиці арифметики та перекладу), щоб отримати кінцеве значення в діапазоні від 0 до 22. Це значення може бути використане як індекс для пошуку фактичного повідомлення показувати.