Зміна боулінгу з кодом


14

Code-Bowling Challenge

Напишіть програму або функцію, яка видає однаковий вихід, незалежно від того, як ви упорядкували вихідний код. (Вихід не може бути помилкою)


Підрахунок панграми

  • Ваш бал - кількість унікальних символів у вихідному коді.

    Програма з вихідним кодом AJBмала б оцінку 3
    Програма з вихідним кодом AAJмала б бал 2
    Програма з вихідним кодом 111мала б бал1

  • Це варіант . Перемагає програма з найвищим балом!

(Для вашої зручності автоматизованого інструмент скорингу був створений тут )


Правила виклику

  1. Введення
    Програма / функція може приймати дані, однак це зовсім необов'язково.

  2. Вихід
    Цей результат може бути будь-яким, що ви хочете, але він повинен бути ненульовим, ненульовим, не порожнім і не помилковим. (Для цього вихід повинен бути не менше 1 байта)

  3. Перестановка
    Незалежно від того, як перестановлений вихідний код, вихід повинен бути однаковим.

    Приклад:
       Програма: ABJвиходи hello world, як це робить програми: [ AJB, JAB, JBAі т.д.]

Це варіант . Перемагає програма з найбільшою кількістю символів!


1
Без будь-якого конкретного завдання для досягнення, цей виклик є занадто широким на мою думку.
— Денніс

2
Що означає non-nil?
— Денніс

2
Хоча підрахунок панграми - це спроба змусити боулінг з кодом працювати, я не впевнений, що ці виклики дійсно повинні позначати боулінг коду . Механізм оцінювання сильно відрізняється від того, яким повинен бути боулінг коду, тому я б сказав, що або використовувати код-виклик, або створити новий тег.
— Мартін Ендер

1
Я повинен погодитися з Мартіном. Наприклад, цей виклик не є кодом для гольфу. Як тільки ви наберете будь-що, крім загальної кількості символів (або байтів), це вже не виклик коулінгу
— Натан Меррілл

3
Чи повинна програма / функція закінчуватися? (наприклад, чи можу я надрукувати 0назавжди?)
— MildlyMilquetoast

Відповіді:


18

Ленгуаг, 1,112,064 бала, якщо UTF-8

Моя програма складається з усіх можливих символів UTF-8. Він друкує "Hello world" і використовує 1,75 * 1076 йоттабайт простору.

(Щоб створити програму, вам просто потрібно створити файл із 17498005810995570277424757300680353162371620393379153004301136096632219477184361459647073663110750484 символами, гарантуючи, що кожен можливий символ UTF-8 є у файлі)


2
Ви, пане, геній. І почекайте, чому мій комп'ютер виходить з ладу? : 'P
— HyperNeutrino

Я думав, що Unicode має характер 1114112?
— MilkyWay90

14

Багато мов, 2 бали

0.

Виробляє 0.0як 0.або .0. Потрібен розбір ліберальних чисел, що є нормальним, з десятковою комою на початку або в кінці, припускаючи 0 для відсутньої цілісної або десяткової частини. 0000000.дав би таку ж оцінку.

Це також працює наступними мовами (у деяких випадках з іншим результатом, як зазначено):

  • Python REPL
  • Javascript REPL
  • MATLAB (виробляє ans = 0)
  • Октава (виробляє ans = 0)
  • MATL (виробляє 0)
  • CJam
  • Сітківка (виробляє 0)
  • Укладається (виробляє 0)

Для Python я думаю, що це єдиний спосіб отримати бал вище 1, оскільки можливості можуть бути вичерпані.

  • Будь-який двійковий або одинарний оператор не працює як останній символ
  • Будь-який з них [](){}вимагає поєдинку, і він вийде з ладу, якщо першим буде закриття
  • Вкладки або пробіл не можуть починати рядок. Нові рядки не можна використовувати в системі REPL.
  • Не , може бути першим персонажем
  • #Поміщений перший коментар буде все , і виробляти не вихід
  • Початок \- недійсне продовження рядка
  • Повернення (Python 2) має бути парним, а оточуючі нічого не є помилкою
  • $, !, ?, І @не може бути використаний без інших непридатних символів

Це залишає букви, цифри _, .і котирування.

  • Що стосується лапок, будь-яка позарядка поза ними дає помилку.
  • Букви з можливими цифрами і _створюють імена змінних, серед яких певної перестановки завжди не існує.

