Побудуйте зі мною мову про гольф


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. Чи є це число простим? - Враховуючи додатне ціле число, напишіть повну програму, щоб перевірити, чи є вона простим, і відповідно виведіть правдиве або хибне значення
  12. Я паліндром. Ти? - Давши рядок, перевірте, чи це паліндром, тоді як ваша програма / функція є і паліндром, і відповідно виведіть два чіткі та послідовні значення
  13. Підсумовуйте числа за стандартними знаками - Візьміть ряд чисел у STDIN та виведіть їх суму.
  14. Знайти коефіцієнт - З огляду на ціле число n, виведіть добуток усіх цілих чисел між 1і nвключно.
  15. Найкоротший код для отримання нескінченного випуску - Без будь-якого введення виробляти нескінченний вихід, який теоретично ніколи не припинить виводити.
  16. Випікайте шматочок Pi - Виведіть саме цей текст:
()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|
  1. Знайдіть найменше число, яке не ділить N - Враховуючи додатне ціле число N, виведіть найменше додатне ціле число, яке не ділить N.
  2. Це парне чи дивне? - З огляду на ціле число N, виведіть його паритет як значення truthy / falesy.
  3. Вихід з тією ж довжиною, що і код - Напишіть найкоротший код, вихід якого має ту саму довжину, що і код, де вихід не такий, як код.
  4. Гольф вам королева за велике благо! - Напишіть найкоротшу квітку своєю мовою.

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

Як отримати печиво

У мене є список з 5 викликів, які не є обов'язковими для спроб і не мають ніякого відношення до вашої оцінки, але є просто додатковими проблемами, щоб перевірити, чи Bugle здатний достатньо. Не соромтеся включати рішення до будь-якої з них у свою відповідь:

  1. Створіть самоперекладач
  2. Створіть квоту, здатну до корисного навантаження
  3. Covfefify рядок
  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 байт для кожної.

Давайте розпочнемо!



1
Можна також запитати: комусь подобається пояснювати протиріччя? Я би цінував будь-які відгуки, які ви хочете надати.
caird coinheringaahing

2
@Kaldo Ми не зовсім впевнені. У квінти має бути мінімум два байти, але якщо порожня програма виводить Hello, World!, то це 19 байт. Але якщо поведінка порожньої програми зміниться, залежно від
вкладених

1
@WeijunZhou "Будь ласка, утримуйтесь від відповідей на будь-які існуючі проблеми PPCG, використовуючи цю мову, принаймні, доки проблема не закінчиться"
caird coinheringaahing

1
Синтаксичні конструкції @LyricLy (такі як forпетлі) дозволено та рекомендується додавати
caird coinheringaahing

Відповіді:


3

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

Новий перекладач тут .

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

Рішення

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

    • Стек / дека: натисніть на стек поверх себе.

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>]

Додана мовна функція

  • "...": Рядок буквальний.
    • Стек / дека: висуньте кодові точки Bugle кожного символу на верхню / передню частину стека / дека.
    • Стрічка / сітка: запишіть кодові точки Bugle кожного символу на стрічку / сітку праворуч, починаючи з поточної комірки. Не переміщує курсор.
    • \n обробляється так само, як і інші символи.
    • Наразі уникнутий символ не існує, тому ви не можете записати "(34) у пам'ять за допомогою цієї команди. Принаймні поки що це не є великою проблемою, оскільки всі перераховані тут проблеми, пов'язані зі складанням , не мають "результату.

Будь-який подальший гольф завжди вітається, особливо для "Ніколи не відмовляюсь тобі" та quine. Зокрема, вищевказана квінка - це найперша нетривіальна квітка, яку я коли-небудь робив, тому я впевнений, що хтось може придумати коротший.


Я сподіваюся, що існують такі доповнення, а не лише додавання вбудованих елементів для конкретних проблем. +1
caird coinheringaahing

@ user202729 Напевно, я ввів помилку; дякую за виправлення та рішення FizzBuzz.
Бубон

3

1. Оцінка: 9638

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

Рішення

Усі ці рішення - це програми Unicode, запускаються з -uпрапором командного рядка, але оцінки зараховуються як би закодовані на кодовій сторінці Bugle.

1. "Привіт, світ!" - 48 байт

$72o101o108o108o111o44o32o87o111o114o108o100o33o

Просто натисніть, а потім виведіть код символу кожного символу в рядку.

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

