Merci à @ComradeSparklePony pour le titre.
Ce défi devrait être très simple. On vous donne trois listes.
Le premier est une liste de prénoms, en majuscule.
Le second est une liste d'adjectifs, en minuscules.
Le troisième est une liste de noms, en minuscules.
Veuillez sélectionner au hasard un nom, un adjectif facultatif, un nom et une sortie <Name>'s <adjective> <noun>
. Cependant, chaque mot doit commencer par la même lettre. Vous pouvez supposer que tous les mots commencent par une lettre. Vous pouvez également supposer (mais notez dans votre réponse si vous le faites):
- que tous les mots sont composés uniquement de caractères alphabétiques
- qu'il y a au moins un nom pour chaque nom
- qu'il y a au moins un nom pour chaque nom
Vous ne pouvez cependant pas supposer qu'un adjectif existe pour une paire particulière de nom et de nom, car l'adjectif est facultatif et la sortie sera toujours valide.
Vous n'avez pas à sélectionner la lettre partagée de manière uniforme, bien que toutes les lettres disponibles doivent avoir une chance non nulle de se produire. Vous devez cependant vous assurer que toutes les sorties pour une lettre donnée ont autant de chances que possible de se produire dans les limites du générateur de nombres aléatoires de votre langue. Dans le cas de l'adjectif, cela équivaut à avoir une entrée supplémentaire signifiant "pas d'adjectif pour cette lettre" qui a la même chance que tous les autres adjectifs pour cette lettre.
Exemples de listes d'entrées:
Joan Neil Nicola Oswald Sherman Stephanie
new novel old original second silent
jeep noun novel output second sheep snake
Exemples de sorties pour ces entrées (chaque ligne est un exemple distinct):
Stephanie's second second
Sherman's silent snake
Oswald's original output
Nicola's novel novel
Neil's noun
Joan's jeep
Notez pas d'espace supplémentaire entre les mots dans les deux derniers exemples.
C'est le code-golf , donc le code le plus court qui ne casse aucune échappatoire standard gagne!
Dans le cas peu probable où cela aiderait, vous pouvez tout saisir en majuscules, mais vous devez toujours sortir en cas de phrase.
j
objectif, la chance deviendrait-elle 4 sur 9? Cela pourrait valoir la peine de placer des probabilités par rapport aux sorties, ou d'énumérer toutes les sorties - si je comprends bien, non seulement "toutes les sorties pour une lettre donnée ...", mais aussi toutes les sorties distinctes devraient avoir la même probabilité (étant donné des valeurs distinctes dans chaque liste).Réponses:
Gelée ,
27 2524 octets-1 grâce à Erik l'Outgolfer (utilisez un zéro au lieu d'un caractère espace)
Un programme complet acceptant un argument sous la forme d'une liste au format Python de listes de chaînes qui imprime la sortie sur STDOUTt.
Essayez-le en ligne!
Comment?
la source
05AB1E ,
24 2321 octetsSuppose qu'il y a un nom pour chaque nom, comme le permet le défi.
Essayez-le en ligne!
Explication
la source
¯ª
et€˜
sont intelligents! J'ai eu une réponse de 26 octets, mais j'ai eu du mal à corriger le double espace quand il n'y a pas d'adjectif ..¯
au lieu de remplir avec des chaînes vides que j'ai dû nettoyer manuellement plus tard.R ,
155148 bytes-7 octets grâce à Giuseppe (en utilisant
*
poursample
)Essayez-le en ligne!
Utilise l'échantillonnage de rejet: dessinez au hasard un nom, un adjectif (éventuellement la chaîne vide) et un nom jusqu'à ce que les premières lettres correspondent. Cette condition est vérifiée en comptant si le nombre d'éléments uniques dans le vecteur formé des premières lettres, plus la chaîne vide, est de longueur 2 - cela permet d'avoir un adjectif vide.
Imprimez ensuite le résultat, avec un espace supplémentaire si l'adjectif n'est pas vide.
Les différentes possibilités commençant par la même lettre ont des probabilités d'occurrence égales, puisque
sample
proviennent de la distribution uniforme. La façon la plus simple de voir cela est de conditionner que le nom et le nom commencent par la même lettre (ce qui est bien: s'ils ne le font pas, nous rejetterions). Conditionnons maintenant l'événement que nous acceptons: cela signifie que nous dessinons soit l'adjectif vide, soit un adjectif commençant par la même lettre. Chacune de ces possibilités a toujours une probabilité égale.la source
sample
s'inspire de la distribution uniforme. La façon la plus simple de voir cela est de conditionner que le nom et le nom commencent par la même lettre (ce qui est bien: s'ils ne le font pas, nous rejetterions). Conditionnons maintenant l'événement que nous acceptons: cela signifie que nous dessinons soit l'adjectif vide, soit un adjectif commençant par la même lettre. Chacune de ces possibilités a toujours une probabilité égale.JavaScript (ES6),
139 124 122120 octetsÉconomisez 2 octets grâce à @Neil
Prend l'entrée comme
(names,adjectives)(nouns)
.Essayez-le en ligne!
Ou consultez la répartition sur 5 millions de tirages
Comment?
Nous vérifions ensuite si toutes les lettres initiales sont identiques avec l'expression régulière suivante:
la source
+[(o=g([,...a]))&&o+' ']+
économise 2 octets, je pense?Python 3 ,
161 154 154 151 147145 octets( Merci ArBo, EmbodimentOfIgnorance, Neil qui ont contribué 2, 3 et 4 octets à mon premier golf! )
Essayez-le en ligne! (avec 500 000 exécutions)
Prend trois listes en entrée.
Suppose au moins un nom pour chaque nom.
Même score, plus de golf-y:
Python 3 , 145 octets
Essayez-le en ligne! (avec 500 000 exécutions)
Il n'est que de 140 si les espaces blancs arrière sont autorisés (en supprimant la face carrée
[:-1]
)la source
while t>""<t[0]!=w
. Vous pouvez également remplacer la dernière ligne parprint(s+"'s",t+(t and" ")+o)
, en supprimantu=
la troisième ligne.t
qu'une seule fois, vous pouvez donc économiser 4 octets en insérant le code. Je pense que vous pouvez basculero
pour utiliser un modèle de code similairet
, puis enregistrer 4 autres octets en insérant cela également.o
: j'atteins ceci: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 ) mais l'ajout de l'espace conditionnel, via un argument optionnel ày
, me coûte 11 octetsGelée , 28 octets
Essayez-le en ligne!
J'ai écrit cela avant de voir la réponse courte de @ JonathanAllan, mais j'ai pensé qu'il valait la peine d'être publié car il utilise une approche différente. Enregistré 3 octets par la suggestion de @ EriktheOutgolfer sur cette réponse.
Un programme complet prenant une liste de listes de chaînes et imprimant implicitement une allitération sélectionnée au hasard. Suppose au moins un nom par nom.
la source
C # (Visual C # Interactive Compiler) , 176 octets
Essayez-le en ligne!
la source
rouge , 179 octets
Essayez-le en ligne!
Explication:
la source
Scala ,
234226234206 octets-28 en raison du fait que je pensais qu'il devait accepter StdIn, c'est une fonction maintenant
Essayez-le en ligne!
Non golfé:
la source
Rubis , 94 octets
Essayez-le en ligne!
la source
Icône ,
167163 octetsEssayez-le en ligne!
Utilise le même algorithme que ma
Red
réponse.la source