Создай язык игры в гольф со мной

30

Многие пользователи PPCG помогли с созданием этой задачи, как в чате, так и в песочнице, в частности Martin Ender , AdmBorkBork , Emigna и user202729.

Наше сообщество сочло необходимым создать набор языков, разработанных специально для игры в гольф, «языки игры в гольф», как мы их называем. Такие языки развивались от некогда блестящего, теперь неуклюжего GolfScript до гладких лаконичных языков, таких как Jelly и Husk . Как мы видим, эти языки становятся все короче и короче для ряда задач. Итак, как очевидные эксперты в области языков для игры в гольф, мы должны вместе разработать язык, чтобы превзойти любой другой язык, который осмелится конкурировать. Представляем Bugle!

Bugle: от аббревиатуры BuGoL: Bu ilt Go lfing L anguage.

Как этот вызов будет работать

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

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

  • Изменение в спецификации языка
  • Современный переводчик, встречающий именно то , что изложено в изменениях
  • Обновленная оценка языка (подробности немного)

Вы можете изменить спецификацию одним из трех способов:

  • Вы можете добавить одну команду
  • Вы можете добавить две новые команды
  • Вы можете редактировать поведение одной существующей команды

Что касается нового интерпретатора, вы должны использовать последнюю версию, написанную на Python. Это не должно быть в гольф. Каждая ранее добавленная команда должна быть тестируемой с самым последним интерпретатором, а также с самой новой командой (командами), которую вы добавили. Вы также не должны использовать оскорбительные выражения при обновлении интерпретатора, например, в комментариях или строковых литералах и т. Д.

Добавленные команды могут делать все, что вы пожелаете . Единственными требованиями являются:

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

Помимо этого, он может быть настолько конкретным или общим, насколько вы хотите. Это также может быть любой персонаж, которого вы хотите. Если вы не уверены, является ли ваше дополнение «новой командой», не стесняйтесь спрашивать в комментариях.

Оценка языка

Возможно, вы заметили, что вам нужно включить оценку языка во все новые предложения. Его оценка - то, что препятствует тому, чтобы этот вызов продолжался навсегда, и определяется следующим образом:

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

Для каждой из задач применяются стандартные правила ввода-вывода , а также стандартные лазейки .

20 заданий:

  1. "Привет, мир!" - Вывести строкуHello, World!
  2. 1, 2, Fizz, 4, Buzz - Выведите каждое целое число от 1 до 100 (включительно) в отдельной строке, с кратными 3, заменяемыми Fizz, кратными 5, заменяемыми BuzzнаFizzBuzz
  3. Произведите число 2014 без каких-либо чисел в исходном коде. Выведите число 2014 без использования каких-либо символов 0123456789в исходном коде, без доступа к внешним переменным или случайным начальным числам.
  4. Обфусцированный Hello World - Вывод строка Hello, World!, без использования какого - либо из символов , по меньшей мере , два из следующих множеств: hlwd, eor01и 27(без учета регистра)
  5. Спойте С Днем Рождения свой любимый язык программирования. На любом языке выведите следующее:

    Happy Birthday to You
    Happy Birthday to You
    Happy Birthday Dear [the name of your favourite programming language]
    Happy Birthday to You
    
  6. Мы не новички в программировании гольфа, вы знаете правила, и я тоже - выложу полный текст "Never Gonna Give You Up"

  7. Выведите знак - Если дано число, выведите -1, если оно отрицательное, 0, если оно равно 0, или 1, если оно положительное.
  8. Гипотеза Коллатца (OEIS A006577) - Начиная с целого числа, разделите его на 2, если он четный, или умножьте на 3 и добавьте 1, если он нечетный, и повторяйте процесс до достижения 1. Выходные данные должны быть равны числу итераций берет вас, чтобы достичь 1.
  9. Массив вызовов № 1: Чередующиеся массивы - учитывая массив целых чисел, проверьте, равны ли все элементы с четным индексом, и равны ли все элементы с нечетным индексом, и выведите соответственно истинное или ложное значение
  10. Я незначительный массив? - Учитывая массив целых чисел, проверьте, все ли абсолютные различия между последовательными элементами меньше или равны 1, и выведите соответственно истинное или ложное значение
  11. Это число простое? - Если задано положительное целое число, напишите полную программу, чтобы проверить, является ли оно простым, и выведите соответственно значение true или false.
  12. Я палиндром. Ты? - Получив строку, проверьте, является ли она палиндромом, в то время как ваша программа / функция тоже палиндромом, и выведите соответственно два различных и согласованных значения
  13. Суммируйте числа на стандартном входе - возьмите ряд чисел из STDIN и выведите их сумму.
  14. Найти факториал - Учитывая целое число n, выведите произведение всех целых чисел между 1и nвключительно.
  15. Кратчайший код для получения бесконечного вывода - без какого-либо ввода создайте бесконечный вывод, который, теоретически, никогда не прекратит выводить.
  16. Испечь кусочек Пи - Выведите точный текст:
