Все, вероятно, знакомы со следующей песней , которая является музыкальным туром :
Задний план
Меньше людей могут вспомнить, как они пытались спеть версию из четырех человек с несколькими друзьями и потерпели неудачу. Смещение текста песни с разными гармоничными высотами известно как пение «раунда», и это то, что мы сегодня должны моделировать, используя статический вывод. Вот пример кого-то, кто фактически исполняет произведение (ссылка на аудио / видео будет иметь звук) .
Соревнование
Эта задача состоит в том, чтобы вывести текст следующим образом:
Row, row, row your boat, |-----------------------------------|-----------------------------------|-----------------------------------
Gently down the stream. |Row, row, row your boat, |-----------------------------------|-----------------------------------
Merrily, merrily, merrily, merrily,|Gently down the stream. |Row, row, row your boat, |-----------------------------------
Life is but a dream. |Merrily, merrily, merrily, merrily,|Gently down the stream. |Row, row, row your boat,
-----------------------------------|Life is but a dream. |Merrily, merrily, merrily, merrily,|Gently down the stream.
-----------------------------------|-----------------------------------|Life is but a dream. |Merrily, merrily, merrily, merrily,
-----------------------------------|-----------------------------------|-----------------------------------|Life is but a dream.
правила
- Конечный пробел допустим, но не обязателен, включая новые строки.
- Да, дефисы и столбцы являются частью требуемого вывода.
- Запятые, точки, заглавные буквы и все синтаксические элементы, связанные с грамматикой, обязательны.
Это код-гольф , победителем является код с самым низким количеством байтов без использования стандартных лазеек.
code-golf
kolmogorov-complexity
Урна волшебного осьминога
источник
источник
Ответы:
05AB1E ,
8077 байтовПопробуйте онлайн!
Работа в процессе.
источник
ª
? Неважно, приговор, блестящий.vy
можноʒ
сохранить байт.V ,
139, 128 байтОднострочник! (sortof: P)
Попробуйте онлайн!
HexDump:
Получу ли я бонусные баллы за приземление
2^7
?Это заняло некоторое время, чтобы выяснить. Я надеюсь, что смогу сыграть в тонны, как мой ответ ASCII на клавиатуре, но я не уверен. Посмотрим. Это очень похожие задачи (и оба очень веселые: D)
Первоначально я попробовал это (180):
Попробуйте онлайн!
Который вставляет это:
а затем делает замену, чтобы расширить его. Но строить его в стиле ascii-art намного короче (и веселее, TBH)
источник
0^(2^7)
бонусные баллы за посадку на2^7
хаха. Интересная первая мысль, хотя о версии 180.Пакет,
292288275 байтИзменить: 13 байтов сохранены, переписав код, чтобы использовать версию трюк подстроки, которую я использовал в своем ответе Retina. Для удобства я могу выполнить цикл шесть раз, а затем выполнить седьмую итерацию тела цикла, что означает, что цитирование, необходимое для вывода
|
s, не становится слишком обременительным, однако я должен быть осторожен, чтобы учитывать^
s при выборе подстроки ,источник
Python 3,
252235208206205 байтХорошо хорошо. Вот менее скучный ответ:
Старый ответ, 252 байта:
Скучный ответ, а другой ответ Python короче, но я подумал, что попробую, если этот подход будет короче. Python 3, несмотря на экономию в байтах / строках 2-3, отличается тем, что и то
gzip
иbase64
другое в Python 2 более хреновое.источник
PowerShell ,
224207202 байтаПопробуйте онлайн! (вывод оборачивается, если ваш экран недостаточно широк)
Боже мой, эта штука генерации массива ужасна, но она сэкономила 17 байт, так что ...
Цикл от
0
до6
. Каждую итерацию мы индексируем в массив(0,1,2,3,4,4,4)
. Индексирование основывается на текущей цифре, текущей цифре+6
, той-1
, а затем той-1
. Каждый из них затем подается через цикл, где мы по модулю%7
. Например, если мы находимся0
во внешнем0..6
цикле, то это будет0,6,5,4
, тогда каждый%7
, так0,6,5,4
. Это индексируется в(0,1,2,3,4,4,4)
массиве, поэтому вывод0,4,4,4
. Для ввода1
мы получаем1,7,6,5
то,1,0,6,5
что дает1,0,4,4
. И так далее. (все было бы намного проще, если бы у нас была.clamp
функция)Это одноразовый плевок в петлю
|%{}
. На каждой итерации мы индексируем правильное место в массиве song-lyrics-array и оставляем эту строку в конвейере. Эти строки затем-join
редактируются вместе с|
форматированием строки вывода. Эти строки остаются в конвейере и вывод неявный.Сохранено несколько байтов благодаря Value Ink.
источник
$a
сохранили 11 пробелов, вы можете изменить четвертую строку на$a
плюс 4 пробела вместо$(' '*15)
-3 байта, да?JavaScript (ES8),
285256240231229217214213211210 байтСпас несколько байтов, позаимствовав трюк из ответа Арно
Попытайся
источник
'0444,1044,2104,3210,4321,4432,4443'.split
,.map
экономит 10 байт. Кроме того,padEnd
не является частью ES6 или даже ES7.PHP, 191 байт
Попробуйте онлайн!
расширенный
источник
Python 2 , 199 байт
Попробуйте онлайн!
Спасибо @mathjunkie за сохранение 14 байтов
источник
'Merrily, merrily, merrily, merrily,'
может быть('merrily, '*4).capitalize()
прав? Или это не Питон?'Merrily,'+' merrily,'*3
CJam ,
128122 байтаПопробуйте онлайн!
объяснение
источник
СОГЛ , 83 байта
Первая часть
┌׀0ρMVxDrž|⁷ΨB≈π93|↑D~Νķ‰¤t╤▼ΣΗ⁶⅔¾№⁷Ζ÷│²╥Ν9°‘
представляет собой сжатую строку, в результате чегоЭти строки перевернуты (так как они печатают их построчно), с «веселой» частью, вырезанной для замены в программе.
Остальная часть программы:
источник
/// , 200 байт
Попробуйте онлайн!
Простой, использует общие случаи в качестве замены.
источник
PHP, 179 байт:
ungolfed
источник
JavaScript (ECMAScript 2017),
191187182 байтаСохранено 3 байта благодаря Shaggy
источник
'Merrily,'+' merrily,'.repeat(3)
сохраняет байт.padEnd
не в ES7, не говоря уже о ES6.M${s='errily, '}m${s}m${s}m
вместоM${s='errily,'} m${s} m${s} m
сохранения 2 байта"Merrily,"+(s=" merrily,")+s+s
.Microsoft Sql Server, 421 байт
Проверьте это онлайн
источник
C (GCC),
231230 байт-1 байт, благодаря floorcat!
Довольно просто. Сначала он строит массив из 7 строк, часть с помощью макроса, чтобы отделить «веселую» часть, затем строки тире заполняются символом a
memset
. Затем строки печатаются с соответствующим смещением и разделителями.Попробуйте онлайн!
источник
MATLAB, 280 байт
Индексация массива ячеек довольно дорогая, поэтому кажется, что проще всего отбросить несколько байтов (если это возможно).
источник
Сетчатка ,
153150 байтПопробуйте онлайн!
Я попробовал произвольное кодирование по длине прогона, но
$1$*$2
не могу сделать то, что хочу, и повторяющиеся строки оказались слишком хитрыми. Редактировать: 2 байта сохранены путем кодированияerrily,
и 1 байт путем удаления ненужных^
.источник
Python 2, 225 байт
Попробуйте онлайн!
источник
Perl 5 , 215 байт
Попробуйте онлайн!
источник
Swift ,
416406405380372307 байтВы можете попробовать это здесь .
Благодаря @Mr. Xcoder для экономии мне 65 байт!
источник
f
на следующее:,var f=String.init(repeating:count:)
что экономит тонну байтов: 30print(o())
, вы должны просто позвонить,o()
потому что у вас естьprint
оператор внутри, который дает()
в конце выводаT-SQL,
296 277276 байтРазрывы строк в начале являются частью исходной строки, разрывы строк вблизи конца предназначены только для отображения и не учитываются в общем количестве байтов.
В значительной степени вдохновлен ответом Конрада Спаркли Пони . Иная техника, чем SQL-ответ Андрея Одегова .
Довольно простая мульти-замена, но есть несколько вещей, которые помогают экономить байты:
Если бы я только мог
REPLACE
всеREPLACE
s с чем - то короче. Хм ....источник
Japt
-R
,99959492908987 байтПопытайся
источник
Рубин, 162 байта
источник
Java, 295 байт /
272259 байтс переводом строки через каждые 4 столбца (295b)
Попробуйте онлайн
без новой строки (259b):
Попробуйте онлайн
источник
Japt ,
158157 байтПопробуйте онлайн!
источник
Stax , 63 байта
Запустите и отладьте его
источник
Perl 5 , 163 байта
Попробуйте онлайн!
источник
Рунические чары , 292 байта
Попробуйте онлайн!
Обычно я не решаю задачи по колмогоровской сложности , но с макетом я мог работать без особых проблем. У Runic нет хороших способов сжать произвольные строки, поэтому все, с чем мы должны работать, это повторяющиеся части.
Объяснение:
Сжатие немного:
Первые 5 строк действуют как функции для построения каждой части песни (где первая строка генерирует 35
-
для разделителя, используя десятичное значение,#
чтобы сохранить 2 байта больше3X5+
). Инструкция возврата находится в начале строки, чтобы гарантировать, что все IP-адреса, которые входят в функцию, также покинут функцию после того же числа циклов, чтобы избежать слияния IP-адресов (что приводит к отсутствующим строкам вывода), поскольку программы имеют прямоугольные и пустые ячейки. неявные.Следующие четыре строки отвечают за печать первых четырех строк вывода
Пятая строка затем печатает последние 3 строки вывода. Из-за того, что всем трем линиям нужно начинать хотя бы с одного разделителя-строфа, невозможно использовать 3 отдельных IP-адреса (так как им потребуются задержки, чтобы избежать слияния).
>
,y
,@
, И новая строка стоить больше байт (4) , чем0[...]
(3 байта) , где...
это произвольные инструкции (т.е. другой линии. Выход).Наоборот, для замены
>
и@
использования одного IP-адреса требуется больше байтов.Наконец, объединение всех пяти строк входа во 2-ю строку экономит 5 байтов новых строк. Нам просто нужно убедиться, что
B͍
инструкция возврата ранчо сначала перемещается в конец своей строки, сохраняя функциональность функции.источник