Персонажи
Давайте назовем эти символы 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.
Вы можете создать строку, содержащую символы новой строки, или список строк, представляющих строки, или массив символов Юникода.
Каждая строка вывода может содержать любое количество конечных пробелов. Если вы создаете строку, она может содержать один завершающий символ новой строки.
Ваша программа должна выдавать правильный вывод для произвольно длинных слов с произвольно длинными цепочками гласных, но может предполагать, что входное слово всегда допустимо.
Если маркеров напряжения нет, ваш вывод может дополнительно включать в себя окончательную пустую строку (не содержащую ничего или пробелы).
Самый короткий ответ (в байтах) выигрывает.
ɜ
, так что теперь это должен быть полный набор американских гласных.
biiiiiiiiiiiʒ
(Как в «не пчелы»)
ɜ
, ты это не учел :-) И британцы будут жаловаться на ихɒ