()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|
  1. Найдите наименьшее число, которое не делит N - Учитывая положительное целое число N, выведите наименьшее положительное целое число, которое не делит N.
  2. Это четное или нечетное? - Если задано целое число N, выведите его четность в виде истинных / ложных значений.
  3. Вывод такой же длины, как и у кода. Запишите кратчайший код, длина которого равна длине кода, где результат не совпадает с кодом.
  4. Гольф, ты идешь на отлично! - Напишите кратчайший квин на вашем языке.

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

Как получить печенье

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

  1. Создать Self переводчик
  2. Создать полезную нагрузку
  3. Совмещать строку
  4. Гиперпрограммирование: N + N, N × N, N ^ N все в одном
  5. "УЗЛ" или "НЕ"?

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

Как победить

Как только минимальная оценка ( мы считаем, что 16, хотя любые попытки сыграть в эту игру очень приветствуются), очевидно, цепочка закончилась, поскольку решения не могут получить более высокую оценку. После того, как 16 будет достигнуто, задача остается в силе в течение 1 месяца после этого, чтобы дать кому-либо возможность отыскивать решения больше. После того, как этот месяц прошел, вызов окончен.

Как только задача будет решена, я перенесу переводчик в репозиторий GitHub и пройдусь по обычным махинациям по выпуску стабильного языка. Вы также можете начать публиковать решения проблем PPCG в настоящее время, используя указанный язык, но, пожалуйста, постарайтесь не заполнять первую страницу ответами. Вместо этого распределите их в течение определенного периода времени.

Форматирование

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

# [N]. [Score]

[New command + description]

[Interpreter/link to interpreter]

[Link to programs]

Где [N]ваш номер ответа (1 для первого, 2 для второго и т. Д.)

правила

  • Вы должны подождать 3 часа между отправкой ответов
  • Вы не можете публиковать сообщения два раза подряд, если ответ не был опубликован в течение 10 дней (ровно 240 часов).
  • Вы не можете удалить предыдущие команды.
  • Ваш переводчик не должен быть в гольфе, и его количество байтов здесь совершенно не имеет значения.
  • Если кто-то предлагает игру в гольф, пока ваш ответ самый последний, вы должны отредактировать поле для гольфа и обновить свой счет.
    • Вы также можете сделать это, когда ваш ответ находится в середине цепочки, если ваш счет не становится ниже, чем любые последующие ответы.
  • Пожалуйста, воздержитесь от ответа на любые существующие вызовы PPCG, используя этот язык, по крайней мере, пока вызов не будет завершен
  • Интерпретатор написан на Python 3 и должен продолжаться таким же образом по всей цепочке. Смена языка запрещена.
  • Опять же, для того, чтобы быть действительным, новое представление должно включать в себя как минимум 2 проблемы, по крайней мере, 1 байт для каждой.

Давайте начнем!