Листя цифри і .. Дозвіл на різні цифри дає інше число, якщо всі цифри не є 0. Отже, я думаю, що нулі .є єдиним способом отримати оцінку вище 1. Але я не знаю добре лексема Python, тому я можу щось пропустити.


11

CJam , оцінка 15

T U
V	LMOQR[]0q

Спробуйте в Інтернеті!

Завжди друкує 0000:

  • 0 просто штовхає нуль.
  • T, U, VЄ змінними , які попередньо инициализирован в нуль.
  • L, M, O, Q, RЄ змінними , які попередньо инициализируется в порожній список, так що вони не відображаються на виході.
  • [і ]можуть або не можуть обгортати речі в списку, але вони не повинні бути правильно зібрані, і вихід все одно сплющений для друку.
  • q зчитує порожній вхід і, отже, не відображається і у висновку.
  • Символ передачі, пробіл та вкладка ігноруються парсером.

Це чудова відповідь для такої мови, як CJam! Ніцца
— Альберт Реншо

Чи rможна додати малі регістри, виконавши щось подібне до малого регістру q?
— Альберт Реншо

1
@AlbertRenshaw у вас не може бути обох, тому що на EOF вийде помилка.
— Мартін Ендер

9

MATL , 3 5 6 балів

Ідея додати пробіли була взята з відповіді Біджана .

lv
 T1

Код або будь-яка його перестановка виводить три, розділені новими рядками.

Спробуйте в Інтернеті!

Пояснення

  • Функція lза замовчуванням підштовхує номер один до стека.
  • Літерал 1робить те саме.
  • Буквальне Tнатискання true, яке відображається як номер один.
  • Космос та нова лінія - це роздільники, і тут нічого не робити.
  • vоб'єднує весь стек так далеко у вектор стовпця. Так, наприклад, vпісля Tоб'єднання перших двох чисел у стовпчик (а потім буде висунуто наступне число). Початковий vстворить порожній масив.

В кінці коду стек неявно відображається з такими правилами:

  • Кожен елемент або масив у стеку відображаються в іншому рядку.
  • Вектори стовпців відображаються з кожним елементом в іншому рядку.
  • Порожній масив не викликає виводу.

Отже, будь-яка перестановка вхідних символів виробляється 1три рази в різних рядках.


Пояснення? Мені цікаво, як це працює.
— Товариш SparklePony

@Sparkle Додав пояснення
— Луїс Мендо

Приємно! Також просто хотів зауважити, що Removing any part of the source code however should cause that specific output to not be produced.в цей час у вас був цей текст у виклику, який ви опублікували, я не мав на увазі його додавання, і він був видалений. Можливо, це допоможе вам збільшити показник, коли це можливо
— Альберт Реншо

1
@AlbertRenshaw Дякую за голову! Ще два очки
— Луїс Мендо

Я звинувачую вас у крадіжці моєї ідеї. Однак це не проблема.
— Біджан

6

Желе , оцінка 53 101

¶ ¤$¥&+ABDFHNPQSUVX^_aborv|®²×ȧȯḄḅḌḞḢḤḷṀṂṚṛṠṢṪẠạị«»()kquƁƇƊƑƘⱮƝƤƬƲȤɓɗƒɦƙɱɲƥʠɼʂƭʋȥẸẈẒẎŻẹḥḳṇọụṿẉỵẓḋėġṅẏ

Використовуючи лише символи, що входять до кодової сторінки Jelly .

Jelly має неявний ввід 0, і перша половина (аж до включення ạị«») рядка коду вище складається переважно з атомів монадичного (верхнього регістру) та діадичних (малих і малих символів), які при введенні нуля або списку містять лише один нуль ( або два такі входи у випадку діад) повертають нуль або список, що містить лише один нуль.

Винятки становлять:

  • Простір: він ігнорується (навіть якщо він знаходиться на сторінці коду).

  • Стовпчик розділяє посилання (як і канал для рядків - але це справді той самий байт), але жоден інший байт все одно не посилатиметься на код.

  • скарабей, ¤доручає аналізатору ставитися до всього, що залишилося, починаючи з ниладу (або постійної) як постійної (і працює як перший атом).

  • Долар, $доручі парсеру ставитись до двох посилань на нього, залишених як монада (і, що дивно, працює як перший атом)

  • Єна ¥аналогічно доручає аналізатору ставитися до двох посилань на нього, залишених як до діади.

  • Рекомендоване, ®нагадує значення реєстру, спочатку 0(це аналог авторських прав, ©розривається при використанні в якості першого атома, оскільки він є сукупністю, знайдений з масиву посилання на його ліворуч, яке ще не встановлено).

