Một từ portmanteau là sự kết hợp của hai từ chiếm một phần của mỗi từ và biến chúng thành một từ mới. Ví dụ: sư tử + hổ => liger .
Chúng ta hãy viết một chương trình để tạo ra portmanteaus từ một cặp từ đầu vào. Máy tính không phải là tiếng Anh tốt nhất, vì vậy chúng tôi sẽ cần thiết lập một số quy tắc để đảm bảo rằng portmanteaus đầu ra dễ chịu cho mắt và tai.
(Ví dụ ở đây được hiển thị với dấu phân cách giữa tiền tố và hậu tố cho rõ ràng : li|ger
. Tuy nhiên, các đầu ra thực tế của chương trình không nên có dấu phân cách : liger
.)
- Mỗi portmanteau sẽ bao gồm một tiền tố không trống của từ đầu tiên được nối với một hậu tố không trống của từ thứ hai: yes to
li|ger
, no to|iger
. - Nếu tiền tố kết thúc bằng nguyên âm, hậu tố phải bắt đầu bằng phụ âm và ngược lại: yes to
lio|ger
hoặcl|er
, no tolio|iger
hoặcl|ger
. Bạn có thể quyết định nên tínhy
là nguyên âm hay phụ âm. Giải pháp của bạn phải chọn một tùy chọn và gắn bó với nó, tuy nhiên. - Từ kết quả không được chứa đầy đủ một trong hai từ gốc: có
lio|ger
, khônglion|iger
hoặc khôngli|tiger
.- Quy tắc này được giữ ngay cả khi phần trong câu hỏi được hình thành từ các phần của cả hai từ: với đầu vào là
two
+words
, đầu ratw|ords
vẫn là bất hợp pháp vì nó chứa chuỗi conwords
. (Đầu ra hợp lệ duy nhất cho cặp này sẽ làt|ords
.)
- Quy tắc này được giữ ngay cả khi phần trong câu hỏi được hình thành từ các phần của cả hai từ: với đầu vào là
Chương trình hoặc chức năng của bạn phải lấy hai từ và xuất / trả về một danh sách tất cả các portmanteaus dễ chịu có thể được hình thành từ những từ đó theo thứ tự đó.
Chi tiết
- Phương pháp đầu vào và đầu ra tiêu chuẩn được áp dụng. Sơ hở tiêu chuẩn bị cấm.
- Các từ sẽ chỉ bao gồm các chữ cái viết thường (hoặc, nếu bạn thích, chỉ các chữ cái viết hoa).
- Bạn có thể lấy hai từ đầu vào làm danh sách, tuple, hai đầu vào riêng biệt, một chuỗi với một dấu phân cách không phải là chữ cái, v.v.
- Định dạng đầu ra là linh hoạt tương tự; nếu bạn trả về hoặc xuất ra một chuỗi, nó sẽ được phân định để nó rõ ràng nơi một từ portmanteau kết thúc và chuỗi tiếp theo bắt đầu.
- Không nên có dấu phân cách trong một từ portmanteau.
- Không sao nếu danh sách đầu ra của bạn bao gồm các kết quả trùng lặp; cũng không sao để loại bỏ trùng lặp.
Các trường hợp thử nghiệm
> 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
Giải pháp tham khảo
Đây là một giải pháp tham khảo trong Pip (coi y
như một phụ âm).
Đây là môn đánh gôn : câu trả lời ngắn nhất trong mỗi ngôn ngữ sẽ thắng!