Caird Coneheringaahing
источник
1
Песочница
caird coinheringaahing
1
С таким же успехом можно спросить: кому-нибудь нравится объяснять отрицательное мнение? Я ценю любые отзывы, которые вы хотели бы дать.
caird coinheringaahing
2
@Kaldo Мы не совсем уверены. Quine должен быть минимум двух байтов, но если пустая программа выводит Hello, World!, то это 19 байтов. Но если поведение пустой программы изменится, в зависимости от входных данных, ее можно будет уменьшить
caird coinheringaahing
1
@WeijunZhou «Пожалуйста, воздержитесь от ответов на любые существующие вызовы PPCG, используя этот язык, по крайней мере, до тех пор, пока вызов не будет завершен»
caird coinheringaahing
1
@LyricLy Синтаксические конструкции (такие как forциклы) разрешены, и их рекомендуется добавлять
caird coinheringaahing

Ответы:

3

3. Оценка: 2938 2583 2532 (-51)

Новый переводчик здесь .

В основном для игры в гольф и упрощения вывода я добавил возможность дублировать стек / деку, а также выводить всю модель в виде отрисованного текста вместо целых чисел.

Решения

1. «Привет, мир!» - 17 байт (-3)

#"Hello, World!"a

5. Пой С Днем Рождения на свой любимый язык программирования - 95 байт (-3)

#"Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear Bugle
Happy Birthday to You"a

6. Мы не новички в коде гольфа, вы знаете правила, и я тоже - 1884 байта (-3)

#"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)

We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you"a

16. Выпекать кусочек пи - 149 байт (-3)

#"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"a

20. Гольф, ты идешь на отлично! - 23 байта (-39)

$"R34RdR36Ra"R34RdR36Ra

Добавлены языковые функции

  • a

    • Все: печать всей модели в виде текста, например, #"Hello, World!"aраспечаткиHello, World!
  • d

    • Стек / Deque: толкните стек поверх себя.
LyricLy
источник
8

2. Оценка: 2938 2583

Модифицированный интерпретатор здесь на TIO .

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

Решения

1. «Привет, мир!» - 20 байт (-28)

#"Hello, World!"[o>]

Любое может быть выполнено с использованием структуры, #"<string>"[o>]которая выводит заданную строку до тех пор, пока не будет достигнута строка 0.

2. 1, 2, Fizz, 4, Buzz - 419 64 байта (-1332)

$1[1+1s:3s%{}"zziF"oooos;0s]:5s%{}"zzuB"oooos;0s]s{:O}]10o:100-]

Спасибо @ user202729 за отличную игру в гольф.

3. Произведите число 2014 без каких-либо цифр в исходном коде - 9 байт (-4)

#"ĒĎ"[O>]

Использует два символа 20 и 14 в кодовых точках Bugle.

4. Запутанный Hello World - 19 байт (-153)

#"Ifmmp!Xpsme"[-o>]

Соответствует правилам № 1 (нет HLWDhlwd) и № 3 (нет 27).

5. Пой С Днем Рождения на свой любимый язык программирования - 98 байт (-230)

#"Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear Bugle
Happy Birthday to You"[o>]

6. Мы не новички в коде гольфа, вы знаете правила, и я тоже - 1887 байт (-5006)

#"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)

We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you"[o>]

16. Выпекать кусочек пи - 149 байт (-290)

#"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"[o>]

20. Гольф, ты идешь на отлично! - 62 байта (-12)

#"[>]<o-o+[<]>[o>]<-o;<[<]>[o>]#"[>]<o-o+[<]>[o>]<-o;<[<]>[o>]

Добавлена ​​функция языка

  • "...": Строковый литерал.
    • Стек / Deque: Вставьте кодовые точки Bugle каждого символа в верхнюю / переднюю часть стека / деку.
    • Лента / Сетка: запишите кодовые точки Bugle каждого символа на ленту / сетку справа, начиная с текущей ячейки. Не перемещает курсор.
    • \n обрабатывается так же, как и другие символы.
    • На данный момент нет экранированного символа, поэтому вы не можете записать "(34) в память с помощью этой команды. Это не слишком большая проблема, по крайней мере, на данный момент, так как все перечисленные здесь проблемы не имеют "выхода.

