Vielen Dank an @ComradeSparklePony für den Titel.
Diese Herausforderung sollte sehr einfach sein. Sie erhalten drei Listen.
Das erste ist eine Liste der Vornamen, in Titelbuchstaben.
Die zweite ist eine Liste von Adjektiven in Kleinbuchstaben.
Das dritte ist eine Liste von Substantiven in Kleinbuchstaben.
Bitte wählen Sie nach dem Zufallsprinzip einen Namen, ein optionales Adjektiv und ein Substantiv aus und geben Sie es aus <Name>'s <adjective> <noun>
. Jedes Wort muss jedoch mit demselben Buchstaben beginnen. Sie können davon ausgehen, dass alle Wörter mit einem Buchstaben beginnen. Sie können auch annehmen (aber notieren Sie in Ihrer Antwort, wenn Sie dies tun):
- dass alle Wörter nur aus Buchstaben bestehen
- dass es für jeden Namen mindestens ein Nomen gibt
- dass es für jedes Nomen mindestens einen Namen gibt
Sie können jedoch nicht davon ausgehen, dass ein Adjektiv für ein bestimmtes Paar aus Name und Nomen vorhanden ist, da das Adjektiv optional ist und die Ausgabe weiterhin gültig ist.
Sie müssen den freigegebenen Buchstaben nicht einheitlich auswählen, obwohl alle verfügbaren Buchstaben eine Wahrscheinlichkeit ungleich Null haben müssen. Sie müssen jedoch sicherstellen, dass alle Ausgaben für einen bestimmten Buchstaben innerhalb der Grenzen des Zufallszahlengenerators Ihrer Sprache mit möglichst gleicher Wahrscheinlichkeit erfolgen. Im Fall des Adjektivs entspricht dies einem zusätzlichen Eintrag, der "kein Adjektiv für diesen Buchstaben" bedeutet und die gleiche Chance hat wie alle anderen Adjektive für diesen Buchstaben.
Beispiel-Eingabelisten:
Joan Neil Nicola Oswald Sherman Stephanie
new novel old original second silent
jeep noun novel output second sheep snake
Beispielausgaben für diese Eingaben (jede Zeile ist ein separates Beispiel):
Stephanie's second second
Sherman's silent snake
Oswald's original output
Nicola's novel novel
Neil's noun
Joan's jeep
Beachten Sie in den letzten beiden Beispielen kein zusätzliches Leerzeichen zwischen den Wörtern.
Das ist Code-Golf , also gewinnt der kürzeste Code, der keine Standardlücken durchbricht!
In dem unwahrscheinlichen Fall, dass es hilft, können Sie alles in Großbuchstaben eingeben, aber Sie müssen immer noch in Satzbuchstaben ausgeben.
j
Adjektiv da wären, würde die Chance 4 in 9 werden? Könnte es wert sein, Wahrscheinlichkeiten gegen Ausgaben zu setzen oder alle Ausgaben aufzulisten - da ich verstehe, dass nicht nur "alle Ausgaben für einen bestimmten Buchstaben ...", sondern auch alle unterschiedlichen Ausgaben die gleiche Wahrscheinlichkeit haben sollten (gegebene unterschiedliche Werte in jeder Liste).Antworten:
Jelly ,
27 2524 Bytes-1 danke an Erik den Outgolfer (benutze eine Null anstelle eines Leerzeichens)
Ein vollständiges Programm, das ein Argument in Form einer Python-formatierten Liste von String-Listen akzeptiert und die Ausgabe an STDOUTt ausgibt.
Probieren Sie es online!
Wie?
quelle
05AB1E ,
24 2321 BytesAngenommen, es gibt ein Substantiv für jeden Namen, wie es die Herausforderung zulässt.
Probieren Sie es online!
Erläuterung
quelle
¯ª
und€˜
sind schlau! Ich hatte eine 26-Byte-Antwort, hatte aber Probleme, das doppelte Leerzeichen zu¯
anstelle des Füllens mit leeren Zeichenfolgen später manuell aufräumen musste.R ,
155 bis148 Bytes-7 Bytes dank Giuseppe (mit
*
fürsample
)Probieren Sie es online!
Verwendet Ablehnungsstichproben: Zeichnen Sie einen Namen, ein Adjektiv (möglicherweise die leere Zeichenfolge) und ein Substantiv nach dem Zufallsprinzip, bis die ersten Buchstaben übereinstimmen. Diese Bedingung wird überprüft, indem gezählt wird, ob die Anzahl der eindeutigen Elemente in dem aus den ersten Buchstaben gebildeten Vektor plus der leeren Zeichenfolge die Länge 2 hat - dies ermöglicht ein leeres Adjektiv.
Drucken Sie dann das Ergebnis mit einem zusätzlichen Leerzeichen aus, wenn das Adjektiv nicht leer ist.
Die unterschiedlichen Möglichkeiten, die mit dem gleichen Buchstaben beginnen, haben gleiche Auftrittswahrscheinlichkeiten, da
sample
sich aus der Gleichverteilung ergibt. Dies lässt sich am einfachsten feststellen, wenn der Name und das Substantiv mit demselben Buchstaben beginnen (was in Ordnung ist: Wenn dies nicht der Fall ist, lehnen wir ab). Jetzt Bedingung für das Ereignis, das wir akzeptieren: Das heißt, wir zeichnen entweder das leere Adjektiv oder ein Adjektiv, das mit demselben Buchstaben beginnt. Jede dieser Möglichkeiten hat immer noch die gleiche Wahrscheinlichkeit.quelle
sample
schöpft die Gleichverteilung aus. Dies lässt sich am einfachsten feststellen, wenn der Name und das Substantiv mit demselben Buchstaben beginnen (was in Ordnung ist: Wenn dies nicht der Fall ist, lehnen wir ab). Jetzt Bedingung für das Ereignis, das wir akzeptieren: Das heißt, wir zeichnen entweder das leere Adjektiv oder ein Adjektiv, das mit demselben Buchstaben beginnt. Jede dieser Möglichkeiten hat immer noch die gleiche Wahrscheinlichkeit.JavaScript (ES6),
139 124 122120 ByteSparen Sie 2 Bytes dank @Neil
Übernimmt die Eingabe als
(names,adjectives)(nouns)
.Probieren Sie es online!
Oder überprüfen Sie die Verteilung auf 5 Millionen Ziehungen
Wie?
Die HelferfunktionG
Wir prüfen dann, ob alle Anfangsbuchstaben mit dem folgenden regulären Ausdruck identisch sind:
quelle
+[(o=g([,...a]))&&o+' ']+
spart 2 bytes, denke ich?Python 3 ,
161 154 151 147145 Bytes( Danke, ArBo, Verkörperung der Unabhängigkeit, Neil, der 2, 3 und 4 Bytes zu meinem ersten Golf beigetragen hat! )
Probieren Sie es online!(mit 500k Ausführungen)
Nimmt drei Listen als Eingaben.
Nimmt mindestens ein Nomen für jeden Namen an.
Gleiche Punktzahl, mehr Golf:
Python 3 , 145 Bytes
Probieren Sie es online!(mit 500k Ausführungen)
Es ist nur 140, wenn nachfolgende Leerzeichen zulässig sind (durch Entfernen der quadratischen Fläche
[:-1]
)quelle
while t>""<t[0]!=w
. Sie können die letzte Zeile auch durchprint(s+"'s",t+(t and" ")+o)
Löschenu=
der dritten Zeile ersetzen .t
einmal, sodass Sie durch Einfügen des Codes 4 Bytes sparen können. Ich denke, Sie können umschalteno
, um ein ähnliches Codemuster zu verwendent
, und dann weitere 4 Bytes sparen, indem Sie das auch inlinieren.o
: Ich erreiche Folgendes :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 ) Aber das Hinzufügen des bedingten Leerzeichens über ein optionales Argument zuy
kostet mich 11 BytesGelee , 28 Bytes
Probieren Sie es online!
Schrieb dies, bevor ich die kürzere Antwort von @ JonathanAllan sah, fand es aber lohnenswert, es zu posten, da es einen anderen Ansatz verwendet. Gespeichert 3 Bytes von @ EriktheOutgolfers Vorschlag zu dieser Antwort.
Ein vollständiges Programm, das eine Liste von Zeichenfolgen aufnimmt und implizit eine zufällig ausgewählte Alliteration druckt. Nimmt mindestens ein Nomen pro Name an.
quelle
C # (Visual C # Interactive Compiler) , 176 Byte
Probieren Sie es online!
quelle
Rot , 179 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Scala ,
234226234206 Bytes-28 Da ich dachte, dass es StdIn akzeptieren muss, ist es jetzt eine Funktion
Probieren Sie es online!
Ungolfed:
quelle
Ruby , 94 Bytes
Probieren Sie es online!
quelle
Icon ,
167163 BytesProbieren Sie es online!
Verwendet den gleichen Algorithmus wie meine
Red
Antwort.quelle