Код з круглих дужок, (і )далі, наразі є невикористаними кодовими точками, всі вони розбираються, і кожен викликає новий ланцюг (так само, як і новий рядок, хоча вони не мають ефекту від створення посилань, що викликаються, як новий рядок, але це не проблема, оскільки нічого не намагається зробити це).


1
Ви можете безкоштовно додати всі символи поза кодовою сторінкою, оскільки інтерпретатор скидає їх перед обробкою коду. Я все ще не знаю, що означає "нуль".
— Денніс

1
Я думаю, що дух виклику, мабуть, полягає в тому, що персонажі повинні бути на сторінці. Я запитав про non-nil, і у відповідь було вказати мінімальний вихід 1-байт.
— Джонатан Аллан

@ Деніс будь-яке уявлення про правильну термінологію для того, що пов'язане з розбором в дужках?
— Джонатан Аллан

Усі невикористані символи починають нове посилання, як і новий рядок.
— Денніс

1
Назвемо їх невизначеною поведінкою. : P
— Денніс

4

TI-Basic (83 серія), 93 бали (99 на TI-84 Plus)

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZθnπeiAnsrandgetKeyZXsclZYsclXsclYsclXminXmaxYminYmaxTminTmaxθminθmaxZXminZXmaxZYminZYmaxZθminZθmaxZTminZTmaxTblStartPlotStartZPlotStartnMaxZnMaxnMinZnMinΔTblTstepθstepZTstepZθstepΔXΔYXFactYFactTblInputNI%PVPMTFVP/YC/YPlotStepZPlotStepXresZXresTraceStep

Всі цифри, все один байт змінних в ( в тому числі & thetas і п , незалежних змінних для полярного і послідовного побудови графіків), константи тг, е , і я , деякі не зовсім змінні ( Ans, randі getKey), і 59 відрізняються змінні вікна (всі ті, які гарантовано визначені).

Припливне множення гарантує, що результат буде 0, коли ми приймемо це в будь-якому порядку. Якщо це працює на новому калькуляторі, всі змінні будуть 0; навіть якщо ні, getKeyбуде 0, оскільки немає часу натискати клавішу, перш ніж програма поверне значення.

На TI-84 Plus або вище, ми можемо отримати більше 6 очок, додаючи маркери getDate, getTime, startTmr, getDtFmt, getTmFmt, isClockOn. Результат буде тепер завжди буде , {0 0 0}тому що getDateі getTimeзворотні списками довжини 3 і мається на увазі дистрибуція множення над елементами.

Я думаю, що це всі можливі лексеми, які можна використовувати: будь-які фактичні команди - це префікс, інфіксація або постфікс (тобто вони не працюватимуть на початку чи в кінці програми), а будь-які інші змінні можуть бути невизначені (і викликати помилку, коли б / в).


Це розумно. Не особливо вражаюча ха-ха, але розумна справді! +1
— Альберт Реншо

3

(неконкурентоспроможний) Brainf-ck, 63 байти

Ну, я не знаю, чи це вважається обманом, але ...

.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

Точка друкує поточний символ (0x00), а решта символів нічого не роблять. Технічно це можна розширити нескінченно, тому, будь ласка, повідомте мене, якщо це вважається обманом.


Я вважаю, що нульовий вихід
— Альберт Реншо

О, я повинен видалити свою відповідь тоді або позначити її як неконкурентну?
— brianush1

1
Є 97 символів, які можна ввести у формі, 7 з яких ви не можете використовувати (8-1), тому я б сказав 90.
— Bijan

@ brianush1 ви можете залишити це як неконкурентоспроможне, щоб інші бачили. Я ще трохи відредагую питання, щоб пояснити, що вихід повинен бути принаймні 1 байт
— Альберт Реншо

15
@AlbertRenshaw (вибачте за всі ці коментарі) Якщо вихід повинен бути 1 байт, то символ NULL повинен рахуватися як байт, хоча той, який має значення 0.
— brianush1

3

Хаскелл, 3 бали

+ 1

Незалежно від того, як переставлений цей код, завжди повертається функція, що збільшує введення. Приклади використання в repl:

>(+ 1) 1
2
>(1+ ) 1  
2
>( +1) 1
2

2

√ å ı ¥ ® Ï Ø ¿ , 128,234 (?) Балів

