Ваша задача - напечатать текст Good morning, Green orb!
, каждый символ которого будет повторяться столько раз, сколько самый частый байт в вашем источнике (режиме). Завершающий перевод строки разрешен и не нуждается в повторении.
Например, если ваш источник
print p
Так как p
появляется дважды, и каждый второй байт появляется, как только вам нужно будет напечатать
GGoooodd mmoorrnniinngg,, GGrreeeenn oorrbb!!
Ответы будут оцениваться по произведению их количества байтов и количества повторений вывода. Например, приведенный выше код (если бы он работал) получил бы 7 * 2 = 14 . Цель должна состоять в том, чтобы минимизировать счет.
Ваш код должен содержать как минимум 1 байт.
Используйте эту программу, чтобы убедиться, что ваш код и выходные данные совпадают
code-challenge
kolmogorov-complexity
hello-world
self-referential
Мастер пшеницы
источник
источник
Ответы:
Brain-Flak ,
384 * 106366 * 100 = 36 600Попробуйте онлайн!
объяснение
Первое, что я делаю, это нажимаю на строку
к стеку, используя довольно стандартную тактику мозговых ударов колмогоровской сложности.
Затем мы помещаем счетчик в стек выключения, чтобы сообщить нам, сколько раз дублировать каждый символ. Однако я не смог определить, что это за счетчик, пока не закончу писать программу.
Затем мы одновременно переворачиваем строку и дублируем каждый символ на нужное количество раз. Конкретно счетчик + 1.
Эти две части программы имеют режим из 99 открытых скобок. Однако, поскольку нам наверняка понадобится хотя бы одна скобка. Здесь я заметил, что последний символ, который мы нажимали,
!
имеет код символа 33, что означает, что мы можем использовать его для создания 99, точного числа, которое мы хотим, используя только одну дополнительную скобку. Это совпадение, но оно работает.источник
Haskell , 37 байт × 3 = 111
-20 спасибо H.PWiz. -25 благодаря Ними.
Попробуйте онлайн!
Операторы Хаскелла FTW.
Само-напоминание никогда не играть в гольф на мобильном телефоне. Я продолжаю делать глупые ошибки. Я могу выдвинуть по крайней мере половину вины на мобильном телефоне. :П
источник
<*
для сохранения байтов (обратите внимание, что я не проверил его действительность)брейкфук , 235 х 77 = 18,095 балла
Редактировать: -2 байта благодаря @Dennis
Попробуйте онлайн!
Тест TIO
Подожди, это не боулинг? \ s
Brainfuck - один из худших языков для решения этого вопроса. Я должен был начать с минимизируя , какой характер будет неизбежно появляться больше всего, как правило , либо
+
или-
. После написания первой итерации кода я обнаружил, что он ужасно несбалансирован в пользу+
s. Я переставил части кода, такие как генерация больших чисел, чтобы использовать больше-
. Наконец, я закончил вкачестве равного количества двух символов на 77единицу меньше ,-
чем+
. Конечно, это можно уменьшить еще больше, что я и сделаю завтра.Но эй, по крайней мере, я победил ответ Brainflak
источник
;#
языке (͡ ° ͜ʖ ͡ °)Желе , 13 байт * 1 = 13
Попробуйте онлайн!
источник
Алиса , 49 байтов * 2 = 98
144Попробуйте онлайн!
объяснение
Это обычная структура для линейных программ, которые работают полностью в обычном режиме. Развернув зигзагообразный поток управления, мы получим:
Основная идея состоит в том, чтобы избегать символов, которые повторяются более двух раз с помощью транслитерации. Транслитерация, которую мы собираемся сделать, заключается в следующем:
Кстати транслитерации работает в Алисе в том , что
from
иto
строки первой повторяется до LCM их длины, хотя в этом случае, все вопросы , это длинаfrom
строки, таким образом , мы получаем:Таким образом, мы получаем четыре различных символов для представления
o
с, и три дляn
,r
и пространства. Мы можем сгенерироватьfrom
строку, используя расширение диапазона следующим образом:Единственная проблема в настоящее время является то , что мы должны были бы четыре
"
для обоихinput
и вto
строке. Чтобы избежать этого, мы помещаем их в одну строку и разделяем их в=
качестве разделителя.Остальное просто:
источник
Питон 2 , 62 × 3 = 186
Попробуйте онлайн!
источник
C (gcc) ,
74 × 6 = 444вычеркнуто 444 по-прежнему регулярно 44477 × 5 = 38581 × 4 = 324Попробуйте онлайн!
источник
C (gcc) , 68 × 3 = 204
Спасибо @MDXF за то, что вы сэкономили 9 очков и проложили путь еще 6!
Попробуйте онлайн!
Альтернативная версия, для печати ASCII, 69 × 3 = 207
Попробуйте онлайн!
источник
APL (Dyalog Unicode) , 46 байт × 2 = 92
(Содержит непечатные материалы)
Попробуйте онлайн!
+ Большое количество байтов благодаря кодовой странице Dyalog, спасибо @ Adám за указание на это.
источник
~⎕AV∊⍨⎕UCS 18
.Vim,
4241 нажатие клавиш × 3 = 123Объяснение:
iGod morning, Green orb!<Esc>
Напишите строку
God morning, Green orb!
(однаo
отсутствует).2|
Перейти к первому
o
.qsyl2pl@sq
Создать рекурсивный макрос
s
. Как побочный эффект, утроьте текущийo
.X0
Удалить один
o
и перейти к началу.@s
Запустите макрос
s
, который повторяет каждый символ дважды.источник
С 78 × 4 = 312
Попробуйте онлайн!
356332источник
Japt , 24 байта * 2 = 48
Содержит непечатный. Проверьте это онлайн!
Большая часть программы представляет собой просто сжатую строку, которая распаковывается в
и
m²
затемm
Aps каждый символ, повторяя это²
WICE хорошо, что было немного растянуть . Пробел - единственный символ, который появляется 3 раза в сжатой строке; чтобы сохранить один экземпляр, мы заменяем его новой строкой, затем используем·¸
для разделения на новые строки и сразу присоединяемся к пробелам. Хотя на 2 байта длиннее, это существенно снижает оценку (с 66 до 48).Если бы только был короткий путь сделать это без использования символа дважды ...
источник
*salute*
И теперь, когда я смотрю на ваш ответ, я вижу, что он имеет ² тогда как ссылка имела ³ :)SNOBOL4 (CSNOBOL4) , 97 байт * 10 = 970
Попробуйте онлайн!
да ........ SNOBOL требует, чтобы операторы были разделены пробелами, и есть требования к пробелам, которые довольно неудобны. В коде 9
'\t'
и 10' '
, поэтому любые улучшения потребуют довольно значительных изменений в подходе.источник
R ,
65 байтов * 5 = 32559 байтов * 5 = 29562 байта * 4 = 248Попробуйте онлайн!
Есть 4
(or,')
символа.источник
strrep
, чтобы это пригодилось.Рубин , 52 байта × 3 = 156
Попробуйте онлайн!
источник
Perl 5 , 59 × 2 = 118 баллов
Попробуйте онлайн!
Perl 5 , 51 × 3 = 153
156точкиПопробуйте онлайн!
Perl 5 , 43 × 4 = 172 балла
Попробуйте онлайн!
Сохранено 2 байта в каждом решении благодаря @Xcali (несколько изменений назад). Для всех оптимизаций посмотрите на изменения.
источник
-M5.010
, которая также имеет значениеV , 35 байтов * 2 = 70
Попробуйте онлайн!
HexDump:
источник
SOGL V0.12 , 16 байтов * 1 = 16
Попробуй здесь!
Сжатие!
Хотя, если
Green
не использовать заглавные буквы, это может быть на 3 байта короче: /источник
Python 2 , 62 * 4 = 248
Благодаря @ovs и @Giuseppe!
Попробуйте онлайн!
Python 2 , 51 * 6 = 306
Попробуйте онлайн!
Python 2 , 70 * 5 = 350
Попробуйте онлайн!
Благодаря @Mr. Xcoder для сохранения байта из обеих версий!
источник
6
иfor
.\x6f
с, что все еще хорошо для 244Ом v2 , 20 байтов * 1 = 20
Попробуйте онлайн!
Должен любить компрессию, хотя, к сожалению, она не так хороша, как SOGL.
источник
Чисто , 77 байт * 3 = 231
Попробуйте онлайн!
источник
CJam , 32 байта × 2 = 64
Попробуйте онлайн!
Вставляет строку, затем выполняет XOR для первых 20 символов
[0, 1, …, 19]
, а затем дублирует каждый символ.источник
05AB1E , оценка: 22 (22 байта * 1)
Попробуйте онлайн.
Объяснение:
Примечание 1: стек обертывание в список встроенных команд
)
используются вместо встроено пары‚
, потому что‚
это уже часть словаря словаgood
.ПРИМЕЧАНИЕ 2: две запятые в коде
‚
и,
могут выглядеть одинаково, но это разные символы юникода . Первый обычно используется для встроенной пары , а второй - для встроенной печати в STDOUT с завершающим переводом строки . В этом случае они используются для словарного словаgood
и ожидаемой запятой в выходных данных.Посмотрите эту подсказку 05AB1E (раздел Как пользоваться словарем? ), Чтобы понять, почему
…‚¿•´,
есть"good morning,"
и„ˆ¨èã
есть"green orbit"
.источник
PowerShell , 46 байт * 4 = 184 балла
Попробуйте онлайн!
источник
$0
PowerShell ,
49 * 558 байт * 4 = 232 балла-13 баллов благодаря ASCII-только
Попробуйте онлайн!
Использует форматирование, чтобы перейти от 5
o
с до 4, чтобы вырезать некоторые числаисточник
Желе , 31 байт × 2 = 62 балла
Попробуйте онлайн!
объяснение
источник
JavaScript (ES6), 61 байт * 3 = 183
Показать фрагмент кода
JavaScript (ES6), 51 байт * 4 = 204
Ответ, предложенный @ETHproductions .
Показать фрагмент кода
JavaScript (ES6), 73 байта * 4 = 292
Показать фрагмент кода
JavaScript (ES6), 58 байт * 6 = 348
Показать фрагмент кода
источник
_=>_
на'$&'
'$&$&$&$&$&$&'
замену, которая, я думаю, позволит вам удалить два экземпляра и перейти к нескольким персонажам, привязанным к 4, что резко сократит счет ...Сетчатка , 36 × 4 = 144
Попробуйте онлайн! Есть три новых строки и четыре
o
с, так что больше ничего не поделаешь.источник
Рубин, 55х4 = 220 баллов
Я очень раздражен тем, что использование each_char делает счетчик R 5 ..
источник
Напористый , 36 * 2 = 72
Попробуйте онлайн!
Основной принцип этого ответа заключается в том, что каждый символ
n
хранится такn + index - 29
, чтобы избежать повторения в исходной строке. Это отображение создало строку в обратных чертах. Остальная часть программы просто декодирует это и печатает каждый символ дважды:Байт используется дважды:
`'W
Изменения
источник