Вдохновленный github.com/JackToaster/Reassuring-Parable-Generator , в свою очередь вдохновленный xkcd.com/1263 . Возможные слова получены из reassuring.cfg этого хранилища.
Рекомендуется взглянуть на reassuring.cfg (использовать 12-й коммит), чтобы увидеть грамматику, с которой совпадают выходные данные (на выходе представлен список всех строк, соответствующих грамматике).
Задача: Ваша программа должна вывести все 7968 чувствительных к регистру строк точного текста, содержащегося в pastebin pastebin.com/2SNAJ1VH . Копия пастбина сохраняется в Wayback Machine.
Вот образец 33 мотивирующих линий из пастбина:
Computers can't enjoy a salad.
Computers can't enjoy a cake.
Computers can't enjoy a ice cream cone.
Computers can't enjoy a meal.
Computers can't enjoy a drink.
Computers can't enjoy a steak.
Computers can't enjoy a chicken dinner.
Computers can't enjoy a piece of cake.
Computers can't enjoy a piece of pie.
Computers can't enjoy a cookie.
Computers can't enjoy a sandwich.
Computers can't taste a salad.
Computers can't taste a cake.
Computers can't taste a ice cream cone.
Computers can't taste a meal.
Computers can't taste a drink.
Computers can't taste a steak.
Computers can't taste a chicken dinner.
Computers can't taste a piece of cake.
Computers can't taste a piece of pie.
Computers can't taste a cookie.
Computers can't taste a sandwich.
Computers can't experience eating a salad.
Computers can't experience eating a cake.
Computers can't experience eating a ice cream cone.
Computers can't experience eating a meal.
Computers can't experience eating a drink.
Computers can't experience eating a steak.
Computers can't experience eating a chicken dinner.
Computers can't experience eating a piece of cake.
Computers can't experience eating a piece of pie.
Computers can't experience eating a cookie.
Computers can't experience eating a sandwich.
Правила вызова:
- Вывод строк может быть упорядочен любым удобным для вас способом, но все 7968 из них должны быть включены.
- Вывод должен быть в виде единой плоской строки, а не в виде списка строк.
- Ваша программа не должна принимать ввод или пустой неиспользуемый ввод.
- Ваша программа не может получать данные из любого онлайн-источника.
- Одиночный завершающий перевод строки не является обязательным.
Это код-гольф , поэтому выигрывает самый короткий код.
code-golf
string
kolmogorov-complexity
grammars
fireflame241
источник
источник
No computer {can} {action}.
повторяется дважды иComputers {cannot_present}
выдает фразы типа «Компьютеры не способны». Преднамеренное?Ответы:
Zsh , 765 байт
Это может быть первое, что я написал в zsh, но он обладает невероятно удобной возможностью преобразования массивов в расширения скобок (хотя это не так удобно, как следовало бы… ). Запуск с
zsh -P
(считается как +1 байт), который включаетсяRC_EXPAND_PARAM
.Попробуйте онлайн!
источник
JavaScript (ES6),
12341091 байтЭто хороший счетчик байтов для начала! Время играть в гольф на этой огромной струне.
Меньше гольфа:
Как?
(Это, безусловно, один из моих самых любимых гольфов всех времен!)
Грамматика хранится в массиве
G
, который оценивается следующим образом:F
это функция, которая разделяет строку по разделителю|
и выполняет итерацию по ней Все идет нормально.Теперь, что происходит с этой внутренней функцией?
Сначала мы инициализируем массив
A
. Затем мы находим все цифры в переданной строкеs
и строим подпрограмму: используя каждую цифруn
, мы генерируем циклfor
-,of
который перебирает записи вG[n]
(сохраняются как свойстваF
, поскольку функции в JavaScript также являются объектами). Затем петли добавляются одна за другой.Например, сгенерированная подпрограмма для
s="1 2 3"
запусков выглядит так:На каждой итерации подпрограмма заменяет каждую цифру
s
соответствующей заменой, сохраняется в нейF[n]
, и результат передается вA
. Подпрограмма являетсяeval
ed иA
неявно возвращается.Используя
F
, остальная часть программы просто строит оставшуюся часть грамматики из существующих правил производства; замены просто определяются однозначным индексом вG
.источник
f
. Итак,f=
следует добавить к числу байтов.F
вместоf
.)PHP, 877 байт
Ах, это было весело!
Не стесняйтесь попробовать выкопать еще один байт, если можете.
ungolfed
объяснение
Вывод может быть разделен на 48 блоков по 166 строк каждый. В каждом блоке каждая строка начинается с одной из
Computers|A computer|No computer
следующих 14 отрицательных (дляComputers
иA computer
) или 9 положительных (дляNo computer
) возможностей.Я закодировал эти куски в 6 бит каждый (3 разных предмета -> младшие 2 бита; ключи разделения положительных и отрицательных заглавных букв -> старшие 4 бита) и (вероятно, очевидно) добавил 65, чтобы использовать значения в качестве кодов ASCII.
Внутри этих кусков 8 комбинаций глагол / прилагательное для 11 различных продуктов и 13 различных комбинаций для 6 различных видов искусства, всегда в одном порядке; так что они могут быть просто пройдены, используя глагол / прилагательное, чтобы определить, нужно ли мне перечислять продукты или напитки в следующем цикле.
Осталась одна хитрая часть: некоторые заглавные буквы требуют герундовой формы глагола; и некоторые из глаголов теряют
e
в преобразовании. Индекс крышки говорит нам, что необходимо или нет.(и благодаря порядку битов в кодировке я могу просто использовать символ ASCII для сравнения).
Но как? После того, как я немного поработал с регулярными выражениями, я просто добавил,
1
гдеe
нужно заменить,ing
и0
кудаing
нужно добавить, и пустьstrtr
выполняет свою работу.Это история вышеописанной версии. (Упаковано 1199 байт)
Игра в гольф состояла в основном из 3 шагов:
strtr
был расширен на все, кроме предмета, чтобы переместить переменные вstrtr
.strtr
.19-е слово
tast
было заменено заглавной буквой, чтобы избавиться от пары кавычек.Интересно, что случилось бы, если бы я также закодировал комбинации глагол / прилагательное.
Может быть, я мог бы победить Zsh; но я не уверен, если мне интересно, достаточно ли попробовать.
источник
Сетчатка,
12491192 байтВыход превышает ограничения TIO. Я хотел использовать
%`
этапы, чтобы избежать всего,$%'¶$%`
но по какой-то причине это не делает то, что я хочу. Редактировать: 57 байтов сохранено благодаря @ fireflame241.источник
ing
и `Ito` используются по несколько раз. Каждый вызов1
,2
и5
предшествует и за которым следует пробел, поэтому они могут быть введены в замещении. Точно так же6
и7
всегда следуют точки.3
кажется, используется только один раз.Bubblegum , 23353 байт
Ага. Большая часть этого не подходит для ответа, так что ... и код, и ссылка на TIO вставлены.
Код (hexdump кода)
Ссылка TIO (выходная информация превышает ограничения TIO)
источник