합성어 단어는 각 단어의 일부를 소요하고 하나의 새로운 단어로 만드는 두 단어의 조합이다. 예를 들어 lion + tiger => liger 입니다.
한 쌍의 입력 단어에서 portmanteaus를 생성하는 프로그램을 작성해 봅시다. 컴퓨터는 영어에 능숙하지 않으므로 출력 포트만 티 우스가 눈과 귀에 좋도록 몇 가지 규칙을 설정해야합니다.
(여기에 예는 명확성을 위해 접두사와 접미사 사이에 구분 기호가 표시되어 li|ger
있습니다. 그러나 프로그램의 실제 출력에는 구분 기호가 없어야합니다 liger
.)
- 각 portmanteau는 첫 번째 단어의 비어 있지 않은 접두사와 두 번째 단어의 비어 있지 않은 접두사로 구성됩니다 : yes to
li|ger
, no to|iger
. - 접두사가 모음으로 끝나는 경우 접미사는 자음으로 시작해야하며 그 반대의 경우는 yes
lio|ger
또는 orl|er
, nolio|iger
또는 orl|ger
입니다. 모음 또는 자음 으로 계산할지 여부를 결정할 수 있습니다y
. 그러나 솔루션은 하나의 옵션을 선택해야합니다. - 결과 단어에는 원래 단어가 모두 포함되어서는 안됩니다. yes to
lio|ger
, no tolion|iger
또는li|tiger
.- 이 규칙은 문제의 부분이 두 단어의 일부로 구성되어 있어도 유지됩니다.
two
+ 를 입력words
하면 출력tw|ords
에 하위 문자열이 포함되어 있기 때문에 여전히 불법words
입니다. (이 쌍의 유일한 유효한 출력은입니다t|ords
.)
- 이 규칙은 문제의 부분이 두 단어의 일부로 구성되어 있어도 유지됩니다.
당신의 프로그램이나 기능은 두 단어를 가져 와서 그 순서대로 그 단어들로부터 형성 될 수있는 모든 즐거운 portmanteaus의 목록을 출력 / 반환해야합니다 .
세부
- 표준 입력 및 출력 방법이 적용됩니다. 표준 허점 은 금지되어 있습니다.
- 단어는 소문자로 구성되거나 원하는 경우 대문자만으로 구성됩니다.
- 두 개의 입력 단어를 목록, 튜플, 두 개의 개별 입력, 문자가 아닌 구분 기호가있는 단일 문자열 등으로 사용할 수 있습니다.
- 출력 형식도 비슷합니다. 문자열을 반환하거나 출력하는 경우 한 포트만 단어가 끝나고 다음 단어가 시작되는 곳이 명확 해 지도록 구분해야합니다.
- portmanteau 단어 안에 분리 문자가 없어야합니다.
- 출력 목록에 중복 결과가 포함되어 있으면 괜찮습니다. 중복을 제거해도됩니다.
테스트 사례
> 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
참조 솔루션
Pip 의 참조 솔루션은 다음과 같습니다 ( y
자음으로 처리 ).
이것은 코드 골프입니다 : 각 언어에서 가장 짧은 답변이 이깁니다!