Персонажи
Давайте назовем эти символы 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ʒ
(Как в «не пчелы»)Ответы:
NARS2000 APL, 138 байтов
источник
⍞←
поскольку подразумевается вывод. Кроме того, количество байтов должно быть ровно вдвое больше, чем количество символов, согласно этому . Так что это должно быть 138 байтов.Python, 222 байта
(202 символа)
Возвращает массив символов Unicode с массивом для каждой строки (содержащий одиночные пробелы для каждого необходимого пробела)
Не уверен, где можно получить приличный результат в Интернете (и у меня даже нет инструментов для его проверки).
Я загрузил версию для ideone, которая просто использует английские согласные и гласные с
,
.
ударными знаками и в качестве ударных, где я выдумал контрольные примеры для соответствия.источник
JavaScript (ES6), 181 байт
источник