Любые дальнейшие игры в гольф всегда приветствуются, особенно для "Никогда не собираюсь сдаваться" и квина. В частности, приведенная выше мука является самой первой нетривиальной мукой, которую я когда-либо делал, поэтому я твердо верю, что кто-то может придумать более короткую.

фонтанчик для питья
источник
Я надеюсь, что есть и другие дополнения, а не просто встроенные функции для конкретных задач. +1
Caird Coneheringaahing
@ user202729 Это, вероятно, я, кто представил ошибку; спасибо за исправление и решение FizzBuzz.
Bubbler
3

1. Оценка: 9638

Базовый переводчик можно найти здесь , а представленные здесь . Это довольно долго, поэтому я включил его в GitHub, а не занимал большую часть поста.

Решения

Все эти решения являются программами Unicode, запускаемыми с -uфлагом командной строки, но результаты подсчитываются, как если бы они были закодированы с помощью кодовой страницы Bugle.

1. «Привет, мир!» - 48 байт

$72o101o108o108o111o44o32o87o111o114o108o100o33o

Просто нажмите, затем выведите код символа каждого символа в строке.

2. 1, 2, Fizz, 4, Buzz - 1396 байт

$49o10o50o10o70o105o122o122o10o52o10o66o117o122o122o10o70o105o122o122o10o55o10o56o10o70o105o122o122o10o66o117o122o122o10o49o49o10o70o105o122o122o10o49o51o10o49o52o10o70o105o122o122o66o117o122o122o10o49o54o10o49o55o10o70o105o122o122o10o49o57o10o66o117o122o122o10o70o105o122o122o10o50o50o10o50o51o10o70o105o122o122o10o66o117o122o122o10o50o54o10o70o105o122o122o10o50o56o10o50o57o10o70o105o122o122o66o117o122o122o10o51o49o10o51o50o10o70o105o122o122o10o51o52o10o66o117o122o122o10o70o105o122o122o10o51o55o10o51o56o10o70o105o122o122o10o66o117o122o122o10o52o49o10o70o105o122o122o10o52o51o10o52o52o10o70o105o122o122o66o117o122o122o10o52o54o10o52o55o10o70o105o122o122o10o52o57o10o66o117o122o122o10o70o105o122o122o10o53o50o10o53o51o10o70o105o122o122o10o66o117o122o122o10o53o54o10o70o105o122o122o10o53o56o10o53o57o10o70o105o122o122o66o117o122o122o10o54o49o10o54o50o10o70o105o122o122o10o54o52o10o66o117o122o122o10o70o105o122o122o10o54o55o10o54o56o10o70o105o122o122o10o66o117o122o122o10o55o49o10o70o105o122o122o10o55o51o10o55o52o10o70o105o122o122o66o117o122o122o10o55o54o10o55o55o10o70o105o122o122o10o55o57o10o66o117o122o122o10o70o105o122o122o10o56o50o10o56o51o10o70o105o122o122o10o66o117o122o122o10o56o54o10o70o105o122o122o10o56o56o10o56o57o10o70o105o122o122o66o117o122o122o10o57o49o10o57o50o10o70o105o122o122o10o57o52o10o66o117o122o122o10o70o105o122o122o10o57o55o10o57o56o10o70o105o122o122o10o66o117o122o122o

Та же техника, что и в Hello, World! пример

3. Произведите число 2014 без каких-либо цифр в исходном коде - 13 байт

#++O--O+O+++O

#использует ленту, +увеличивает ячейку, Oвыводит как целое число и -уменьшает

4. Запутанный Hello World - 172 байта

#+++++++++[>++++++++<-]>o<++++[>+++++++<-]>+o+++++++oo+++o>++++[>+++++++++++<-]>o------------o[-]++++++++[>+++++++++++<-]>-o<<<o+++o------o--------o[-]+++[>+++++++++++<-]>o

Использует присущее ему сходство с мозгом. Соответствует правилам № 1 и № 3

5. Пой С Днем Рождения на свой любимый язык программирования - 328 байт

