这个挑战基于我在阿尔托大学(Aalto University)上的一门编程课程,并包含来自该课程的测试案例。该材料经许可使用。
两年半前,英语中的尖刺主义面临挑战。但是,在芬兰,勺子主义要复杂得多。
芬兰语中的语
在芬兰语中,元音为aeiouyäö
,辅音为bcdfghjklmnpqrstvwxz
。(å
从技术上讲,这是芬兰语的一部分,但在此不予考虑。)
最基本的竖笛演奏只取每个单词的第一个元音以及它们前面的任何辅音,然后交换各部分:
henri kontinen -> konri hentinen
tarja halonen -> harja talonen
frakki kontti -> kokki frantti
ovi kello -> kevi ollo
长元音
有些单词包含两个相同的连续元音。在这种情况下,必须将元音对与另一个单词的第一个元音交换,缩短或延长元音以保持长度不变。
haamu kontti -> koomu hantti
kisko kaappi -> kasko kiippi
对于两个不同的连续元音,这不适用于:
hauva kontti -> kouva hantti
puoskari kontti -> kooskari puntti
同一连续字母中的三个或三个以上不会出现在输入中。
元音和声
芬兰语有这种可爱的东西,叫做元音和声。基本上,这意味着后元音 aou
和前元音 äöy
不应出现在同一单词中。
当交换前面或后面的元音成一个字,其他类型的单词的其余所有元音应该改变以匹配字的新的开始(a <-> ä
,o <-> ö
,u <-> y
):
köyhä kontti -> kouha köntti
hauva läähättää -> läyvä haahattaa
e
并且i
是中性的,并且可能与所有其他字母一起出现;将它们交换为一个单词一定不能导致其余单词的更改。
特别案例
元音和声不适用于某些词,包括许多借词和复合词。这些情况不需要“正确”处理。
挑战
给定两个单词,输出单词挖出的。
输入的单词将仅包含字符a-z
和äö
。您可以选择使用大写或小写,但是您的选择在单词和输入/输出之间必须保持一致。
I / O可以采用任何方便的格式进行。(单词应视为字符串或字符数组。)
这是代码高尔夫球,因此以字节为单位的最短解决方案为准。
测试用例
U+0308 COMBINING DIAERESIS
都应该可以处理U+00E4 LATIN SMALL LETTER A WITH DIAERESIS
。)
e
和i
是中性的,是fihus keksy
,huvu lehy
和lesmä prihti
可以接受的答案kehys fiksu
,levy huhu
并prisma lehti
分别?