Ваша цель - написать программу, которая печатает следующее стихотворение в точности так, как оно выглядит здесь:
There was an old lady who swallowed a fly.
I don't know why she swallowed that fly,
Perhaps she'll die.
There was an old lady who swallowed a spider,
That wriggled and iggled and jiggled inside her.
She swallowed the spider to catch the fly,
I don't know why she swallowed that fly,
Perhaps she'll die.
There was an old lady who swallowed a bird,
How absurd to swallow a bird.
She swallowed the bird to catch the spider,
She swallowed the spider to catch the fly,
I don't know why she swallowed that fly,
Perhaps she'll die.
There was an old lady who swallowed a cat,
Imagine that to swallow a cat.
She swallowed the cat to catch the bird,
She swallowed the bird to catch the spider,
She swallowed the spider to catch the fly,
I don't know why she swallowed that fly,
Perhaps she'll die.
There was an old lady who swallowed a dog,
What a hog to swallow a dog.
She swallowed the dog to catch the cat,
She swallowed the cat to catch the bird,
She swallowed the bird to catch the spider,
She swallowed the spider to catch the fly,
I don't know why she swallowed that fly,
Perhaps she'll die.
There was an old lady who swallowed a horse,
She died of course.
Текст должен отображаться именно так, как здесь, и выигрывает наименьшее количество символов.
Изменить: Ваша программа не может получить доступ к Интернету.
code-golf
kolmogorov-complexity
Этан Роузман
источник
источник
Ответы:
Perl 5.10,
392384372235369 (ASCII) / 234 (Unicode)Самая короткая версия ASCII длиной 369 символов:
Это началось с этой базовой программы:
Основная идея состоит в том, чтобы сохранить конец рифмы и начало следующего
$trail
, увеличивая его по мере продвижения вперед. Это стало нетривиальным из-за необходимости особого случая для первого использования и попытки повторно использовать переменную имени животного даже в фразе, специфичной для животного. Дальнейшие оптимизации включают в себя:$_
для$buf
сокращения большинства операций замещения еще больше (использование@_
по привычке и не выигрывает ничего больше, чем любой другой символ)$"
переменной)' swallow'
и'iggled '
\n
в строковых литералах заменены реальными символами новой строкиВсе, кроме последней оптимизации, дают следующее:
Кроме того, этот гольф является жертвой недостаточно определенной кодировки. Поскольку на данный момент он подсчитывает отдельные символы вместо байтов в указанной кодировке, можно добиться большого выигрыша за счет декодирования исходного кода программы из UCS2 перед запуском. Окончательный результат уже не очень читабелен, но он короткий. (234 символа, считаются отличием от
perl -E''
обычного) (мне пришлось включить завершающий перевод строки, чтобы сделать его действительным UCS2)Хорошо, что до того, как прибегнуть к Unicode, нужно было много играть в гольф, иначе было бы не очень весело.
Редактировать:
не могу найти способ скопировать / вставить 234-символьную версию в этот браузер, поэтому я оставляю 235-символьную версию. Это будет исправлено сегодня вечером, когда я возьму в руки настоящий буфер обмена с поддержкой UTF8.нашел способ. Квазиустойчиво на идеоне.источник
Perl,
12094 символовГраф включает вызов к переводчику.
Вы сказали, чтобы воспроизвести это именно так, как здесь;)
NB
Именно это решение вызвало ограничение «нет интернета». Пусть это будет уроком для будущих спецификаций по коду-гольфу :)
источник
LWP::Simple
является частью ядра Perl, по крайней мере, в v5.12.3.Python 3.x: 407 символов
источник
JavaScript (422)
Работает в версиях интерпретатора SpiderMonkey, используемых как анархическим гольфом, так и идеоном .
Немного более красиво отформатирован:
источник
0
трюка для инициализацииi
для0
всего 2 байта. Имейте +1Vim, 373 нажатия клавиш
Забавно, как показательно это скремблирование.
источник
C (gcc) ,
429424 байта-5 байт благодаря функциюcatcat
Попробуйте онлайн!
источник
Рубин, 436 символов
источник
Scala (
706619599550 символов)Использование карты вместо foreach позволяет сжать больше символов ... В Codegolf нам не важны производительность, элегантность (неизменяемость) или логика ...
источник
чернила ,
370369354 байтаПопробуйте онлайн!
объяснение
источник
Haskell,
515498Оценка не учитывает новые строки и пробелы, добавленные для презентации.
Ungolfed:
источник
(++)
с более коротким идентификатором может быть хорошей идеей.#
оператора или что-то подобноеПитон, 484
Хорошо, я сделал это, но было довольно скучно ...
Последнее предложение всегда с «fly», поэтому некоторые символы были удалены ...
Менее гольф-версия:
источник
С, для развлечения (561 символ)
Оценка не учитывает новые строки и пробелы, добавленные для презентации.
Спасибо JB за его улучшения!
источник
&
и[]
?&
s при использовании указателей, и это не сработало: P. JB, я не знаю метода, который бы не требовал индексации (и использовал бы еще больше символов).C #, 556 символов
источник
Perl, 489 символов
источник
PHP , 344 байта
Попробуйте онлайн!
PHP , 405 байт
Попробуйте онлайн!
источник
Жевательная резинка, 255 байт
источник
Python 2 ,
453 442 427387 байт£
ранее использовался двухбайтовый символ !!swallow
сокращениеin
и"..."
удаленПопробуйте онлайн!
источник
~
вместо£
(это два байта длиной, если это не ASCII).in
и строковым литералом.Groovy, 475 байтов
Ничего особенного, просто много строковой интерполяции. Советы по гольфу на этом приветствуются!
источник
tcl, 451 байт
Доступно для запуска: http://rextester.com/live/GXF89639 (10-я попытка)
источник
Wolfram Language (Mathematica) , 295 байтов
Попробуйте онлайн!
Это решение - 46-байтовый декомпрессор,
BinaryDeserialize@ByteArray@ToCharacterCode@"..."
действующий на 248-байтовом массиве, маскирующемся как строка ASCII. Перенос этой строки между различными программами немного сложен. TIO, например, расширяет это решение до 416 байт, используя кодировку UTF-8 вместо сохранения строки ASCII. Чтобы получить минимальное 295-байтовое решение, сохраните текст в переменнойtext
и запуститезатем выполните сгенерированный файл в командной строке с
источник
Java 758 символов
Вот мои усилия Java (758 символов)
источник
Java, 655 байт
Это гольф- версия этого ответа . На второстепенных вещах сохранено более 100 байтов.
источник
public
могут быть удалены;class M{public static void main
может бытьinterface M{static void main
;String S=...,T=...,e=...;String[]a=...;String[]q=...;
может бытьString S=...,T=...,e=...,a[]=...,q[]=...;
;for(int i=0;...)...for(int j=i
может бытьfor(int i=0,j;...)...for(j=i
;for(j=i;j>0;j--)...a[j]...a[j-1]
может бытьfor(j=i;j>0;)...a[j]...[a--j]
;static void p(String v){...}
может бытьstatic<T>void p(T v){...}
( 623 байта ) Попробуйте онлайн.Древесный уголь ,
369366 байтПопробуйте онлайн!
Ссылка на подробную версию кода.
источник
PowerShell , 512 байт
Попробуйте онлайн!
Кредит @Chirishman на своем посту .
источник
Stax , 195 байт
Запустите и отладьте его
Распакованный, размазанный и прокомментированный, это выглядит так.
Запустите этот
источник
PowerShell , 349 байт = скрипт: 9 + архив: 340
Попробуйте онлайн!
Скрипт Powershell для создания архива
t
(см. TIO):источник