$72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o68o101o97o114o32o66o117o103o108o101o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o

Все на данный момент имеют такую ​​структуру.

6. Мы не новички в коде гольфа, вы знаете правила, и я тоже - 6893 байта

$87o101o39o114o101o32o110o111o32o115o116o114o97o110o103o101o114o115o32o116o111o32o108o111o118o101o10o89o111o117o32o107o110o111o119o32o116o104o101o32o114o117o108o101o115o32o97o110o100o32o115o111o32o100o111o32o73o10o65o32o102o117o108o108o32o99o111o109o109o105o116o109o101o110o116o39o115o32o119o104o97o116o32o73o39o109o32o116o104o105o110o107o105o110o103o32o111o102o10o89o111o117o32o119o111o117o108o100o110o39o116o32o103o101o116o32o116o104o105o115o32o102o114o111o109o32o97o110o121o32o111o116o104o101o114o32o103o117o121o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o87o101o39o118o101o32o107o110o111o119o110o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o65o110o100o32o105o102o32o121o111o117o32o97o115o107o32o109o101o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o68o111o110o39o116o32o116o101o108o108o32o109o101o32o121o111o117o39o114o101o32o116o111o111o32o98o108o105o110o100o32o116o111o32o115o101o101o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o32o10o87o101o39o118o101o32o107o110o111o119o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o32o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o

7. Выведите знак - 18 байт

$?:Zs0=0s-s:1s-++O

Проверяет, является ли входное значение больше нуля, меньше нуля (изменено ли на выход -1вместо 1) и равно ли нулю, прежде чем брать их сумму.

8. Гипотеза Коллатца (OEIS A006577) - 36 байт.

#$?:1-[:2s%{3×1+}2s÷]:1s-₀+₁]₀O

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

9. Массив вызовов № 1: Чередующиеся массивы - 35 байт

#?>?>+>?[[<+<<->>>-]+<[-<<]>[>]?]<O

Это небольшая модификация ответа Митча Шварца на существующий вызов.

10. Я незначительный массив? - 46 байт

$1 0-?…1[s:sr-:Z1s-2×1+×1s-Z1-L2s-×]1+Z1-O

Все заслуга Emigna для создания этого

11. Является ли это число простым? - 31 байт

$?:1s-:[:1s-:];L1s[×L2s-]:×%O

Использует теорему Вильсона и вычисляет (n-1)!² % n

12. Я палиндром. Ты? - 13 байт

$?:R=:O:=R:?$

Первая половина программы, до O, устанавливает стек как [x, x]где xлибо, Trueлибо False. Oвыскакивает верхнее значение и выводит его. Остальная часть программы просто следит за тем, чтобы никаких ошибок не возникало. К счастью, когда ?встречается конец файла, он просто нажимает ''(пустая строка).

13. Суммируйте числа по стандарту в - 19 байтов

$?:[?:];L0s[+L1s-]O

Это можно разделить на две части: ?:[?:];и L0s[+L1s-]. Первая часть собирает все входные данные в стек. Вторая часть сдвигает сумму двух верхних элементов, а длина больше 1.

14. Найти факториал - 25 байт

$?:[:1s-:];L1s-Z[×L1s-]O

Это имеет структуру, аналогичную программе суммирования, но вместо ввода нескольких входов, [:1s-:];толкает диапазон от 1 .. nстека и [×L1s-]принимает продукт.

15. Самый короткий код для получения бесконечного вывода - 5 байт

#+[O]

Используйте цикл while с 1постоянно под указателем. Выходы 1навсегда.

16. Испечь кусочек пи - 439 байт

$40o41o40o41o40o41o40o41o40o41o40o41o10o124o92o51o46o49o52o49o53o57o50o54o124o10o124o58o92o53o51o53o56o57o55o57o51o124o10o92o58o58o92o50o51o56o52o54o50o54o124o10o32o92o58o58o92o52o51o51o56o51o50o124o10o32o32o92o58o58o92o55o57o53o48o50o124o10o32o32o32o92o58o58o92o56o56o52o49o124o10o32o32o32o32o92o58o58o92o57o55o49o124o10o32o32o32o32o32o92o58o58o92o54o57o124o10o32o32o32o32o32o32o92o58o58o92o51o124o10o32o32o32o32o32o32o32o92o95o95o92o124o

