性格
我们将这些Unicode字符称为英语IPA辅音:
bdfhjklmnprstvwzðŋɡʃʒθ
我们将这些Unicode字符称为 英语IPA元音:
aeiouæɑɔəɛɜɪʊʌː
(是的,ː
这只是长元音标记,但出于此挑战的目的,请将其视为元音。)
最后,这些是主要和次要压力标记:
ˈˌ
注意,
ɡ
(U + 0261)不是小写的g,主应力标记ˈ
(U + 02C8)不是撇号,并且ː
(U + 02D0)不是冒号。
你的任务
给出一个单词,将元音堆叠在跟随的辅音之上,并将重音标记放置在其跟随的辅音下方。(正如问题标题所暗示的,这样的书写系统将辅音元音序列作为一个单元打包在一起,称为abugida。)给定输入ˈbætəlʃɪp
,产生输出:
æə ɪ
btlʃp
ˈ
甲字被保证是声母,韵母和应力标记的字符串,如上面所定义。永远不会有连续的重音标记,它们将始终放置在单词的开头和/或辅音之前。
测试用例
可能有连续的元音。例如,kənˌɡrætjʊˈleɪʃən
变为
ɪ
ə æ ʊeə
knɡrtjlʃn
ˌ ˈ
如果一个词以元音开头,打印在“基线”与辅音:əˈpiːl
变
ː
i
əpl
ˈ
一个测试用例的初始,强调元音:ˈælbəˌtrɔs
变
ə ɔ
ælbtrs
ˈ ˌ
一句话:ˌsuːpərˌkaləˌfrædʒəˌlɪstɪˌkɛkspiːæləˈdoʊʃəs
变成
æ
ː ː ʊ
uə aə æ əɪ ɪɛ iəoə
sprklfrdʒlstkkspldʃs
ˌ ˌ ˌ ˌ ˌ ˈ
具有初始元音,大量元音堆叠的,且无应激标记物无义例如:eɪbaeioubaabaaa
变
u
o
i a
eaa
ɪaaa
ebbb
参考实施
您的程序应产生与此Python脚本相同的输出:
consonants = 'bdfhjklmnprstvwzðŋɡʃʒθ'
vowels = 'aeiouæɑɔəɛɜɪʊʌː'
stress_marks = 'ˈˌ'
def abugidafy(word):
tiles = dict()
x = y = 0
is_first = True
for c in word:
if c in stress_marks:
tiles[x + 1, 1] = c
elif c in consonants or is_first:
y = 0
x += 1
tiles[x, y] = c
is_first = False
elif c in vowels:
y -= 1
tiles[x, y] = c
is_first = False
else:
raise ValueError('Not an IPA character: ' + c)
xs = [x for (x, y) in tiles.keys()]
ys = [y for (x, y) in tiles.keys()]
xmin, xmax = min(xs), max(xs)
ymin, ymax = min(ys), max(ys)
lines = []
for y in range(ymin, ymax + 1):
line = [tiles.get((x, y), ' ') for x in range(xmin, xmax + 1)]
lines.append(''.join(line))
return '\n'.join(lines)
print(abugidafy(input()))
规则
您可以编写函数或完整程序。
如果您的程序具有Unicode字符/字符串类型,则可以假定输入和输出使用了它们。如果不是,或者您从STDIN读/写,请使用UTF-8编码。
您可能会产生包含换行符的字符串,或者代表行的字符串列表,或者是Unicode字符数组。
输出的每一行可以包含任意数量的尾随空格。如果产生一个字符串,则可能只有一个尾随换行符。
您的程序应为带有任意长元音链的任意长单词产生正确的输出,但可以假定输入单词始终有效。
如果没有压力标记,则您的输出可以选择包含最后一个空行(不包含任何内容或空格)。
最短的答案(以字节为单位)获胜。
ɜ
,所以这应该是完整的通用美国元音集。
biiiiiiiiiiiʒ
(如“不是蜜蜂”)
ɜ
,您把它排除在外了:-)英国人将抱怨他们ɒ