Создайте функцию на выбранном вами языке, которая распечатывает следующее:
Old MacDonald had a farm, E-I-E-I-O,
And on that farm he had a cow, E-I-E-I-O,
With a moo moo here and a moo moo there,
Here a moo, there a moo, everywhere a moo moo,
Old MacDonald had a farm, E-I-E-I-O!
Где cow
и moo
- строки в параметрах функции, и, как таковые, могут быть изменены , например, pig
и oink
или или sheep
и baa
.
Следует учитывать заглавные буквы, дефисы, знаки пунктуации, пробелы и переносы строк.
Стремитесь набрать наименьшее количество символов Юникода в вашем коде.
echoes the following
. Вы имеете в виду, что функция должна распечатать или вернуть его?a oink
или это должно быть сделаноan oink
?Ответы:
Javascript ES6 - 204
Не короче, но, вероятно, самый запутанный.
Если ваш браузер не поддерживает ES6:
Копировать / Вставить этот код в консоли браузера и попробуйте
f('cow','moo')
,f('pig','oink')
,f('sheep','baa')
Как это устроено ?
c
это массив из 29 букв плюс животное и его звук (давайте назовем это нашим алфавитом ).Итак, все 31 символ умещаются в 5 бит (2 ^ 5 = 32).
Символ Unicode имеет длину 16 битов, поэтому он может кодировать 3 символа нашего алфавита с битом- заполнителем .
Полный текст с новыми строками составляет 186 символов нашего алфавита , его можно закодировать с помощью 62 символов Unicode.
Например,
Old
кодируется так:Если у вас есть проблемы с чтением некоторых символов Unicode, установите шрифт Code2000
источник
"cow"
и"moo"
должны быть параметрами функции. Получая от вызывающей стороны пропуск массива, вы сохраняете символы в определении функции за счет добавления к счетчику символов вызывающего кода. Это пахнет как чит для меня. Принимая этот подход до крайности, вы можете определитьfunction f(a){alert(a)}
(23 символа) и сказать, что он должен называться какf("Old MacDonald had a ...")
.CJam - 142 / GolfScript - 144
Применение:
"cow""moo"F
Для GolfScript заменить
'|
с"|"
иA
с10
Объяснение:
Ключевая часть
A,{`/\*}/
:A,{...}/
выполняет блок для каждого числа от 0 до 9 (A = 10),`
преобразует число в строку/\*
и заменяет строку: если мы имеем в стеке,"bar" "foo 1 baz" "1"
то/
разделяет полученную строку["foo " " baz"]
,\
заменяя этот массив на предыдущий элемент ("bar") и*
присоединяется к массиву, что приводит к"foo bar baz"
Таким образом, код заменяет каждое число в основной строке строкой, которая ранее находилась в стеке. У нас есть животное и звук, затем «has», «a» и т. Д. И, наконец, «EIEIO» и основная строка «10, ...!». Чтобы не использовать слишком много кавычек, я поместил все строки (кроме параметров) в одну строку, затем разделил ее и вывел получившийся массив (
'|/~
)Основная строка проходит через следующие преобразования:
заменить
"0"
на", E-I-E-I-O"
:заменить
"1"
на"Old MacDonald765"
:заменить
"2"
на"here"
, затем"3"
на"68 8"
и т. д.8 соответствует звуку, а 9 - животному.
источник
E-I-
быть строка, которая затем повторяется? :)Bash + iconv, 128 символов Юникода
Принимает нижеследующее тело функции pure-bash / ascii и выполняет обратное кодирование в символы unicode:
Определяет функцию оболочки
m
. Звоните как:Чистый bash, 171 байт (только для ascii)
Я думаю, что стоит отметить, что оригинальный стих (с «коровой» и «му») составляет всего 203 символа.
Определяет функцию оболочки
m
. Звоните как:источник
С ++ (403)
Хорошо, это немного длинно, но кому не нравится чрезмерное определение?
источник
#define X define
а затем использовать#X Y Z
. К сожалению, эти опрометчивые дни IOCCC давно прошли ...+
вместо<<
? Или используяchar*
вместоstring
? // Одновременно можно использовать только один из них.Python, 116 символов Unicode
StackOverflow ест мои специальные символы, но вот файл base64:
Данные упаковываются с использованием zlib, который эффективно кодирует повторяющиеся строки (zlib хорош для сжатия текста в целом). Чтобы воспользоваться преимуществом правила «символы Юникода», 121-байтовый блок zlib дополняется и делится пополам на 61-символьную строку Юникода, интерпретируя строку байтов как UTF-16.
Вызовите функцию как
источник
.decode('zip')
.)Питон, 217
Ты не можешь так много играть в гольф. Я просто вынул вопиющее повторение переднего конца и ...
Javascript, 241 - Аккуратный чит
Сделано это с помощью JSCrush ... не совсем реальный ответ, просто было бы интересно посмотреть, сможет ли кто-нибудь победить это на общепринятом языке. ( РЕДАКТИРОВАТЬ : э-э)
источник
Ява, 246
Использование:
f(new String[]{"cow","moo"});
источник
Ява -
262258Дальнейшая оптимизация определенно возможна.
источник
Perl 5 (UTF-8) - 131 символ, 313 байтов
Сценарий ниже должен быть сохранен как UTF-8 без спецификации.
Использование:
f("cow", "moo");
.Perl должен быть запущен с
-M5.010
флагом, чтобы включить возможности Perl 5.10. ( Это разрешено .)Мне очень нравится симметрия количества символов (131) и количества байтов (313). Это очень Инь и Ян.
Perl 5 (ASCII) - 181 символ, 181 байт
Использование:
f("cow", "moo");
.Опять же, Perl должен быть запущен с
-M5.010
флагом, чтобы включить возможности Perl 5.10.источник
CJam (не ASCII) - 77 символов
Использование:
"cow""moo"F
Строка - это мое другое решение CJam, преобразованное из базы 127 в базу 56000.
Может потребоваться локаль UTF-8.
Кстати, теперь вы можете попробовать это онлайн на http://cjam.aditsu.net/
источник
JavaScript: 152 символа / ES6: 149 символов
Вот функция JS с именем "z", которая выполняет работу за 214 символов. (не выполняйте это!)
Я «упаковал» его в символы Юникода, используя технику, созданную @subzey и мной для 140byt.es).
выполните этот последний фрагмент, затем позвоните
z("cow","moo")
, и вы получите эту строку:Более подробная информация здесь: http://xem.github.io/golfing/en.html#compress
Версия ES6:
источник
C # - 339 байт
Использование:
x("cow","moo");
источник
Реболь,
206202Использование:
f "cow" "moo"
источник
Delphi XE3 (
272252)Ungolfed
источник
Луа 237
Определив
c=b.." "..b
, я могу сохранить десяток символов. Определяя,d
как я, я сохраняю 23 символа. Я не вижу, как я могу сократить это больше. Это называется черезf("<animal>","<sound>")
.источник
Java 8 (411)
Злоупотребляя лямбда-выражением, помещая замены в LinkedhashMap, чтобы сохранить их в определенном порядке, затем использовал лямбда-выражение foreach для замены ключа значением в основной строке. параметры добавляются как последние 2 замены на карте. этот аргумент varargs должен сбрить несколько байтов в заголовке метода
Безголовая версия:
источник
JavaScript 220
Вызывается
источник
Чистый C, 298 байтов, без юникода
В моей функции я беру один аргумент, который на самом деле представляет собой кучу
char*
упакованных вместе. Каждая строка заканчивается нулем, и в конце есть дополнительный нулевой терминатор. Это позволяет мне проверятьstrlen(a)
в конце каждого цикла, а не хранить переменную счетчика.mcdonald.c:
main.c:
Выход:
источник
Кобра - 203
Даже для языка с многострочностью практически без ограничений и строгими правилами отступов, Cobra все еще работает довольно хорошо.
источник
C: 224 байта
Используя спецификатор printf для точности, мы можем использовать ту же строку, что и для строки формата printf, и для двух параметров.
С пробелом и строкой, разбитой на строки:
источник
PHP - 272 символа, 272 байта
Использование:
m("cow", "moo");
,m("fox", "Hatee-hatee-hatee-ho");
Параметры со
@#%^<>&*(
сбоем вывода.источник
Haskell (282 и все еще несколько читабельный :))
Файл:
источник
wc -c
, но я предпочитаю использовать mothereff.in/byte-counter и убедиться, что в конце нет пустой строки, если это не требуется для работы программы.ES6, 2 решения по
179186 символов без юникодаИ второе:
Я добавил тревожный звонок (+7 символов).
источник
JavaScript (E6) 140 символов
Счетчик символов : https://mothereff.in/byte-counter , 140 символов, 425 байтов в UTF-8
Оригинальный код ASCII 188 байт
Сжатый с http://xem.github.io/obfuscatweet/
Тест в консоли FireFox / FireBug
Выход
источник