17. Найдите наименьшее число, которое не делит N

$?:1:[:rs%0=s1+srr:Rs]1s-O

При этом используется пробное деление, заканчивающееся, когда результат по модулю не равен 0.

18. Это четное или нечетное? - 5 байт

$2?%O

Простой по модулю 2

19. Вывод той же длины, что и код - 16 байтов

$16:[32+:o33s-:]

Выводит первые 16 печатных символов ASCII в обратном порядке: 0/.-,+*)('&%$#"!

20. Гольф, ты идешь на отлично!

$1[93, 76, 111, 91, 49, 59, 104, 48, 79, 49, 111, 54, 51, 0]
36o1O0h;1[oL]

Кредит переходит к пользователю 202729 за это


Спецификация языка

призвание

bugle.pyв настоящее время принимает ряд флагов, затем имя файла / код, который будет выполнен. На данный момент он имеет 4 флага командной строки:

  • -f/ --fileуказывает, что код должен быть прочитан из файла
  • -c/ --cmd/ --cmdlineУказывает , что код поставляется с помощью командной строки.

    -cи -fне может использоваться в одном вызове

  • -u/ --unicodeговорит интерпретатору прочитать код с кодировкой Unicode. По умолчанию используется кодировка Bugle ниже

  • -l/ --lengthвыводит длину файла в байтах в STDERR после выполнения

Следующий вызов был использован для проверки вышеуказанных представлений

$ python bugle.py -f -u [file]

Кодовая страница

Bugle использует 512 символов в своей кодовой странице. Символ 0xFFне должен использоваться для команды , так как он используется для обозначения следующего шестнадцатеричного значения для индексации во второй половине кодовой страницы. Используемые символы:

ÀÁÂÄÆÃÅĀĄ\t\nĆČÇĎÐ
ÈÉÊËĒĖĚĘÌÍÎÏĪĮĹĽ
 !"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~¶
ŁŃŇÑŊÒÓÔÖŒÕØŌŔŘŚ
ŠŤŦÙÚÛÜŮŪŴÝŶŸŹŽŻ
àáâäæãåāąćčçďðèé
êëēėěęìíîïīįĺľłń
ňñŋòóôöœøōõŕřßśš
ťŧùúûüůūŵýŷÿźžż◊
ΑΆΒΓΔΕΈΖΗΉΘΙΊΚΛΜ
ΝΞΟΌΠΡΣΤΥΎΦΧΨΩΏ
αάβγδεέζηήθιίΐκλ
μνξοόπσςτυύΰφχψω
ώǴḰḾṔẂǵḱḿṕẃḂḞĠḢṀ
ȮṖṠṪẊḃḟġḣṁȯṗṡṫẋ§
ĂĞĬŎŬĴăğĭŏŭĵªº‹›
ƁƇƊƑƓƘⱮƝƤƬƲȤɓƈɗƒ
ɠɦƙɱɲƥʠɼʂƭʋȥ©®ıȷ
ЉЊЕРТЗУИОПШАСДФГ
ХЈКЛЧЋЅЏЦВБНМЂЖљ
њертзуиопшасдфгх
јклчћѕџцвбнмђжÞþ
†∂∆≈≠√∈∉∌∋∩∪¬∧∨⊕
¤₽¥£¢€₩‰¿¡⁇⁈‼⁉‽⸘
…°•”“„’‘≤«·»≥ᴇ∞¦
×⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾
÷₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎

Или посмотрите в табличном формате . Обратите внимание, что \tи \nпредставляют вкладку и перевод строки соответственно. Также обратите внимание, что 16-я строка заканчивается непечатаемым символом: и может отображаться не во всех браузерах.

объем памяти

В настоящее время в интерпретатор встроено 5 моделей памяти. Каждая модель памяти требует, чтобы персонаж сказал интерпретатору начать использовать эту модель:

  • Stack ( $): стандартный стек, который поддерживает отправку, извлечение значений и т. Д.
  • Бесконечная лента ( #): лента, как брейнфук, которая изначально только 0s.
  • Бесконечная сетка ( G): двумерная сетка, бесконечная в обоих направлениях, содержащая только 0s
  • Deque ( D): Deque , как реализовано collectionsмодулем.
  • Register ( S): одно значение, которое можно использовать для хранения одного значения.

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

Кроме того, размеры ленты и сетки и режим обтекания можно изменить с помощью другой команды invoke. Эти различные команды принимают заданное количество значений из текущей модели памяти в качестве параметров настройки:

  • Tape ( À): принимает два значения - size ( int) и wrapping ( bool)
  • Лента ( Á): принимает одно значение - размер ( int). Обертывания на конце ленты
  • Лента ( Â): принимает одно значение - размер ( int). Не оборачивается в конце
  • Сетка ( Ǵ): принимает 4 значения - x size ( int), y size ( int), x wrap ( bool) и y wrap ( bool)

Используемый тип памяти может изменяться во время программы с помощью ₀₁₂₃₄₅₆₇₈₉, который обращается к 0-индексируемому nтипу используемой памяти ( является первым, вторым и т. Д.), Но в настоящее время значения нельзя поменять местами между различными типами памяти.

разветвление

Пока у Bugle есть две команды ветвления, каждая из которых заканчивается ]символом:

  • Хотя ( [): циклы в стиле брейнфук. Они извлекают значение из стека / очереди, если оно используется, или получают доступ к ячейке под указателем в ленте / сетке.

    Пример: #?[-O]отсчет от ввода до0

  • Если / еще ( {и }). Одиночное исполнение пока циклы. Если значение popped равно false, то предложение if пропускается, переходя к предложению else, разделенному символом }. Они ведут себя так же, как и циклы while в отношении доступа к памяти.

    Пример: {0}1]логические НЕ ворота

