Una palabra de portmanteau es una combinación de dos palabras que forma parte de cada palabra y las convierte en una sola palabra nueva. Por ejemplo, lion + tiger => liger .
Escribamos un programa para generar carteras a partir de un par de palabras de entrada. Las computadoras no son las mejores en inglés, por lo que tendremos que establecer algunas reglas para asegurarnos de que las carteras de salida sean agradables a la vista y al oído.
(Los ejemplos aquí se muestran con un separador entre el prefijo y el sufijo para mayor claridad:. li|ger
Sin embargo, las salidas reales del programa no deberían tener un separador:. liger
)
- Cada portmanteau consistirá en un prefijo no vacío de la primera palabra concatenado a un sufijo no vacío de la segunda palabra: sí a
li|ger
, no a|iger
. - Si el prefijo termina con una vocal, el sufijo debe comenzar con una consonante, y viceversa: sí a
lio|ger
ol|er
, no alio|iger
ol|ger
. Puedes decidir si contary
como vocal o consonante. Sin embargo, su solución debe elegir una opción y seguir con ella. - La palabra resultante no debe contener ninguna de las palabras originales en su totalidad: sí a
lio|ger
, no alion|iger
oli|tiger
.- Esta regla se cumple incluso si la parte en cuestión está formada por partes de ambas palabras: con la entrada de
two
+words
, la salidatw|ords
sigue siendo ilegal porque contiene la subcadenawords
. (La única salida válida para este par seríat|ords
).
- Esta regla se cumple incluso si la parte en cuestión está formada por partes de ambas palabras: con la entrada de
Su programa o función debe tomar dos palabras y generar / devolver una lista de todos los acolchados agradables que se pueden formar a partir de esas palabras en ese orden.
Detalles
- Se aplican métodos estándar de entrada y salida . Las lagunas estándar están prohibidas.
- Las palabras consistirán solo en letras minúsculas (o, si lo prefiere, solo en letras mayúsculas).
- Puede tomar las dos palabras de entrada como una lista, tupla, dos entradas separadas, una sola cadena con un delimitador sin letras, etc.
- El formato de salida es igualmente flexible; si devuelve o genera una cadena, debe delimitarse de modo que quede claro dónde termina una palabra de portmanteau y comienza la siguiente.
- No debe haber delimitadores dentro de una palabra de portmanteau.
- Está bien si su lista de resultados incluye resultados duplicados; También está bien eliminar duplicados.
Casos de prueba
> 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
Solución de referencia
Aquí hay una solución de referencia en Pip (trata y
como una consonante).
Este es el código de golf : ¡la respuesta más corta en cada idioma gana!