Эта задача вдохновлена серией книг для маленьких детей Фионы Уотт и Рэйчел Уэллс, которыми я недавно наслаждаюсь со своей дочерью.
В каждой книге мышь (иллюстрированная, но не часть текста) жалуется, что последовательность из 5 вещей одного типа не является ее вещью. Затем он подтверждает это, заявляя, что какой-то компонент вещи не обладает ожидаемым свойством.
В шестой раз спрашивая, мышь находит свою вещь и радуется, потому что у нее есть ожидаемое свойство.
Вот текст типичного примера:
That's not my bunny, its tail is too fluffy.
That's not my bunny, its paws are too rough.
That's not my bunny, its tail is too woolly.
That's not my bunny, its eyes are too shiny.
That's not my bunny, its nose is too wrinkled.
That's my bunny! Its ears are so soft.
Теперь большинство программистов поймут, что это очень алгоритмический метод создания текста. Поскольку это такой четкий процесс, мы должны быть в состоянии воспроизвести это, написав некоторый код.
Начнем с трех сборников слов:
things = ["dinosaur", "lamb", "princess", "reindeer", "train"]
parts = ["back", "bells", "body", "bows", "crown", "dress", "ears",
"engine", "fan", "flippers", "funnel", "hooves", "horns", "neck",
"nose", "roof", "sash", "side", "spines", "spots", "tail", "teeth",
"tiara", "wheels", "windows"]
properties = ["bumpy", "fluffy", "furry", "fuzzy", "glittery", "glossy",
"hairy", "red", "rough", "rusty", "shiny", "silky", "slippery",
"soft", "sparkly", "squashy", "thick", "velvety", "woolly"]
- Сначала мы решаем, что именно мы будем описывать.
- Затем 5 раз мы сгенерируем строку "Это не моя [вещь], ее [часть] слишком [свойство].
- Наконец, мы генерируем строку «Это моя [вещь]! Ее [часть] так [свойство]!
Соревнование
- Создайте текст истории "Это не мое ...".
- Он не должен последовательно воспроизводить один и тот же текст.
- Это код гольф, поэтому попытайтесь сделать это наименьшим количеством байтов.
- Используйте любой язык, какой пожелаете.
- Пробел не имеет значения, но между строк должен быть символ перевода строки.
- Списки исходных слов не являются частью вашего ответа (в TIO их можно добавить в заголовок).
- Вы можете переименовать списки исходных слов.
- Вывод может быть выведен на терминал или текст, сгенерированный в объект.
- Пожалуйста, включите ссылку на онлайн-переводчика.
- Проигнорируйте множественное число, "его рога" в порядке.
- Это не должно иметь смысла. Если воронка вашей принцессы слишком пушистая, просто скажите так.
Образец вывода:
That's not my train, its engine is too rusty.
That's not my train, its hooves is too thick.
That's not my train, its sash is too fuzzy.
That's not my train, its tail is too velvety.
That's not my train, its horns is too glittery.
That's my train! Its hooves is so hairy.
Удачного игры в гольф!
Ответы:
05AB1E , 63 байта
Попробуйте онлайн.
68 байт версия, которая не выводит дублированных частей или свойств:
Попробуйте онлайн.
Обе программы предполагают, что список вещей является первым входом, а список, содержащий список частей и список свойств, является вторым входом.
Объяснение:
Посмотрите эту подсказку 05AB1E (раздел Как пользоваться словарем? ), Чтобы понять, почему
“€Š's€¯ ÿ!€ç ÿ€ˆ€Ê ÿ.“
есть"that's my ÿ! its ÿ is so ÿ."
и“€Š's€–€¯ ÿ,€ç ÿ€ˆ…« ÿ.“
есть"that's not my ÿ, its ÿ is too ÿ."
.источник
Python 3 , 149 байт
Попробуйте онлайн!
-9 байт благодаря movatica
источник
Древесный уголь , 72 байта
Попробуйте онлайн! Ссылка на подробную версию кода. Ожидает, что массивы вещей, частей и свойств будут находиться в переменных
θ
,η
иζ
, что легче всего организовать, предоставляя их во входных данных, а не в заголовке. Объяснение:Выберите случайную вещь.
Напечатайте пять отрицательных предложений.
Напечатайте положительное предложение.
источник
Japt v2.0a0
-R
, 73 байтаПринимает три списка как
U
,V
иW
. В любом случае это входные переменные по умолчанию, поэтому просто поместите три списка в разделе ввода.Попытайся
источник
PowerShell , 147 байт
Эта основная программа не будет повторять какую-либо часть или свойство в прогоне и имеет разумную рандомизацию.
Попробуйте онлайн!
Написание
get-random
так много раз стоит так много символов! Тем не менее, если вы не хотите, чтобы детали и свойства повторялись, я не вижу возможности сократить это в PowerShell. Если вы не переместите первые 3 линейных канала в конец 3 строк назначения в заголовке. Иметь что-то вродеНо это похоже на то, что он обманывает, и все еще не побеждает ответ Нейла.
Редактировать: Спасибо за советы Мэтта, и спасибо AdmBorkBork за их уточнение, удаление 3 наборов
get-
текста сократило его до 159 байт, затем еще немного гольфа от Adm уменьшило его до 147. Код, который я думал, позволял дублировать и Противоречивые высказывания составили 144 символа после применения одинаковых советов по гольфу.Попробуйте онлайн!
Однако он не только имеет тенденцию повторять одно и то же несколько раз, но и требует, чтобы ваши входные данные содержали одинаковое количество элементов. Я считаю, что используемый генератор псевдослучайных чисел сильно зависит от часов, и быстрые повторные вызовы к нему часто могут привести к тому же результату. Тогда у него есть условие, что он использует весь список, только если все списки имеют одинаковую длину. С сохранением всего 3-5 символов и таким количеством предостережений, я предпочитаю код в начале этого поста.
источник
Get-
отGet-Random
. Это глагол по умолчанию проверяется при оценке команд.Желе , 72 байта
Попробуйте онлайн!
источник
JavaScript, 129
input - три массива, возвращает строку
источник
Рубин , 128 байт
Попробуйте онлайн!
источник
C # ,
204203 байтаЭто мой первый ответ на этом сайте, поэтому я надеюсь, что он работает хорошо. Также нужны эти три вещи, но в зависимости от вопроса они не учитываются:
Попробуйте онлайн!
Еще один байт благодаря Сок.
источник
\r
не требуется, который сэкономит вам 2 байта.APL (Dyalog Unicode) , 117 байтов SBCS
Попробуйте онлайн!
?N
генерирует случайный индекс среди первых N индексов.M?N
генерирует M случайных индексов (без замены) среди первых N индексов.,
это конкатенацияt←T⊃⍨
... выбирает случайную вещь и называет ееt
для повторного использования в последней строке.∘,¨
объединяет строку слева с каждой строкой справа.,¨
объединяет каждую строку слева с каждой строкой справа.↑
изменяет список строк в символьную матрицу, чтобы он печатался правильно.источник
Pyth ,
887876 байтовПопробуйте онлайн!
Код, представленный выше, требует следующего заголовка:
Есть небольшая проблема с использованием функции «Заголовок» в TIO с Pyth, так как похоже, что TIO объединяет блоки кода на новых строках, а новые строки играют важную роль в Pyth. Вот ссылка на тот же код с использованием блока «Заголовок» с ненужной строкой в выводе.
Изменить: Переписать в гольф 10 байтов, предыдущая версия:
J+" my "ONV5%"That's not%s, its %s is too %s."[JOGOH;%"That's%s! Its %s is so %s."[JOGOH
источник
Perl 5,10, 127 байт
Беги с
perl -M5.010 -f filename.pl
.источник
JavaScript ES6, 149 (+15?) Байтов
источник
Пакетный файл,
434424 + 7 байтВыполнено через
cmd/q/c
.Код не учитывается
Код считается
Я рассмотрю некоторые проблемы, с которыми вам придется столкнуться, и объясню / оправдаю то, что я сделал, чтобы другие могли улучшить.
Выберите случайный элемент из массива, который
я сделал, сгенерировав случайное число между
1
иn
гдеn
количество элементов в этом массиве. Затем я использовал это случайное число в качестве токена для захвата в каждомfor
цикле (tokens=%r%
). Поскольку я сделал это таким образом, я больше не мог вкладывать этиfor
циклы, так какtokens=!r!
у меня не работало (с отложенным расширением). Это позволило бы сэкономить немало байтов, поскольку избавило бы от необходимости сохранять токены как переменные (set x=%%x
).Генерация случайных чисел
m
случайных чисел - это мой макрос генерации случайных чисел. Делая это таким образом, вы экономите 32 байта по сравнению сset/ar=%random%%%n+1
каждой строкой. Вы можете полу-обмануть и решить, что токеныy
иz
должны быть одним и тем же элементом:Это, хотя и сохраняет некоторую случайность, исключает последние 6 элементов
c
. Это позволит сэкономить минимум 20 байтов, но я не думаю, что это соответствует требованиям ОП.Теоретические улучшения
Я потратил довольно много времени, пытаясь заставить этот «псевдокод» работать, сохраняя при этом байты:
К сожалению, установка для этого оказывается слишком много байтов, чтобы быть прибыльной (приходится реализовывать в <144 байтов), но я не могу избавиться от ощущения, что добавление последних 4 строк кода является излишним и излишним.
источник
The lists of source words are not part of your answer (in TIO they can be added to the header).
set a=%~1
и т. Д.чернила , 119 байт
Со списками, определенными как
Попробуйте онлайн!
Хотя в зависимости от того, что считается списком, есть и другие подходы. Если список может быть функцией, которая случайным образом возвращает элемент списка, следующий подход составляет всего 91 байт:
(«списки» определены следующим образом)
Попробуйте онлайн!
Там также следующий подход.
Попробуйте онлайн!
Это решение составляет 389 байт, но если литералы тасования (которые в этом сценарии не могут быть перемещены) считаются определениями списка и могут быть исключены из числа байтов, это уменьшается до 80 байт.
источник
Bash + awk, 209 байт
Попробуйте онлайн!
Принимает входные данные как
things parts properties
где каждый является файлом с одним элементом в строке нужного типа.Это файлово-ориентированный подход. Позже можно попробовать подход на основе массива, чтобы посмотреть, можно ли его улучшить.
источник
Python 3, 130 байт
Буквально принимая ваши требования и возвращая каретки по одному байту каждый:
источник