Спасибо @ComradeSparklePony за название.
Эта задача должна быть очень простой. Вам даны три списка.
Первый - это список имен в заглавном случае.
Второй список прилагательных в нижнем регистре.
Третий список существительных, в нижнем регистре.
Пожалуйста, выберите случайным образом имя, необязательное прилагательное, существительное и вывод <Name>'s <adjective> <noun>
. Однако каждое слово должно начинаться с одной и той же буквы. Вы можете предположить, что все слова начинаются с буквы. Вы также можете предположить (но отметьте в своем ответе, если вы делаете):
- что все слова состоят исключительно из буквенных символов
- что для каждого имени есть хотя бы одно существительное
- что для каждого существительного есть хотя бы одно имя
Однако вы не можете предполагать, что прилагательное существует для определенной пары имени и существительного, так как прилагательное является необязательным, поэтому вывод все еще будет действительным.
Вам не нужно выбирать общую букву единообразно, хотя все доступные буквы должны иметь ненулевую вероятность появления. Однако вы должны убедиться, что все выходные данные для данной буквы имеют как можно более равные шансы на появление в пределах генератора случайных чисел на вашем языке. В случае с прилагательным это эквивалентно наличию дополнительной записи, означающей «нет прилагательного для этой буквы», которая имеет такой же шанс, как и все другие прилагательные для этой буквы.
Примеры списков ввода:
Joan Neil Nicola Oswald Sherman Stephanie
new novel old original second silent
jeep noun novel output second sheep snake
Пример выходов для этих входов (каждая строка является отдельным примером):
Stephanie's second second
Sherman's silent snake
Oswald's original output
Nicola's novel novel
Neil's noun
Joan's jeep
Обратите внимание, что в последних двух примерах между словами нет пробела.
Это код-гольф , поэтому выигрывает самый короткий код, который не нарушает стандартные лазейки!
В маловероятном случае, если это поможет, вы можете вводить все в верхнем регистре, но вам все равно нужно выводить в предложении.
j
прилагательных, шанс стал бы 4 из 9? Может быть, стоит поместить вероятности в зависимости от выходных данных или перечислить все выходные данные - насколько я понимаю, не только «все выходные данные для данной буквы ...», но также и все различные выходные данные должны иметь равную вероятность (учитывая различные значения в каждом списке).Ответы:
Желе ,
27 2524 байта-1 благодаря Эрику Искателю (используйте символ пробела вместо пробела)
Полная программа, принимающая аргумент в виде отформатированного в Python списка списков строк, который печатает вывод в STDOUTt.
Попробуйте онлайн!
Как?
источник
05AB1E ,
24 2321 байтПредполагается, что для каждого имени существует существительное, разрешенное вызовом.
Попробуйте онлайн!
объяснение
источник
¯ª
и€˜
умны! У меня был 26-байтовый ответ, но у меня были проблемы с исправлением двойного пробела, когда нет прилагательного.¯
Мне потребовалось некоторое время, чтобы понять, что я мог бы использовать вместо заполнения пустыми строками, которые мне пришлось потом убирать вручную.R ,
155148 байт-7 байт благодаря Джузеппе (используется
*
дляsample
)Попробуйте онлайн!
Используется выборка отклонения: нарисуйте случайным образом имя, прилагательное (возможно, пустую строку) и существительное, пока не совпадут первые буквы. Это условие проверяется путем подсчета, если количество уникальных элементов в векторе, образованном из первых букв плюс пустая строка, имеет длину 2 - это допускает пустое прилагательное.
Затем выведите результат с дополнительным пробелом, если прилагательное не пустое.
Различные возможности, начинающиеся с одной и той же буквы, имеют равные вероятности появления, поскольку
sample
основаны на равномерном распределении. Самый простой способ убедиться в этом состоит в том, чтобы при условии, что имя и существительное начинаются с одной и той же буквы (это нормально: если они этого не делают, мы бы отклонили). Теперь условие для события, которое мы принимаем: это означает, что мы рисуем либо пустое прилагательное, либо прилагательное, начинающееся с той же буквы. Каждая из этих возможностей все еще имеет равную вероятность.источник
sample
рисует из равномерного распределения. Самый простой способ убедиться в этом состоит в том, чтобы при условии, что имя и существительное начинаются с одной и той же буквы (это нормально: если они этого не делают, мы бы отклонили). Теперь условие для события, которое мы принимаем: это означает, что мы рисуем либо пустое прилагательное, либо прилагательное, начинающееся с той же буквы. Каждая из этих возможностей все еще имеет равную вероятность.JavaScript (ES6),
139 124 122120 байтСохранить 2 байта благодаря @Neil
Принимает вход как
(names,adjectives)(nouns)
.Попробуйте онлайн!
Или проверьте распределение на 5 миллионов розыгрышей
Как?
Затем мы проверяем, все ли начальные буквы идентичны с помощью следующего регулярного выражения:
источник
+[(o=g([,...a]))&&o+' ']+
экономит 2 байта, я думаю?Python 3 ,
161 154 151 147145 байтов( Спасибо ArBo, EmbodimentOfIgnorance, Нил, который вложил 2, 3 и 4 байта в мой первый гольф! )
Попробуйте онлайн! (с 500к казней)
Принимает три списка в качестве входных данных.
Принимает хотя бы одно существительное для каждого имени.
Тот же счет, больше гольф-у:
Python 3 , 145 байт
Попробуйте онлайн! (с 500к казней)
Это просто 140, если разрешены конечные пробелы (удалив квадратное лицо
[:-1]
)источник
while t>""<t[0]!=w
. Вы также можете заменить последнюю строкуprint(s+"'s",t+(t and" ")+o)
, опустивu=
в третьей строке.t
только один раз, поэтому вы можете сохранить 4 байта, вставив код. Я думаю, что вы можете переключитьсяo
на использование аналогичного шаблона кодаt
, а затем сохранить еще 4 байта, вставив это тоже.o
: я достиг этого:from random import*
c=choice
def f(N,a,n):
s=c(N);y=lambda p,e=[]:c([x for x in p if x[0]==s[0].lower()]+e);print(s+"'s",y(a,[""])+y(n))
( 137 ), но добавление условного пробела через необязательный аргумент argy
стоит мне 11 байтовЖеле , 28 байт
Попробуйте онлайн!
Написал это до того, как увидел короткий ответ @ JonathanAllan, но подумал, что это стоит опубликовать, поскольку в нем используется другой подход. Сохранено 3 байта предложением @ EriktheOutgolfer для этого ответа.
Полная программа, содержащая список списков строк и неявно печатающая случайно выбранную аллитерацию. Принимает хотя бы одно существительное на имя.
источник
C # (интерактивный компилятор Visual C #) , 176 байт
Попробуйте онлайн!
источник
Красный , 179 байт
Попробуйте онлайн!
Объяснение:
источник
Scala ,
234226234206 байт-28 из-за того, что я думал, что должен был принять StdIn, теперь это функция
Попробуйте онлайн!
Ungolfed:
источник
Рубин , 94 байта
Попробуйте онлайн!
источник
Icon ,
167163 байтаПопробуйте онлайн!
Использует тот же алгоритм, что и мой
Red
ответ.источник