Используя один язык программирования, напишите 5 однострочных программ, каждая из которых выводит отдельную строку первого стиха песни Гарри Нильссона « Кокос » 1972 года при индивидуальном запуске:
Брат купил кокос, он купил его за десять центов. У
его сестры был еще один, она заплатила за лайм.
Она положила лайм в кокос, она выпила их обоих.
Она положила лайм в кокос, она выпила их обоих.
Она положить лайм в кокос, она выпила их обоих
( полная лирика )
Последние 3 строки имеют одинаковую лирику, так что ваши последние 3 программы также могут быть.
Существует 5 факторных или 120 способов, которыми эти 5 однострочных программ можно расположить по одной на строку в одной 5-строчной программе. Вы должны оптимизировать свои однострочные программы так, чтобы при максимально возможном количестве этих 120 комбинаций 5-строчная программа выводила весь стих в правильном порядке , в точности так, как это показано выше.
пример
Самый простой ответ будет состоять из 5 однострочных операторов печати, последние 3 идентичных:
print('Brother bought a coconut, he bought it for a dime')
print('His sister had another one, she paid it for a lime')
print('She put the lime in the coconut, she drank them both up')
print('She put the lime in the coconut, she drank them both up')
print('She put the lime in the coconut, she drank them both up')
Вывод в 5-строчные программы будет стихом в правильном порядке, если первые два однострочных находятся на своих местах. Только 6 из 120 возможных договоренностей достигают этого.
счет
Представление с большинством рабочих случаев из всех 120 побед. Прерыватель связи переходит к набору программ с наименьшим совокупным числом байтов (новые строки не учитываются). Пример имеет 309 байтов.
подробности
Ваши программы могут не читать свой собственный исходный код. Также они не должны читать другие внешние файлы или требовать подключения к сети.
Вывод на стандартный вывод или ближайшую альтернативу. Вы также можете вывести в файл с именем по вашему выбору.
«Однострочные программы» - это строки, которые содержат любые символы, кроме разделителей строк (вам, вероятно, просто нужно беспокоиться о новых строках).
При составлении однострочников в 5 строчек вы должны добавить ровно 4 новых строки, по одной между каждой соседней парой однострочников. При желании вы можете добавить завершающий перевод строки.
источник
main
метод? Тогда что должно быть запущено при запуске программы?main
.Ответы:
CJam, 120 действительных перестановок,
334 299290 байтДовольно простая логика:
ОБНОВЛЕНИЕ : Оказывается, вам не нужен цикл wrap-sort-unwrap после 3 одинаковых и появляющихся в конце строк песни. Я могу объяснить, почему, если это не так очевидно :)
источник
Прелюдия , 120 перестановок,
20452035 байтЭто в конечном итоге убедило меня, что Прелюдия и CJam нужен ребенок. Если бы не было очень ограниченного набора инструкций Prelude, эта подача была бы очень конкурентоспособной, если бы она даже не побила CJam.
Основная идея заключается в следующем
В Prelude каждая строка - это свой собственный «голос» со своим стеком, и эти голоса исполняются параллельно. То есть в полной программе каждая строка будет просто индивидуально создавать строку и при печати ее в конце. Но из-за смещений операторов print порядок строк не имеет значения для порядка вывода, так как выполнение выполняется слева направо, а не сверху вниз.
Теперь, почему линии такие длинные? Prelude хранит только числа в своем стеке. Кроме того, он может выдвигать только однозначное число за раз, поэтому большие числа должны быть построены из сложения и вычитания (нет ни умножения, ни другой арифметики). Таким образом, большая часть кода просто вычисляет и нажимает правильные коды символов. Чтобы немного сократить это, я компенсировал их
96
. В конце, чтобы напечатать, я зацикливаюсь до тех пор, пока стопка не станет пустой (то0
есть встречается a ), добавлю 96 к каждому числу и напечатаю его.Обратите внимание, что строки вставляются в обратном порядке, так как они печатаются от последнего до первого символа.
Это предполагает , интерпретатор Python с
NUMERIC_OUTPUT = False
(который , как спецификация определяет I / O).Я использовал следующий код CJam для генерации строковой конструкции:
И наконец, просто для забавы, почему я думаю, что это было бы очень кратко, если бы в Prelude было понятие строк:
Теперь операторы печати
!
уже находятся в правильном порядке, поэтому мне даже не нужно их компенсировать. Я думаю, что я приступлю к реализации этого когда-нибудь.источник
Рубин, 120 действительных перестановок, 430 байтов
Работает в любом порядке или индивидуально. Каждая строка изменяет глобальное состояние, а затем устанавливает ловушку для выполнения в конце программы, если ловушка уже не была установлена.
источник
> <> , 120 перестановок, 703 байта
Однострочное ограничение было довольно жестким для двумерного языка, поэтому я должен был найти способ максимально использовать
.
инструкцию телепортации.Инициал
<
заставляет программу двигаться влево, оборачиваясь и выполняяЭто серия
p
(пут) инструкций, которые помещают символы, пока доска не будет выглядеть следующим образом:#.!50
Затем переворачивается обратно поток программы для вправо еще раз, прежде чем прыгать на линию 5. Ниже это:/
зеркалом в строке 5 находит текст 5, который помещается в стек. Затем мы телепортируем на линию 6./
зеркала на линию 6 находок текста 4, который помещается в стек. Затем мы телепортируем на линию 7./
зеркалом в строке 7, находит текст 3 ...Это происходит до тех пор, пока мы не нажимаем текст 1, после чего мы телепортируем в строку 10. Это цикл для печати всего стека, пока он не станет пустым.
Если присутствует только одна строка программы, то
\
зеркала выполняют ту же работу, что и телепорты в каждой лирической строке.Если программа зашифрована, то приведенное выше объяснение все еще применимо, поэтому программа работает для всех перестановок!
источник