Встроенные функции

Наборы цифр интерпретируются как целые числа и просто помещаются / записываются в текущую модель памяти как есть.

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

  • +

    • Стек / Deque: добавьте два верхних значения
    • Лента / Сетка: увеличить текущую ячейку
  • -

    • Стек / Deque: вычесть два верхних значения
    • Лента / Сетка: уменьшить текущую ячейку
  • %

    • Стек / Deque: по модулю два верхних значения
  • :

    • Стек / Deque: дублировать верхнее значение
  • ;

    • Стек / Deque: выскальзывание верхнего значения
    • Лента / Сетка: обнулить текущую ячейку
  • <

    • Лента / Сетка: переместиться влево на одну ячейку
  • =

    • Стек: два верхних значения равны?
    • Сетка: двигаться вниз на одну клетку
  • >

    • Лента / Сетка: переместиться вправо на одну клетку
  • ?

    • Стек / Deque: оценить строку ввода
    • Лента / Сетка: взять символ ввода
  • L

    • Стек / Deque: нажмите на длину стека / Deque
  • O

    • Все: Вывести текущее значение
  • R

    • Стек: обратный верхний элемент, если это возможно, иначе обратный стек
  • Z

    • Стек: верхний элемент положительный?
  • ^

    • Сетка: переместиться на одну клетку вверх
  • h

    • Все: печать полной модели памяти
  • o

    • Все: печать текущего значения в виде символа
  • r

    • Стек: поверните верхние 3 значения
    • Deque: Поверните времена deque n, где nверхнее значение
  • s

    • Стек / Deque: поменяйте местами два верхних значения
    • Стек: Splat верхнее значение
  • ×

    • Стек: умножьте два верхних значения
    • Сетка: записать значение указателя в текущую ячейку
  • ÷

    • Стек: разделите два верхних значения
    • Сетка: записать текущую ячейку в значение указателя
Caird Coneheringaahing
источник