$49o10o50o10o70o105o122o122o10o52o10o66o117o122o122o10o70o105o122o122o10o55o10o56o10o70o105o122o122o10o66o117o122o122o10o49o49o10o70o105o122o122o10o49o51o10o49o52o10o70o105o122o122o66o117o122o122o10o49o54o10o49o55o10o70o105o122o122o10o49o57o10o66o117o122o122o10o70o105o122o122o10o50o50o10o50o51o10o70o105o122o122o10o66o117o122o122o10o50o54o10o70o105o122o122o10o50o56o10o50o57o10o70o105o122o122o66o117o122o122o10o51o49o10o51o50o10o70o105o122o122o10o51o52o10o66o117o122o122o10o70o105o122o122o10o51o55o10o51o56o10o70o105o122o122o10o66o117o122o122o10o52o49o10o70o105o122o122o10o52o51o10o52o52o10o70o105o122o122o66o117o122o122o10o52o54o10o52o55o10o70o105o122o122o10o52o57o10o66o117o122o122o10o70o105o122o122o10o53o50o10o53o51o10o70o105o122o122o10o66o117o122o122o10o53o54o10o70o105o122o122o10o53o56o10o53o57o10o70o105o122o122o66o117o122o122o10o54o49o10o54o50o10o70o105o122o122o10o54o52o10o66o117o122o122o10o70o105o122o122o10o54o55o10o54o56o10o70o105o122o122o10o66o117o122o122o10o55o49o10o70o105o122o122o10o55o51o10o55o52o10o70o105o122o122o66o117o122o122o10o55o54o10o55o55o10o70o105o122o122o10o55o57o10o66o117o122o122o10o70o105o122o122o10o56o50o10o56o51o10o70o105o122o122o10o66o117o122o122o10o56o54o10o70o105o122o122o10o56o56o10o56o57o10o70o105o122o122o66o117o122o122o10o57o49o10o57o50o10o70o105o122o122o10o57o52o10o66o117o122o122o10o70o105o122o122o10o57o55o10o57o56o10o70o105o122o122o10o66o117o122o122o

Та сама техніка, що і Hello! приклад

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]

Скористайтеся циклом, який 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 ( $): стандартний стек, який підтримує значення, що висуваються, вискакуються тощо.
  • Нескінченна стрічка ( #): стрічка, a la brainfuck, яка спочатку є лише 0s.
  • Нескінченна сітка ( G): 2d сітка, нескінченна в обох напрямках, містить лише 0s
  • Deque ( D): deque , як реалізовано collectionsмодулем.
  • Register ( S): єдине значення, яке можна використовувати для зберігання одного значення.

Сітка також має єдине значення, збережене у своєму покажчику, яке можна записати або записати у комірки.

Крім того, розміри стрічки та сітки та поведінку для обгортання можна змінювати, використовуючи іншу команду виклику. Ці різні команди приймають задану кількість значень з поточної моделі пам'яті як параметри налаштування:

  • Стрічка ( À): приймає два значення - розмір ( int) та обгортання ( bool)
  • Стрічка ( Á): приймає одне значення - розмір ( int). Обгортання в кінці стрічки
  • Стрічка ( Â): приймає одне значення - розмір ( int). Не завертається в кінці
  • Grid ( Ǵ): приймає 4 значення - x size ( int), y size ( int), x wrap ( bool) та y wrap ( bool)

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

Відгалуження

Поки що у Bugle є дві команди розгалуження, обидві закінчені ]символом:

  • У той час, як ( [): мозковий стиль в стилі циклів. Вони виводять значення з стека / деке, якщо вони використовуються, або отримують доступ до комірки під покажчиком у стрічці / сітці.

    Приклад: #?[-O]рахується від входу до0

  • Якщо / else ( {і }). Поодиноке виконання під час циклів. Якщо значення, що з'явилося, помилкове, тоді пункт if пропущено, переходячи до іншого пункту, розділеного на }. Вони поводяться так само, як під час циклів щодо доступу до пам'яті.

    Приклад: {0}1]це логічний НЕ ворота

Вбудовані функції

Розряди цифр інтерпретуються як цілі числа, а просто натискаються / записуються в поточну модель пам'яті як є.

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

  • +

    • Стек / дека: Додайте перші два значення
    • Стрічка / сітка: збільшення поточної комірки
  • -

    • Стек / дека: відніміть перші два значення
    • Стрічка / сітка: зменшення поточної комірки
  • %

    • Стек / дека: модуль - два найкращі значення
  • :

    • Стек / дека: Дублювання верхнього значення
  • ;

    • Стек / дека: Поповнення верхнього значення
    • Стрічка / сітка: нульова поточна комірка
  • <

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

    • Стек: Чи рівні два перших значення?
    • Сітка: переміщення вниз по одній клітинці
  • >

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

    • Стек / дека: Оцініть рядок введення
    • Стрічка / сітка: Введіть символ введення
  • L

    • Стек / дека: висуньте довжину стека / деке
  • O

    • Усі: Виведіть поточне значення
  • R

    • Стек: Якщо можливо, поверніть верхній елемент, інакше переверніть стек
  • Z

    • Стек: Верхній елемент позитивний?
  • ^

    • Сітка: переміщення на одну клітинку
  • h

    • Усі: Роздрукуйте повну модель пам'яті
  • o

    • Усі: друкуйте поточне значення у вигляді символу
  • r

    • Стек: Поверніть найкращі 3 значення
    • Deque: Обертайте часи deque n, де nнайбільше значення
  • s

    • Стек / дека: поміняйте місцями перші два значення
    • Стек: Замініть верхнє значення
  • ×

    • Стек: Помножте два перших значення
    • Сітка: запишіть значення вказівника до поточної комірки
  • ÷

    • Стек: розділіть перші два значення
    • Сітка: запишіть поточну комірку до значення вказівника
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.