Хотя> <> не является популярным языком, он может быть хорош для игры в гольф и использовался на этом сайте. Он был вдохновлен Befunge и имеет некоторые сходства в инструкциях.
Обязательные команды:
> < ^ v
Изменяет направление указателя инструкции (вправо, влево, вверх, вниз)
/ \ | _ #
Зеркала; указатель изменит направление в зависимости от того, в каком направлении он уже находится.
x
Случайное направление.
+ - * , %
Сложение, вычитание, умножение, деление и по модулю соответственно. Вытаскивает A и B из стека и выталкивает оператор B A. Деление на 0 вызывает ошибку.
0-9 a-f
Помещает соответствующее значение в стек. a = 10, ..., f = 15
=
выталкивает A и B из стека и выталкивает 1, если B = A, и 0 в противном случае.
)
Больше чем. Вытаскивает A и B из стека и толкает 1, если B <A
(
меньше чем. Выдвигает A и B из стека и выталкивает 1, если B> A
' "
Включает разбор строки. Разбор строк помещает каждый найденный символ в стек, пока не найдет закрывающую кавычку.
!
Пропускает следующую инструкцию.
?
Пропускает следующую инструкцию, если вершина стека равна нулю или стек пуст. (примечание: это ничего не выталкивает из стека!)
:
Дублирует верхнее значение в стеке.
~
Удаляет верхнее значение из стека.
$
Вращает 2 верхних значения в стеке по часовой стрелке, соответственно. (например, если ваш стек равен 1,2,3,4, получится 1,2,4,3)
@
Поворот 3 верхних значений в стеке по часовой стрелке, соответственно. (Например, если ваш стек равен 1,2,3,4, получится 1,4,2,3). Вытаскивает
&
верхнее значение из стека и помещает его в реестр. Вызов & снова примет значение в реестре и вернет его обратно в стек.
r
Переворачивает стек.
}
Смещает стек вправо / вращает весь стек по часовой стрелке (например, 1,2,3,4 становится 4,1,2,3 Смещает
{
стек влево / вращает весь стек против часовой стрелки (например, 1,2,3,4 становится 2,3,4,1, выталкивает
g
A и B из стека и сбрасывает значение в B, A. в кодовом поле, выталкивает
p
A, B и C из стека и изменяет значение в C, B на A.
o
Выдает и выводит как символ.
n
Выдает и выводит значение.
i
Принимает один символ как пользовательский ввод и помещает его значение ASCII в стек.
;
Завершение выполнения.
Потоки не обязательно должны быть реализованы, хотя вы можете, если хотите.
Самый короткий ответ выигрывает, в случае ничьей выигрывает первый ответ.
Вы можете использовать любой язык, и eval разрешен.
Файл будет предоставлен через аргументы командной строки и будет иметь .fish
расширение.
Вы можете использовать официальный интерпретатор Python в качестве справки, если это необходимо. В статье Esolangs Wiki есть больше информации о том, как работает язык, а также еще несколько примеров.
Тестовые случаи:
Привет, мир!
Код:
"Hello World!"r>?o?<;
Выход:
Hello World!
Кодекс факториалов :
01::nv
:@*:n>84*o$1+
Выход (до 5):
1 2 6 24 120
источник
1 2 6 24 120 720 ...
и должен быть тем же, что выводит интерпретатор Python.l
для проталкивания длины стека. И, насколько я знаю,?
имеет значение.Ответы:
APL (Дьялог) (750)
Поскольку у APL на самом деле нет командной строки, загрузите ее в рабочее пространство (то есть с помощью
)ed F
), а затем запустите ее из строки APL следующим образом:Он не обрабатывает никаких ошибок. Поведение неправильного кода не указано. Это не может делать темы либо. Там, где страница Esolang и вопрос конфликтуют, следует вопрос.
Изменить: чуть более читаемую версию с комментариями можно найти здесь: https://gist.github.com/anonymous/6428866
источник
Дельфы, 1144
Все, кроме ведущих инструкций, реализованы.
Код с отступом и комментариями гласит:
Редактировать историю:
(1306 + 18 = 1324): исправлены ошибки в нескольких операциях (Delphi оценивает аргументы в обратном порядке). Также исправлено появление стека (не может появиться более одного раза за инструкцию).
(1324-33 = 1291): убрана защита при записи содержимого из пустой стопки
(1291-56 = 1235): добавлена функция поворота, переименованы переменные, уменьшены цифры команд
(1235-7 = 1228): переупорядоченные переменные, исправлена ошибка в '@'
(1228-37 = 1191): делится большим количеством кода реализации, распределяя его по 3 последовательным блокам
(1191-12 = 1179): Совместно реализовал реализацию циклического стека между всеми 3 инструкциями.
(1179-20 = 1159): разделение строк на 3 блока, удаление переменной j, совместное использование другой реализации
(1159-15 = 1144): Упростил 'x', изменив его на одну из 4 инструкций направления
источник
for k in TFile.ReadAllLines(ParamStr(1))do c:=c+k+StringOfChar(' ',80-Length(k));
. Вы также можете избавиться отf:TextFile
этого, но вы должны добавитьuses IOUtils;
в начале. Разница: он читает все строки, а не только первые 25 строк.Haskell 1428
Почти все строчные буквы используются в качестве имен функций.
PS Есть ли игра про подобные (2d указатель) esolangs? Они должны быть очень забавными!
Пример рыбной программы
источник
zip(['0'..'9']++['a'..'f'])[0..15]
следует использовать вместоzip['0'..'9'][0..9]++zip['a'..'f'][10..15]
. какой удивительный гольф!\q->t$(r q)q
в основномr>>=t
Питон, 978
980981Не поддерживает многопоточность.
Версии:
1. 981
2. 980: исправлена
p
инструкция; небольшое улучшение.3. 978: исправлена
?
инструкция.источник
p
предисловий здесь, потому что я не совсем понял это> выкидывает A, B и C из стекаp
Команда берет последние три значения в стеке (хлопает их),a
b
иc
, и назначает местоc
,b
на сеткеa
. Вот почему вы не можете конвертировать в нативный код.a=pop();b=pop();c=pop()
илиc=pop();b=pop();a=pop()
?a=pop();b=pop();c=pop()
Дельфы,
18551701Эта версия имеет поддержку потоков по довольно высокой цене: версия без поддержки потоков сейчас составляет 1144 символа, поэтому поддержка потоков добавляет 557 символов (около 50%)!
Обратите внимание, что эта реализация содержит несколько идей, которые уменьшат мою другую отправку на несколько десятков символов (я их применю позже).
Этот код безупречно выполняет пример многопоточного «привет, мир» и большинство других примеров. (Мой интерпретатор дает мне исключение деления на ноль при выполнении образца 'e' - может ли кто-нибудь подтвердить это другим> <> интерпретатором?)
Здесь код с отступом и комментариями:
Редактировать историю:
(1855-154 = 1701): применил все идеи из версии без резьбы
источник
procedure _.U(v: Int16);
->procedure _.U;
иprocedure _.T(A, b: Int16);
->procedure _.T;
TextFile
можно записать какText
, иAssignFile()
какAssign()
PHP, 2493 байта
Я знаю, что он был реализован с меньшим размером компилятора с другими языками, но, тем не менее, в духе непревзойденного программиста, я придумал интерпретатор PHP CLI для
><> Fish
. Весь исходный код ниже.2 Основные функции языка программирования Fish не были реализованы, а именно:
i
персонажа. PHP CLI требует, чтобы пользователь нажал<Enter>
клавишу для ввода ввода в буфер ввода.Обратите внимание, что я написал и оптимизировал большинство встроенных функций, включая создание массива с помощью:
вместо того
Доступ к программе можно получить через интерфейс командной строки (CLI) с помощью следующей команды:
Я потратил в общей сложности 6 часов, чтобы завершить это со ссылкой на оригинальный интерпретатор Python.
Первоначальный источник:
Редактировать историю
x
синтаксис для выбора одного направления вместо самостоятельного выбора.p
команда, в которойchr()
следует использовать, прежде чем вставлять значение в поле кода.источник
Lua 1640 (1558 без резьбы) символы
Резьбовая версия, игра в гольф (1640 символов):
Потоковая версия делает несколько неприятных хаков с setfenv и getfenv, чтобы исключить необходимость индексации для разных потоков.
Потоковая версия для чтения:
Версия без резьбы, игра в гольф (1558 символов, но ее можно сжать немного больше, если критерием будет версия без резьбы):
Читаемая версия:
Не ставить следующий как результат, поскольку использование сжатия напрямую не является целью;). Используя murgaLua (или любую версию Lua с lzlib и luaSocket (для декодирования base64)), при магическом счете 1333:
источник