Słowo kufer to połączenie dwóch słów, które bierze udział w każdym słowie i czyni je jednym nowym słowem. Na przykład lew + tygrys => liger .
Napiszmy program do generowania portmanteaus z pary słów wejściowych. Komputery nie są najlepsze w języku angielskim, więc musimy ustalić pewne zasady, aby portmanteaus wyjściowe były przyjemne dla oka i ucha.
(W tym miejscu pokazano przykłady z separatorem między prefiksem i sufiksem:. li|ger
Jednak rzeczywiste wyjścia programu nie powinny mieć separatora:. liger
)
- Każdy portmanteau będzie składał się z niepustego przedrostka pierwszego słowa połączonego z niepustym przyrostkiem drugiego słowa: tak na
li|ger
, nie na|iger
. - Jeśli prefiks kończy się samogłoską, sufiks musi zaczynać się spółgłoską i odwrotnie: tak na
lio|ger
lubl|er
, nie nalio|iger
lubl|ger
. Możesz zdecydować, czy liczyćy
jako samogłoskę czy spółgłoskę. Twoje rozwiązanie musi jednak wybrać jedną opcję i pozostać przy niej. - Wynikowe słowo nie może zawierać żadnego z oryginalnych słów w całości: tak
lio|ger
, nie,lion|iger
lubli|tiger
.- Ta reguła obowiązuje nawet wtedy, gdy dana część jest utworzona z części obu słów: z wprowadzeniem
two
+words
, wyjścietw|ords
jest nadal nielegalne, ponieważ zawiera podłańcuchwords
. (Jedyne prawidłowe dane wyjściowe dla tej pary tot|ords
.)
- Ta reguła obowiązuje nawet wtedy, gdy dana część jest utworzona z części obu słów: z wprowadzeniem
Twój program lub funkcja musi wziąć dwa słowa i wypisać / zwrócić listę wszystkich przyjemnych portmanteaus, które można utworzyć z tych słów w tej kolejności.
Detale
- Obowiązują standardowe metody wejścia i wyjścia . Standardowe luki są zabronione.
- Słowa będą się składać tylko z małych liter (lub, jeśli wolisz, tylko z wielkich liter).
- Możesz wziąć dwa słowa wejściowe jako listę, krotkę, dwa osobne dane wejściowe, pojedynczy ciąg znaków z nieliterowym ogranicznikiem itp.
- Format wyjściowy jest podobnie elastyczny; jeśli zwrócisz lub wyślesz ciąg, należy go oddzielić tak, aby było jasne, gdzie kończy się jedno słowo portmanteau, a następne zaczyna.
- W wyrazie portmanteau nie powinno być żadnych ograniczników.
- W porządku, jeśli twoja lista wyników zawiera duplikaty wyników; można również usunąć duplikaty.
Przypadki testowe
> lion, tiger
< liger, ler, liger, lir, lioger, lior
> tiger, lion
< tion, ton, tin, tigion, tigon, tigen
> spoon, fork
< sork, spork, spork, spok, spoork, spook
> smoke, fog
< sog, smog, smog, smokog
> gallop, triumph
< giumph, gumph, gariumph, gamph, gaph, gah, galiumph, galumph, galliumph, gallumph, galloriumph, gallomph, galloh
> breakfast, lunch
< bunch, brunch, brench, brech, breh, breanch, breach, breah, breakunch, breakfunch, breakfanch, breakfach, breakfah, breakfasunch
> two, words
< tords
> harry, ginny (if y is treated as a consonant)
< hinny, hanny, hany, hay, harinny, harrinny
> harry, ginny (if y is treated as a vowel)
> hinny, hy, hanny, hany, harinny, hary, harrinny
Rozwiązanie referencyjne
Oto rozwiązanie odniesienia w Pip (traktuje y
jako spółgłoskę).
To jest golf golfowy : wygrywa najkrótsza odpowiedź w każdym języku!
Odpowiedzi:
05AB1E , 28 bajtów
y
jest samogłoską (ta sama liczba bajtów, co spółgłoska).Wypróbuj online! lub jako nieznacznie zmodyfikowany pakiet testowy
źródło
ʒs¢Z_
;ʒsåO_
;ʒsм__
; itd.Siatkówka , 72 bajty
Wypróbuj online!
źródło
Lw$`(?<=[aeiou])(.+),(.+)(?<!^\2\1,\2)(?!\1)(?=[^aeiou])|(?<=[^aeiou])(.+),(.+)(?<!^\4\3,\4)(?!\3)(?=[aeiou])
ale nie mogłem się skoncentrować na grze w golfa z powodu bólu głowy.(?=.(?<=[aeiou]\1[^aeiou]|[^aeiou]\1[aeiou]))
a następnie potrzebowałem prawdopodobnie co najmniej sześciu iteracji, aby zejść tam, gdzie jest teraz.^
w moim poprzednim komentarzu są błędne) Rzeczywiście, nigdy nie pomyślałbym o tej()|.()
sztuczce, prawdopodobnie zatrzymałbym sięLw$`(?<=([aeiou])|.)((.+),(.+))(?<!\4\2)(?!\3)(?=(?(1)[^aeiou]|[aeiou]))
.Pyth , 38 bajtów
Dane wejściowe to lista dwóch słów, a y nie jest traktowane jako spółgłoska.
Spróbuj go online tutaj , lub sprawdzić wszystkie przypadki testowe od razu tutaj .
źródło
Java 8,
228225215 bajtówPobiera dwa ciągi w składni curry i zwraca ciąg. Traktuje
y
jako spółgłoskę. Wypróbuj online tutaj .Dzięki DLosc za grę w golfa 2 bajty.
Nie golfowany:
źródło
Japt , 32 bajty
Japt Interpreter
Oszczędność 10 bajtów dzięki jaśniejszemu zrozumieniu składni Japt przez Shaggy'ego.
Zapisano 8 bajtów dzięki nowej funkcji języka
Zaoszczędzono 2 bajty dzięki sugestiom ETHproductions
Najnowsza wersja Japt wprowadziła funkcję produktu kartezjańskiego, która pozwoliła zaoszczędzić sporo bajtów i pozwoliła mi przywrócić kolejność wejść (więc „lew” „tygrys” wyprowadza „liger” i tak dalej). „y” jest nadal traktowane jako spółgłoska.
Wyjaśnienie:
źródło
Python 3 ,
156150 bajtówUważałem się za
y
spółgłoskę.-6 bajtów dzięki Jonathanowi Frechowi
Wypróbuj online!
źródło
lambda x=0
, aby zapisać irytująco 0 znaków.lambda a,b,v='aeiou',r=range:{a[:i]+b[j:]for i in r(1,len(a))for j in r(1,len(b))if((a[i-1]in v)^(b[j]in v))*0**(a in a[:i]+b[j:]or b in a[:i]+b[j:])}
(Jeszcze 150)JavaScript (ES6), 124 bajty
Pobiera 2 słowa w składni curry
(a)(b)
i drukuje wynikialert()
. Zakłada, że y jest spółgłoską.Wypróbuj online!
źródło
Galaretka , 27 bajtów
Wypróbuj online!
Yy jest spółgłoską. Oba przypadki obsługiwane. Zwraca duplikaty.
Dane wyjściowe zostały upiększone przez TIO. Usuń
+/€
ze stopki, aby zobaczyć rzeczywiste wyjście.źródło
C ++ 11,
217202 bajtówCzęsto korzysta z
std::string#find
. Traktujey
jako spółgłoskę. Wypróbuj online tutaj .Nie golfowany:
źródło
Python 2 ,
179176166162 bajtówWypróbuj online!
3 bajty od Jonathana Frecha . I 10 bajtów dzięki za Matt .
W moim świecie
y
nie ma samogłoski. (To wycie!)źródło
t) if
it) or []
.(s in w)<1>(t in w)
.Rubin ,
113 112 109104 bajtówy
jest spółgłoskąPowoduje to wygenerowanie tych samych duplikatów, co w przykładach w pytaniu. Muszę używać tej samej pętli
Wypróbuj online!
źródło
Emacs Lisp , 306 + 13 = 319 bajtów
+13 dla
(require'seq)
Wypróbuj online!
Definiuje anonimową funkcję lambda. Zwraca sekwencję portmanteaus oddzielonych znakiem nowej linii, z których każda jest otoczona cudzysłowami. Wskazówki dotyczące gry w golfa są mile widziane. Litera
y
jest uważany za spółgłoskę.Bez golfa
źródło