Dzięki @ComradeSparklePony za tytuł.
To wyzwanie powinno być bardzo proste. Otrzymasz trzy listy.
Pierwsza to lista imion w tytule.
Drugi to lista przymiotników pisanych małymi literami.
Trzecia to lista rzeczowników, pisana małymi literami.
Proszę losowo wybrać nazwę, opcjonalny przymiotnik, rzeczownik i wynik <Name>'s <adjective> <noun>
. Jednak każde słowo musi zaczynać się od tej samej litery. Możesz założyć, że wszystkie słowa zaczynają się na literę. Możesz również założyć (ale zwróć uwagę, jeśli tak zrobisz):
- że wszystkie słowa składają się wyłącznie ze znaków alfabetycznych
- że dla każdego imienia istnieje co najmniej jeden rzeczownik
- że dla każdego rzeczownika istnieje co najmniej jedna nazwa
Nie możesz jednak założyć, że istnieje przymiotnik dla konkretnej pary imion i rzeczowników, ponieważ przymiotnik jest opcjonalny, więc wynik nadal będzie ważny.
Nie musisz wybierać wspólnej litery w jednolity sposób, chociaż wszystkie dostępne litery muszą mieć niezerową szansę wystąpienia. Musisz jednak upewnić się, że wszystkie dane wyjściowe dla danej litery mają możliwie równą szansę wystąpienia w granicach generatora liczb losowych w Twoim języku. W przypadku przymiotnika jest to równoważne z dodatkowym wpisem oznaczającym „brak przymiotnika dla tej litery”, który ma taką samą szansę jak wszystkie inne przymiotniki dla tej litery.
Przykładowe listy danych wejściowych:
Joan Neil Nicola Oswald Sherman Stephanie
new novel old original second silent
jeep noun novel output second sheep snake
Przykładowe dane wyjściowe dla tych danych wejściowych (każda linia to osobny przykład):
Stephanie's second second
Sherman's silent snake
Oswald's original output
Nicola's novel novel
Neil's noun
Joan's jeep
Zwróć uwagę na brak dodatkowych spacji między słowami w dwóch ostatnich przykładach.
To jest golf golfowy , więc wygrywa najkrótszy kod, który nie łamie żadnych standardowych luk!
W mało prawdopodobnym przypadku, gdy to pomaga, możesz wpisać wszystko dużymi literami, ale nadal musisz wpisać w zdaniu.
j
przymiotnika, czy szansa wynosiłaby 4 na 9? Być może warto umieścić prawdopodobieństwa względem danych wyjściowych lub wyliczyć wszystkie dane wyjściowe - ponieważ rozumiem, że nie tylko „wszystkie dane wyjściowe dla danej litery ...”, ale także wszystkie różne dane wyjściowe powinny mieć jednakowe prawdopodobieństwo (podane odrębne wartości na każdej liście).Odpowiedzi:
Galaretka ,
27 2524 bajtów-1 dzięki Erikowi Outgolfer (użyj zera zamiast znaku spacji)
Pełny program przyjmujący argument w postaci sformatowanej w Pythonie listy list ciągów, która wypisuje dane wyjściowe do STDOUTt.
Wypróbuj online!
W jaki sposób?
źródło
05AB1E ,
24 2321 bajtówZakłada, że dla każdej nazwy istnieje rzeczownik, na co pozwala wyzwanie.
Wypróbuj online!
Wyjaśnienie
źródło
¯ª
i€˜
są sprytni! Miałem 26-bajtową odpowiedź, ale miałem problem z¯
zamiast wypełniać pustymi łańcuchami mogę użyć zamiast tego musiałem później ręcznie wyczyścić.R ,
155148 bajtów-7 bajtów dzięki Giuseppe (przy użyciu
*
dlasample
)Wypróbuj online!
Wykorzystuje próbkę odrzucenia: losowo narysuj nazwę, przymiotnik (być może pusty ciąg) i rzeczownik, aż do momentu dopasowania pierwszych liter. Ten warunek sprawdza się poprzez zliczenie, czy liczba unikalnych elementów w wektorze utworzonych z pierwszych liter plus pusty ciąg ma długość 2 - pozwala to na przymiotnik pusty.
Następnie wydrukuj wynik z dodatkową spacją, jeśli przymiotnik nie jest pusty.
Różne możliwości zaczynające się od tej samej litery mają jednakowe prawdopodobieństwo wystąpienia, ponieważ
sample
czerpie z rozkładu równomiernego. Najłatwiej to sprawdzić, pod warunkiem, że nazwa i rzeczownik zaczynają się od tej samej litery (co jest w porządku: jeśli nie, odrzucilibyśmy). Teraz uwarunkuj wydarzenie, które akceptujemy: oznacza to, że narysujemy pusty przymiotnik lub przymiotnik rozpoczynający się tą samą literą. Każda z tych możliwości wciąż ma jednakowe prawdopodobieństwo.źródło
sample
czerpie z jednolitego rozkładu. Najłatwiej to sprawdzić, pod warunkiem, że nazwa i rzeczownik zaczynają się od tej samej litery (co jest w porządku: jeśli nie, odrzucilibyśmy). Teraz uwarunkuj wydarzenie, które akceptujemy: oznacza to, że rysujemy albo pusty przymiotnik, albo przymiotnik rozpoczynający się tą samą literą. Każda z tych możliwości wciąż ma jednakowe prawdopodobieństwo.JavaScript (ES6),
139 124 122120 bajtówZaoszczędź 2 bajty dzięki @Neil
Pobiera dane wejściowe jako
(names,adjectives)(nouns)
.Wypróbuj online!
Lub sprawdź rozkład przy 5 milionach losowań
W jaki sposób?
Następnie sprawdzamy, czy wszystkie początkowe litery są identyczne z następującym wyrażeniem regularnym:
źródło
+[(o=g([,...a]))&&o+' ']+
oszczędza 2 bajty, tak myślę?Python 3 ,
161 154 151 147145 145 bajtów( Dzięki ArBo, EmbodimentOfIgnorance, Neil, który przekazał 2, 3 i 4 bajty do mojego pierwszego golfa! )
Wypróbuj online! (z wykonaniami 500k)
Pobiera trzy listy jako dane wejściowe.
Zakłada co najmniej jeden rzeczownik dla każdego imienia.
Ten sam wynik, więcej golf-y:
Python 3 , 145 bajtów
Wypróbuj online! (z wykonaniami 500k)
To tylko 140, jeśli końcowe białe spacje są dozwolone (przez usunięcie kwadratowej twarzy
[:-1]
)źródło
while t>""<t[0]!=w
. Możesz także zastąpić ostatni wierszprint(s+"'s",t+(t and" ")+o)
, upuszczającu=
trzeci wiersz.t
tylko raz, więc możesz zapisać 4 bajty, wstawiając kod. Myślę, że możesz przełączyć sięo
na użycie podobnego wzorca kodut
, a następnie zapisać kolejne 4 bajty, wpisując to również.o
: osiągam to: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 ), ale dodanie warunkowego spacji za pomocą opcjonalnego argumentu doy
kosztuje mnie 11 bajtówGalaretka , 28 bajtów
Wypróbuj online!
Napisałem to, zanim zobaczyłem krótszą odpowiedź @ JonathanAllan, ale pomyślałem, że warto opublikować, ponieważ stosuje inne podejście. Zapisano 3 bajty według sugestii @ EriktheOutgolfer dotyczącej tej odpowiedzi.
Pełny program pobierający listę list ciągów i domyślnie drukujący losowo wybrane aliteracje. Zakłada co najmniej jeden rzeczownik na imię.
źródło
C # (interaktywny kompilator Visual C #) , 176 bajtów
Wypróbuj online!
źródło
Czerwony , 179 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Scala ,
234226234206 bajtów-28 z powodu faktu, że myślałem, że musi zaakceptować StdIn, jest to teraz funkcja
Wypróbuj online!
Nie golfowany:
źródło
Ruby , 94 bajty
Wypróbuj online!
źródło
Ikona ,
167163 bajtówWypróbuj online!
Używa tego samego algorytmu co moja
Red
odpowiedź.źródło