Я приїхав до 128 234 за допомогою @DestructibleLemon. Ця програма використовує всі символи Unicode (128,237), крім o, Oта ł. Як не дивно, дві з них є вихідними командами.

Звичайно, жодна мова не могла використовувати всі ці символи, правда? Ну ця мова просто ігнорує команди, які вона не розпізнає. Проблема вирішена.

Ця мова за замовчуванням видає наступне:

===== OUTPUT =====



==================

що є ненульовим, ненульовим, не порожнім і не помилковим.

Примітка: якщо це порушує якесь неписане правило, повідомте мене в коментарях, і я це зміню. Якщо ви знаєте мою оцінку (припускаючи, що це дозволено), також опублікуйте в коментарях.


Який набір символів він використовує? utf 8? utf-16? Він використовує весь unicode?
— Зруйнований лимон

@DestructibleLemon Дивлячись на сторінку github, здається, для кодування використовується "CP-1252".
— brianush1

@DestructibleLemon Команди всі в CP-1252 (Windows-1252), але він прийме будь-який символ Unicode як дійсний синтаксис
— caird coinheringaahing

Мабуть, є 128 237 символів однокодування, тож у вас було б 128 234? en.wikipedia.org/wiki/Unicode#cite_note-24
— Зруйнований лимон

Згідно з іншими відповідями, мабуть, є 1112 064 унікоди, тому я вже не дуже впевнений
— руйнується лимон

1

J, 3 байти

 1

Знаки 1, пробіл та новий рядок завжди надрукують 1.


1

/// , 1 2 бали

\_

Спробуйте в Інтернеті!

Я не маю поняття, як це зробити будь-якою іншою мовою, що завершує Тьюрінга. Звичайно, є HQ9, але це просто відчуває себе обманливо.

1 байт завдяки @Martin Ender


це повинно бути два пункти, а не байти
— Зруйнований лимон

@DestructibleLemon Вибачте, форматування TIO.
— Товариш SparklePony

1

Точки , 1114111 символів (якщо використовується Unicode).

<87 dots here> Every Unicode character except NUL and . here

Пояснення:

1                                           leading binary number
1010                                        010 increments the value under the pointer
1010111                                     111 prints out chr(1)

Отже, отриманий двійковий рядок є 1010111, який перетворюється на десятковий - 87, тому нам потрібно 87 крапок.

Кожен інший символ є коментарем, тому ми використовуємо кожен символ, окрім NUL, тому що Python3 перестає читати файл, а потім крапку, оскільки крапки - це не коментарі.


0

Прелюдія , оцінка 1,112,051

(Якщо враховувати тільки ASCII для друку [\t\n -~], оцінка дорівнює 84. Якщо врахувати всі кодові точки Unicode , оцінка дорівнює 1,112,051 .)

!
" #$    %&'+,-./0:;<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

(потім додайте всі символи [\u{7f}-\u{10ffff}]після цього.)

Завжди друкуйте 0.


Прелюдія - паралельна мова на основі стека, де стек попередньо заповнений нескінченним числом 0.

  • +: Введіть два значення (завжди 0), додайте їх (0) та натисніть на стек.
  • -: Виведіть два значення (завжди 0), відніміть їх (0) і натисніть на стек.
  • #: Виведіть значення та відкиньте його.
  • !: Поставте значення та виведіть його як число (завжди 0) (специфікація говорить "символ", але інтерпретатор говорить "число"; в будь-якому випадку байт друкується)
  • 0: Натискає 0.
  • ^, v, V: Виштовхує верхнє значення попередніх / наступних паралельних програм ( «голоси»), але штабеля всіх «голосу» заповнені 0, тому вони завжди натисніть 0.
  • інші символи: не-оп.

Тож є лише 13 символів, яких нам потрібно уникати:

  • (, ): Не парні дужки спричинить помилку
  • 1- 9: Ми хочемо вивести лише 0.
  • ?: Ми не хочемо нічого вводити.
  • *: Викликає дуже складну перевірку узгодженості для коду до і після рядка, що складається з самотнього *. Тому нам потрібно або видалити новий рядок, або видалити *. Референсна реалізація використовує Python 2, .readline()який "новий рядок" може означати \rабо \n. Тому краще просто зняти *.

0

Мертва , оцінка 86

o.ABCDEFGHIJKLMNOPQRSTUVWXYZabcefghjklmnpqrtuvwxyz?!|[]_-();'"*&^$#@!1234567890+=<>,/\:

Якщо це незаконно, то також є

o

(оцінка 1)

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