Довольно много людей здесь, вероятно, заядлые читатели XKCD. Итак, я полагаю, что вы, ребята, попросите вас сделать то, что Меган может легко сделать: создать сценарий, который генерирует тысячи убедительных притч о том, что компьютеры никогда не смогут сделать.
Ваш сценарий
- Может быть написано на любом языке
- Должен быть код-гольф
- Необходимо указать (
stdin
или ваш языковой эквивалент) количество притч, которые он излагает (вы можете предположить, что оно не будет превышатьMAX_INT
или эквивалентно). - Будет выводить несколько случайно сгенерированных притч.
Притчи таковы
- Начинается с
'Computers will never '
- Далее, один из 16 уникальных английских глаголов, которые вы можете свободно выбирать для оптимизации своей программы, но должны включать
code-golf
иunderstand
. - Далее, одно из 16 уникальных английских существительных, которые, опять же, вы можете свободно выбирать для оптимизации своей программы, но должны включать
a salad
иan octopus
. - Далее, одно из 16 уникальных английских предложений, которые вы можете свободно выбирать для оптимизации своей программы, но должны включать
for fun
иafter lunch
. - Заканчивается символом новой строки (
\n
или эквивалентным)
Так, например, если входные данные 2
, допустимый результат будет
Computers will never code-golf a salad for lunch
Computers will never hug a tree in vain
Размер программы исчисляется в байтах, а не в символах (поэтому нет юникода). Стандартные лазейки не допускаются.
Это мой первый вызов, поэтому, если я сделаю некоторые очевидные изменения, пожалуйста, прокомментируйте.
Изменить: я собираюсь вычесть размер словаря из числа байтов, чтобы поощрить словарь «сжатие». Из будущих ответов я увижу, возможно ли это удаленно; если это так, вы можете рассчитывать на бонус.
Ответы:
CJam,
238232 (или 209) байтовЗдесь используются многие глаголы / существительные / предложения из уже опубликованных ответов, но некоторые также являются новыми. Я преобразовал символы базы, чтобы сбрить лишние байты.
Базовая преобразованная строка может быть обработана еще на 24 байта (чтобы получить решение на 209 байтов ; обратите внимание, что вы должны учитывать количество символов вместо количества байтов, поскольку все символы имеют код ASCII менее 255, но сайт по-прежнему считает, что некоторые имеют Unicode ) но я хотел, чтобы строка состояла только из печатных символов ASCII.
Просто для справки, вот 209-байтовая версия:
Принимает количество строк для печати из STDIN, например:
Выход:
Попробуйте это онлайн здесь
источник
Вот немного другой подход:
Python,
368 308297 байтРЕДАКТИРОВАТЬ, я действительно играл в гольф на этот раз. Сбрил 60 символов.
Вот уловка гольфа, которой я больше всего горжусь:
Я даже не знал, что Python может это сделать! Вот более простое объяснение:
присваивает a и b 0 и 1, а затем 1 и 2, а затем 2 и 3.
При этом используется лингвистическая библиотека NodeBox для создания списка глаголов / существительных / предложений, а затем случайного выбора из них.
Эта библиотека не настолько хороша для генерации случайных слов (отсюда и 368 байт), но хорошая особенность этого подхода в том, что вы получаете некоторые довольно случайные обнадеживающие притчи. Вот что я имею в виду.
Но, эй, я не думаю, что чья-то еще программа создаст поговорку: «Компьютеры никогда не ослепят любителя животных за пепел».
Вот негольфированная версия (574 байта):
И, наконец, что не менее важно, вот некоторые из моих любимых обнадеживающих притч, которые, как я предсказываю, станут действительно популярными фразами в ближайшие 10-15 лет.
и мой личный фаворит:
источник
from random import choice as C
может бытьfrom random import*;C=choice
for i in ' '*(something)
чтобы вы могли тривиально сэкономить два байта от удаления пробела междуin
и' '
JavaScript ES6, 331
336байтПоказать фрагмент кода
Я выбрал слова, которые работают как глаголы и существительные, чтобы сократить список, но дайте мне знать, если это не разрешено. Попробуйте это выше, используя фрагменты стека (код был отформатирован для использования ES5) или по адресу http://jsfiddle.net/5eq4knp3/2/ . Вот пример вывода:
источник
s
чтобы пропустить другие части речи в списке. Две тильды являются побитовыми НЕ операторами, и они просто функционируют как более короткий способMath.floor()
.r=s=>12
так же, какfunction r(s){return 12}
, только короче. Также смотрите документы по MDN .~~
вроде какMath.floor
(но ведет себя иначе для отрицательных чисел), и=>
это определение функции в стиле ES6 с границейthis
.Питон -
390 385383Случайный пример вывода:
источник
Perl - 366
Вот тест:
источник
CJam,
353317301 байтСправедливости ради, я использую список слов Фалько, так что единственное различие в гольфе связано с языками, а не с содержанием (я могу изменить список слов, если люди тоже начнут играть в гольф).
источник
NetLogo, 396
Я также использовал список слов Фалько, с двумя исключениями (которые не меняют длину программы).
В зависимости от того, как вы определяете «программу», вы можете удалить первые пять и последние три символа, таким образом, оценка 388.
источник