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


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.