Простая задача: попробуйте вывести следующий текст как можно меньше байтов:
the answer
toli fetheuniv
ersea nde ver
ything the ans
wer tol ife the
uni ver sean
dev ery thin
gth ean swer
tolifetheuni ver
seandeveryth ing
the ans wer
tol ifetheuniver
sea ndeverything
Оригинальный рисунок содержит 332 символа.
правила
- Нет ввода или неиспользуемый вход.
- Вывод может быть в любом разумном формате (строка, список строк, матрица символов и т. Д.).
- Вы можете использовать заглавные буквы вместо строчных для рисования, если хотите.
- Конечные пробелы и переводы строк разрешены.
- Это код-гольф , поэтому может выиграть самая короткая программа / функция для каждого языка!
Заметки
- Это было определено как возможный дубликат Мы не новички в коде гольфа, вы знаете правила, и я тоже . Этот вопрос был о поиске и замене текста. Здесь вы должны нарисовать форму, используя заданный текст, и по крайней мере два из текущих ответов демонстрируют, что в этом случае языки игры в гольф могут превзойти простые алгоритмы сжатия.
42
с*
символами, а затем заменить их с текстом, которые подходят идеально. Мне не нужно было изменять исходный рисунок, чтобы соответствовать предложению. Совпадение?Ответы:
Python 3 ,
224 220 219 215 211194 байта15 байт:if(j%27<1)*j
вместоif j*(j%27<1)
упрощенного оператора печати.7*'0'
Попробуйте онлайн!
Объяснение:
Использует сжатие base-36 для сжатия этого двоичного числа (исключение новой строки)
У нас в основном есть два счетчика
i
иj
. При встрече1
мы печатаем пробел; В противном случае0
мы печатаем следующую букву из строки и увеличиваемi
.j
увеличивается для каждого0 or 1
. Мы также печатаем новые строки всякий раз, когда это необходимо, т.е. когдаj%27<1
становится правдой.источник
if j*(j%27<1):
наif(j%27<1)*j:
Python 2 ,
235218213 байтПопробуйте онлайн!
Перешел на базу 36, закодированную из int букв, как подсказано в вопросе.
Заменяет каждого персонажа по одному.
Редактировать: Кажется, чиновник использовал базу 36 до меня.
источник
Жевательная резинка , 125 байт
Попробуйте онлайн!
источник
05AB1E ,
837974 байта-4 байта благодаря Эрику Аутгольферу
Выводит список строк для сохранения байта.
Попробуйте онлайн!
объяснение
2ÖH₆Ôn₅Ò\ÊÑĆ¸Ý¾*£„ÔûC∞qΘœ™‚¹µ—₃₄fm
является базовым 255 представлением десятичного числа:Который кодирует серии
1
s и0
s соответственно, даже индексы являются1
s, а неравные индексы -0
s. Это оценивает двоичное число:Код
источник
"ÔAo îιË3š1ĆRÕ₃FWš{ÓÛÏ.!XµM§&¶ñD°3PŸ{óNι2Ðbмh"253ö
с•—."Ôq‚Ā0Ál0j¿«ªžé¨0õ₄7“Ÿ!½ÏiæÆø-δq–Å05q½Yñá+•
на -4.•
нужны :)Python 2 ,
220 213212 байт-1 байт путем переключения
()*4
для%39
из @officialaimmПопробуйте онлайн!
Это отличается от других ответов Python. Я использую
шестнадцатеричноекодирование base-36 (сохранено 7 байт) в стилеPNGRLE (строка цифр, указывающая количество последовательных повторяющихся пикселей).Строка цифр :
Затем я перебираю эти цифры и поочередно печатаю это количество букв или символов из палитры (theanswer ...). Когда повторяется более 9 символов, я просто добавляю 0, а затем остаток.
источник
"theanswertolifetheuniverseandeverything"[w%39]
TIOSOGL V0.12 , 74 байта
Попробуй здесь!
источник
Позвольте мне ответить на мой собственный вопрос ...
Древесный уголь ,
140 126112 байтПопробуйте онлайн!
Вы здесь ссылка на ближайшую многословную версию.
Пояснение (подробные сведения см. В подробной версии):
)%*(+&(+)''%'%'('%'%&%#%'%'%%%$%-&%%%%+&&%&%)&(.&%*.%%2%'%(%)%'.)%'.
Строка (68 байт, 48 байтов сжатых) является представлением RLE-кодирования на чертеже. Каждый код символа минус 34 - это количество пробелов (четные позиции) или количество текстовых символов (нечетных позиций) для последовательной печати.gtheanswertolifetheuniverseandeverythin
строки (39 байтов, сжатый 27 байтов) каждый раз, когда требуется написать символ без пробелов. Когда я проверяю длину списка, чтобы получить следующий символ, и этот список начинается с одного элемента, последний символ строки записывается в первой позиции.Подтверждения
источник
Assign(Minus(1, c), c);
то вы можете просто использоватьif (c) { ... } else Print(" ");
.for (68)
аAtIndex("...", i)
затем вы можете использоватьModulo(i, 2)
вместо этого, и вам не нужноc
вообще.if (Not(Modulo(Length(PushOperator(u, w)), 27)))
то вам тоже не нужноa
.AtIndex
делает автоматModulo
такModulo(b, 39)
может быть простоb
.u
предопределенная переменная, которая является просто пустым массивом (сохраняет с помощьюA⟦⟧υ
). Каждый раз, когда вы что-то нажимаете на него, его длина увеличивается на 1. Это короче, чем явное присваивание для приращения.JavaScript (ES6),
207205203 байтаВозвращает массив строк с некоторыми конечными пробелами.
источник
Сетчатка , 183 байта
Попробуйте онлайн! Объяснение: На первом этапе добавляется кодировка RLE растрового изображения ячейки и текста, который затем дублируется на втором этапе до правильной длины, а на третьем этапе декодируется кодирование RLE. Четвертый этап затем перемещает текст в ячейки.
источник
Желе , 83 байта
Попробуйте онлайн!
Как это работает
источник
Добавить ++ , 1398 байт
Попробуйте онлайн!
Похоже, жесткое кодирование это самый короткий путь (по крайней мере, в Add ++)
источник
Vim, 239 нажатий клавиш
Добавлены разрывы строк для «читабельности»
объяснение
Первая строка откликается
life, the universe and everything
на странице справки, которая на один байт короче, чем просто ее ввод. Затем это превращается в это:Вторая строка разбивает строку на:
И затем заключительная строка делает отступ:
источник
Желе , 76 байт
Попробуйте онлайн!
источник
Сетчатка , 185 байт
Попробуйте онлайн!
источник
JavaScript, 215 байт
решение на основе guest44851
источник
Рубин , 216 байт
Попробуйте онлайн!
объяснение Аналогично решениям Python, но я использовал кодирование длины выполнения перед преобразованием в базу 36. Таким образом, строка данных составляет всего 54 символа вместо 68.
Но это все-таки закончилось дольше, надеюсь, его можно будет продолжить в гольфе.
источник
Порт моего древесного угля ответ :
C # (.NET Core) , 229 байт
Попробуйте онлайн!
источник
С (ССЗ) ,
220219217213210 байтов-1 байт благодаря возрастанию
-3 байта благодаря Джерри Иеремии
Попробуйте онлайн!
источник
JavaScript,
265237219 байтБлагодаря байту @tsh осталось всего несколько байтов.
JSFiddle
источник
join
Pyth , 121 байт
Он содержал слишком много байтов, которые я не смог отобразить в TIO, поэтому вот hexdump:
Попробуйте онлайн!
Вы можете добавить звонок в
wc
илиxxd
в скрипт bash, чтобы увидеть длину в байтах или hexdump, который я произвел выше.Интересно, что эта программа демонстрирует небольшую ошибку (?) В Pyth. Любые байты возврата каретки (0x0d) читаются как байты новой строки (0x0a) в строковых литералах. Это заставляет меня добавить 6 байтов:
X ... ]T]13
заменить неправильную десятку тринадцатью.В противном случае идея этого кода была довольно простой: запишите каждую позицию, где происходит пробел. Затем соедините каждый из этих индексов с количеством пробелов в этом прогоне. Затем восстановите исходную строку, повторив фразу четыре раза, а затем вставив ее в правильные места. Если количество записанных пробелов было равно нулю, вместо него вставляется символ новой строки.
источник
Java (OpenJDK 8) ,
258252251 байтПопробуйте онлайн!
Это довольно наивная реализация. Сначала маска для напечатанных символов, затем наведите курсор на текст, пока не закончите.
источник
int[]{16515968,33489856,x=58950624,x+16,x-40,31458204,7865230,1966983,462847,233471,117670784,x=134185856,x}
.Javascript, примерный рисунок. 319 байт
^ за то, что это стоит, не так много, но прежде чем я удаляю неисправный код.
источник