Код-Bowling
Brunswick Bowling наняла вас для создания простой программы для вывода текста Code Bowling
на мониторы. Эта компания стоит немалых денег, и вы чувствуете, что можете обмануть их за небольшие деньги.
В должностной инструкции четко сказано, что они платят на основе начисления очков, и вы вполне уверены, что можете использовать их систему начисления очков в свою пользу и получить от этих парней максимально возможный чек. Для этого вам потребуется собрать как можно больше кода в свою программу / функцию, даже если их система подсчета очков предназначена для предотвращения этого.
Убери свои копилки, давай закодируй!
Вызов
Задача состоит в том, чтобы просто вывести текст Code Bowling
, в точности так, как он написан здесь, с максимально возможной оценкой. (Смотрите раздел: Система подсчета очков ниже)
Начальные и конечные новые строки (переводы строк) допустимы.
Ваш код может быть целой программой или просто исполняемой функцией.
правила
Обязательный: в этом задании используется код-боулинг: общие правила, редакция 1.0.0 ; Смотрите Meta для деталей.
Характер: соотношение байтов.
В коде-боулинге число символов предпочтительнее, чем число байтов. Очевидная причина этого заключается в том, что многобайтовые символы Юникода (например, 🁴) могут использоваться вместо однобайтовых символов Юникода для увеличения количества байтов и сделают боулинг больше о том, кто переименовывает большинство переменных с высокобайтовыми символами Юникода, а не чем тот, кто наиболее стратегически создает значимый сложный код.Имена переменных / функций / объектов
Все имена переменных (или указатели объектов, имена функций и т. Д.) Должны быть длиной в 1 символ. Единственное приемлемое время для использования двухсимвольных имен переменных - это после того, как все возможные односимвольные переменные были использованы. Единственное приемлемое время для использования имен 3-символьных переменных - это после того, как были использованы все возможные 2-символьные переменные. И т.п.Неиспользованный код
Весь код должен быть использован. Это означает, что программа не всегда может правильно выполнить задачу, если какой-либо отдельный символ (или различные наборы символов) удалены. Естественно, подмножество программы не должно быть в состоянии выполнить задачу самостоятельно без остальной части программы.Комментарии
Комментарии не допускаются к подсчету символов, если они не используются вашей программой / функцией.
Система баллов:
Pangram Challenge:
Панграмма - это предложение, которое использует каждую букву хотя бы один раз. (Быстрая коричневая лиса прыгает через ленивую собаку).
В этом типе испытаний предусмотрены системы подсчета очков, в которых совершенная панграмма набирает теоретический максимальный балл (хотя вы не обязаны использовать каждый символ хотя бы один раз). Кроме того, использование любого символа более одного раза приведет к штрафу. Эта задача также распространяется не только на буквы алфавита.
Метрика оценки:
- Каждый используемый персонаж увеличивает ваш счет на 1.
- Повторное использование любого буквенно-цифрового символа (az, AZ, 0-9) приведет к вычету 3 балла за повтор (первое использование не приводит к вычету).
- Повторное использование основных знаков препинания
([!?.-,":';])
- включая скобки - приведет к вычету 2 баллов за повтор.- Повторное использование других символов ASCII
{`~@#$%^&*_+=|\/><}
- включая фигурные скобки - приведет к вычету 4 балла за повтор.- Использование пробелов, табуляции и переносов приведет к вычету 1 балла за использование. То есть они не учитываются в сумме символов.
- Персонажи, не упомянутые выше (экзотические персонажи) , дают вычет 1 очко за использование. То есть они не учитываются в сумме символов.
Инструмент для подсчета очков:
Создан автоматический виджет скоринга, который можно найти здесь .
Это вариант кода для боулинга . Программа с самым высоким счетом выигрывает! (Поскольку существует максимальный балл 94
, тот, кто достигнет его первым (если он может быть достигнут), будет отмечен как принятый ответ, хотя другие могут свободно отвечать ради интереса)
источник
Ответы:
Глифо , 94
Исходный файл закодирован в CP437 .
Попробуйте онлайн!
объяснение
Glypho весьма полезен для подобных задач, потому что он не заботится о реальных используемых персонажах вообще. Вместо этого он смотрит на каждый блок из 4 символов, а используемая команда определяется шаблоном, который составляют эти четыре символа:
Это означает, что мы можем просто решить проблему, а затем заполнить уникальные символы в каждом квартете печатными символами, а все повторяющиеся - некоторыми «экзотическими» символами, которые игнорируются при подсчете очков. Glypho достаточно многословен, чтобы обычное рукописное решение содержало достаточно уникальных символов, чтобы вместить все 94 печатных символа внутри. Фактически, я закончил игру в гольф до тех пор, пока у нее не было ровно 94, просто чтобы я мог использовать уникальных экзотических персонажей для повторяющихся (надеюсь, чтобы было труднее уменьшить программу).
Сокращенная форма вышеуказанной программы такова:
Где каждая строка печатает один из символов.
Я использовал этот скрипт Retina, чтобы конвертировать его в Glypho
0123
. После этого я только что заполнил символы вместо цифр.Теоретически, возможно, можно было бы уменьшить это и дальше, если бы кто-то умудрился сыграть в сокращенную программу, а затем сумел рекомбинировать персонажей так, чтобы появлялись правильные шаблоны, но я не уверен, как доказать или опровергнуть это возможно , Если кому-то удастся сформировать правильное решение из подмножества моей программы, пожалуйста, дайте мне знать, чтобы я мог удалить ответ, пока он не будет исправлен. До тех пор я должен предположить, что это действительно.
источник
94
как это максимальная оценка. Все остальные могут отправлять ответы для развлечения .Питон 3,
828788Спасибо @JonathanAllan за +1 балл
Попробуйте онлайн!
Ничего особенного, просто нарезка и пропуск символов. Строка переворачивается, поэтому вы не можете удалить символы и получить исходную строку для печати.
источник
HIJKLMN...
), за исключением каждого 8-го символа, конечно?> <> ,
9294Я это сделал!
␑
это экзотический символ\x11
с десятичным значением 17. После завершения печати программа завершает работу с ошибкой (это переполнение стека). Я должен был управлять тем, какие зеркала и команды направления я использовал осторожно, так как я могу использовать каждое из них только один раз.Попробуйте онлайн
Основная программа:
Объяснение:
Нажмите строку
vCoUV␑3`h]Z_X >
(выполнение оберток). Двигайся вниз. Переверните стопку и удалитеv
.Нажмите
9
иc
(12). Умножьте, чтобы получить108
(l
). Нажмите7
. Нажмитеd
(13), вычтите1
, разделите,2
чтобы получить6
. Поместитеl
в (x, y) из (13,6), который находится нижеe
. Я мог бы сделать это короче, но это удлиняется, поэтому у меня есть место, чтобы добавить больше символов ASCII.Двигайтесь в петлю. Толкать длину стека с
l
. Если больше 14, выходной символ, в противном случае создайте новый стек с 10 верхними элементами, добавьте 15, затем отразите выполнение, затем вверх и выведите. Это используется для предотвращения лишних пробелов и>
печати в конце, а также для превращения случайно выглядящей строки в то, что должно быть напечатано. Продолжайте цикл.Если какая-либо из строк будет короче (путем удаления символа), программа больше не будет работать, либо из-за того, что вертикальные части программы больше не совпадают, либо из-за того, что строка для печати больше не является правильной. Попытка удалить символ перед каждой строкой изменит глубину стека и место
l
размещения, что также вызовет проблемы.Рыбы
источник
"
иl
с совсем немного работы. Как только я ударил 92, я был уверен, что должен быть способ удалить последнийo
. Однако потребовалось немного усилий. Вы можете сказать по истории изменений.Октава,
202122252733Лучшее, что мне удалось сделать, это
Это создает анонимную функцию,
f
которая не требует ввода. Вы можете назвать этоf()
. Я бы сказал, что точка с запятой в конце необходима, чтобы избежать печати тела функции.Возможно, это можно улучшить, комбинируя
eval
иprintf
, но я пробовал и терпел неудачу снова и снова.При этом все цифры используются один раз: используется тот факт, что Octave выполняет
mod(x,256)
операцию при неявном преобразовании чисел в символы. Это означает, что мы можем использовать как отрицательные числа, так и числа вне нормального32-126
диапазона. Следующие номера всех результатов в письме ,i
когда преобразуются в символы:... -2455 -2199 -1943 ... 105 361 ...
. Вместо использования'owling'
в конце мы используем"nvkhmf"
и добавляем 1. Это создает вектор целых чисел, которые неявно преобразуются в символы. Вместо этого1
мы используем!0
(илиnot(false)
. Кроме того, мы используем"
вместо того,'
чтобы избежать двух штрафных очков.Нам нужно найти набор чисел, который дает самый низкий балл. Строка
Code Bowling
приводит к следующей матрице, когда мы вычитаем и добавляем -10 * 256 - 10 * 256.Итак,
['',2627 2415 2148 1893 -2528 66 -1169 -1161 2668 105 -146 103]
результаты вans = Code Bowling
. Задача состоит в том, чтобы найти набор цифр и символов, который максимально снижает оценку. Использование всех цифр, конечно, хорошо, но дубликаты - плохо. Поскольку все цифры используются, а не используются дважды, это наилучшее возможное сочетание. Также мы получаем использование-
, в результате чего получаем одно очко.Можно утверждать, что он может быть уменьшен до строки ниже (31 балл), но тогда он больше не будет «исполняемой функцией» и, следовательно, будет иметь другую функциональность.
источник
function q();disp(...)
тоже пробовал ? За исключением тогоi()
, что они не перекрываются.cot
вhorzcat
иnf
в строке будет значительно снизить счет. Хотя может быть лучше, если я удалюhorzcat
и создаю строку другим способом, но тогда я не смогу использовать+!0
также. Я был бы удивлен, если бы это увеличило счет, если честно ... Это всего на 7 символов длиннее, чем текущий ответ, и я получу штраф в 7 байт, в дополнение к тем, что я упомянул.function
, но потом я решил, что вы, возможно, уже попробовали это, и я потратил бы впустую свое время (в отличие от, вы знаете, тратить мое время на PPCG)QBasic, 34
Это неформатированный код (yay для нечувствительности к регистру). Вы можете запустить его в QB64 или на archive.org (хотя обратите внимание, что последний будет форматировать код по мере его ввода). Я думаю, что мне удалось соблюдать все правила.
CLS
Необходимо: без него,C
не гарантируется для печати в верхнем левом углу экрана, где он будет выравнивают сode Bowling
. ЭтоLOcatE
необходимо: без негоode Bowling
будет напечатано в строке нижеC
. Я не верю, что существует какое-либо подмножество программы (кроме пробелов), которое можно удалить и сохранить тот же вывод.источник
Parse failed: Syntax error at 3:36: Token(Bowling)
LOCATE 1, 2
то, что сделал этоС
2729+2 балла благодаря @ceilingcat!
источник
char q<:]
вместоchar q[]
иputs(q);%>
вместоputs(q);}
+2 points thanks to ...
Haskell , оценка
213846472170Попробуйте онлайн! Идея состоит в том, чтобы получить преимущество
C
, создав строку длиной 67, которая содержит все неиспользуемые символы и преобразовав длину этой строки в символ. Я начал сputStr$toEnum(length""):"ode B\x6Fwling"
('\x6F'
шестнадцатеричный, для'\111'
которого дает'o'
) и вычислил все печатные символы ASCII, не содержащиеся в программе:Между прочим, остается ровно 67 печатных символов ASCII, которые можно вставить в строку, и
C
сам по себе, которые не могут появиться в строке, потому что тогда программа будет сведена к размеруputStr"Code B\x6Fwling"
.Предыдущее решение: (оценка 21)
Определяет функцию,
f
которая не принимает ввода и печатает строку. Попробуйте онлайн!источник
95
в строке и вычитания4621
? (У меня нет времени, чтобы проверить это прямо сейчас, но я посмотрю это через некоторое время)JavaScript, 19
Не очень высокий балл.
источник
z(){var x=alert('Code \nBowling');}
function
раньше не былоf
o
не использовалсяprompt('C\157de B\x6fwlin'+"g")
Желе , 94
Попробуйте онлайн!
105 уникальных персонажей, 11 экзотиков (
“¹³⁵⁷°⁹⁻”ḄỌ
).Как?
Формирует строку из 8-битного обращенного ASCII, где каждый бит кодируется с использованием младшего разряда значения Unicode символа.
источник
Рёда , 33
Попробуйте онлайн!
Я пытался следовать всем правилам. Это работает, сначала выталкивая строку
ode Bowling!
в поток, а затем вставляяC
= 3 * 4 + 57-2 вперед.источник
Кардинал 20
23 непробельных символа
% #> / NI "CodeB8 ^ o) wl, ing
-3 за повторное "о"
Указатель пути:
Шаг 1:
указатель создан на%, идет вправо
Шаг 2:
Указатель разделяется на #, чтобы идти вверх, вправо и вниз (P1, P2, P3)
Шаг 3 :
P1 Посылается направо>
P2 Идет направо
P3 Установите ожидание 3 шага на 8
Шаг 4:
P1 Отражено вниз \. \ изменен на /
P2 Установите режим печати с помощью "
P3 Подождите 2 галочки в 8
Шаг 5:
P1 направляется вниз
P2 Распечатать C
P3 Дождаться 1 отметки в 8
Шаг 6:
P1 отправлено ^
P2 Печать o
P3 Завершить ожидание при продолжении, взять значение ASCII "" (32) из)
Шаг 7: P1 направляется вверх
P2 Print d
P3 направляется вниз
Шаг 8: P1 Отражено вправо на \, который был изменен на /
P2 Печать e
P3 Печать символа со значением ASCII = 32 от, операция
Шаг 9:
P1 Отраженный вверх /, который изменяется на \
P2 Печать B
P3 Достигнут конец поля и остановок
Шаг 10:
P1 Отражено вниз I
P2 Достигнут конец поля и остановок
Шаг 11:
P1 Отражено вправо /, которое было изменено на \. Изменения обратно на /
Шаг 12:
P1 Отражено слева от N
Шаг 13:
P1 Отражено вниз /
Шаг 14:
P1 установить в режим печати с помощью "
Шаг 15:
Печать P1 o
Шаг 16:
печать P1 w
Шаг 17:
P1 Печать l
Шаг 18:
P1 Распечатать я
Шаг 19:
P1 Распечатать n
Шаг 20:
Печать P1 g
Шаг 21:
P1 Достигает конца поля и останавливается.
Попробуйте онлайн
источник
С 73
Спасибо @Laikoni!
Попробуйте онлайн!
С
313335Спасибо @ceilingcat и @DLosc за еще два очка, и спасибо @ Örjan Johansen за еще два очка!
Попробуйте онлайн!
источник
8-
и иметь действующий код еще.0xA-4+8
должно работать, хотя.0xA+32/8
работать? (+32
,+3
,+2
,+3/8
,+2/8
,/8
или+8
производит правильный вывод. Спасибо!0xD+4*8/32
. Нет, подождите, это сократилось0xD+4/3
бы, не так ли.Пакет, 19 символов
Начиная с Windows Vista,
TMP
начинается сC:\Users\
и, следовательно,%TMP:~5,1%
является многословным способом записиe
, несмотря на требование двойного%
штрафа при -4.источник
Brainfuck: -204
Ну, оценка ужасная, но писать было весело.
источник
Ява 8,
235131718192021247778 баллов+53 баллов (24 → 77) благодаря @Laikoni .
Длина 104 символа
- повторяющиеся символы: -15 (
helng
)- повторяющиеся знаки препинания: -10 (
"()""
)- повторяющиеся другие ASCII: нет
- пробельные символы: -1
SCORE: 78
Попробуйте онлайн.
Старый 24-байтовый ответ:
Длина 30 символов - повторяющиеся alnum: -3 (
1
)- повторная пунктуация: -2 (
"
)- повторяющиеся другие ASCII: нет
- пробельные символы: -1
SCORE: 24
Попробуйте онлайн.
источник
Object x(){return"C\157de Bowling";}
несколько часов назад за 17 баллов .. Видимо, я не редактировал / не сохранял его в своем представлении, хотя ..: S Что касается лямбды, я использую Java 7, который не есть еще лямбды. Я мог бы добавить ответ Java 8 с лямбда, хотя.7
. (Но не забывайте, конкатенация.),,
с,;
еще +1. Забавно, что String, использующий все доступные для печати ASCII, которые остались, составляет ровно 97 символов для char-кодаC
. :)сложено , 42
Попробуйте онлайн!
Оставляет вывод в стеке. Вот разбивка:
Я мог бы, вероятно, сделать это выше, но это в 42 Су ....
Еще один претендент, 40
Я использовал этот скрипт для оценки.
источник
зло , -81
Лучше, чем Brainfuck!
объяснение
Подано, потому что никто ничего не делает во зле, но это забавно.
Гол:
Длина = 63
Попробуйте онлайн!
РЕДАКТИРОВАТЬ: TiO, кажется, неправильно обрабатывает создание и удаление новых ячеек колеса - я подал отчет об ошибке на эту тему. Там он не будет работать должным образом, но я запустил его на моем собственном переводчике, и он работает, и вы можете мне доверять, чтобы я не беспокоился об этом;)
источник
Perl:
29, 33Гол:
источник
05AB1E , 94 балла
Попробуйте онлайн!
В основном конвертирует (Двоичный ASCII Code Bowling):
В строку из 1 и 0 затем каждая 1 заменяется буквой в алфавите, а каждая 0 - пробелом, символом или цифрой.
Строка, где 1 - это буквы, а 0 - это символы, цифры или что-то еще. Затем мы выполняем итерацию по алфавиту, нажимая 1 для алфавитного 0 и не алфавитного. Затем мы разбиваемся на группы по 7, конвертируем обратно в ASCII и печатаем каждый символ.
источник
T-SQL,
651832! точкиВдохновленный уловкой в ответе Dlosc's QBasic , я нашел способ включить все 10 цифр и большинство математических операторов (
%
это остаток / по модулю, только отсутствует/
), в основном методом проб и ошибок. Я не думаю, что есть какой-либо способ получить 67, удалив любую комбинацию цифр / символов, но вы можете попробовать.Версия 2 (18 баллов, тривиально):
Не очень хорошая оценка, но это то, что моя первая версия упростила (спасибо, MickyT). Все остальное, что я пробовал (кодирование и декодирование hex64, выделение отдельных элементов из строки, преобразование значений ASCII и т. Д.), Содержало слишком много повторяющихся символов (особенно
ECR
символов(),@
), которые приводили к отрицательным значениям.Версия 1 (65 баллов, недействительно):
Я использовал длину строки, чтобы определить, сколько символов я использую с левой стороны, поэтому удаление любого отдельного символа из строки приведет к уменьшению результата целочисленного деления до 11, выводя только
Code Bowlin
.источник
DECLARE @ char(12)='Code Bowling'PRINT @
соответствии с правилами.; # , оценка -1163, неконкурентоспособен
Я не думаю, что это будет большая конкуренция, даже если бы она могла конкурировать.
Попробуйте онлайн! Примечание: TIO не имеет; только # интерпретатор; # +.
источник
CJam , оценка 47
Надеюсь, нет проблем с этим ...
Использует один экзотический символ (Разделитель единиц, ASCII 31, представленный как
␟
), и один повторяющийся символ ("
). Я думаю, что это можно сделать еще дольше, но я пока оставлю все как есть.Попробуйте онлайн!
Программа работает, беря эту длинную строку и разбивая ее на подстроки длиной 3. Затем каждая подстрока сопоставляется с блоком, который преобразует свои символы в их значения ASCII, сбрасывает значения в стек, берет абсолютную разницу вторых двух, добавляет результат с первым, затем преобразует окончательный результат обратно в ASCII характер.
источник
CJam, оценка 93
Попробуйте онлайн
Вдохновленный ответом TidB's Python .
Не уверен, есть ли способ избежать повторения двойных кавычек.
Объяснение:
Строка содержит «Cpde Bowling» в обратном порядке, каждый 8-й символ.
7~%
извлекает "Cpde Bowling" (7~
=-8
)2,.-
уменьшает символ p (2,
=[0 1]
)источник
PHP, 33 балла
Это было довольно сложно придумать.
Оценка может быть улучшена в будущем.
Предполагается, что новая строка является новой строкой в стиле Linux! Стиль Windows и Old-Mac не будут работать должным образом.
источник
Руби, 75
Примерно порт ответа Python, но в Ruby нет такой классной пошаговой функции, поэтому я использую
gsub
вместо этого. Также я решил немного повеселиться с экзотическими персонажами, бросая фразы в Google TranslateПопробуйте онлайн!
источник
USML, 12 или 9 баллов (не конкурирует)
Попробуйте онлайн!
Этот ответ немного обманывает, злоупотребляя отображением HTML. Строка, фактически созданная этим, является
"Code\tBowling "
. Очки теряются за повторение символа «о».Для нечестного ответа:
USML все еще находится на ранней стадии разработки и еще не способен еще больше увеличить размер программы.
источник
"Code&'Bowling
(* Примечание: заменить&
на разрыв строки, это не позволит мне набирать их в комментариях)s
к следующей строке (получая подстроку ничего, тем самым не меняя вывод), чтобы получить ваш конкурирующий балл до 12, такой же, как ваш неконкурентный балл, кроме фактического действительное представление: DCubix , 85
Попробуйте онлайн!
Кубифицированные с незначительными символами заменены на.
Я думаю, что я сделал путь достаточно хрупким, так что удаление персонажей сломает его довольно сильно.
Смотреть это беги
источник
VB.net, 68
Быстрый тест, основанный на нечувствительности к регистру VB и отсутствии необходимости в «системе».
источник
cONSOLE.WRITE("Code Bowling")
?Shell: оценка 17
Общий балл: 17
источник
Точность !! 171 символ
Попробуйте онлайн!
Acc !! хорошо подходит для этой задачи, так как пробелы необходимы и циклы являются дорогостоящими. Я использовал в Acc umulator здесь, но плохо, чтобы увеличить чарсы. Вот краткий обзор со страницы:
Петли в Acc, по крайней мере, для игры в гольф, являются болью. Они требуют фигурных скобок, и все пробелы необходимы. В противном случае это довольно очевидно.
источник