Персонажі
Давайте назвемо ці символи 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ʒ
(Як у "не бджіл")
ɜ
, ви його покинули :-) І британці поскарзяться на своєɒ