Personagens
Vamos chamar essas consoantes IPA em inglês de caracteres Unicode :
bdfhjklmnprstvwzðŋɡʃʒθ
E vamos chamar esses caracteres Unicode de vogais IPA em inglês :
aeiouæɑɔəɛɜɪʊʌː
(Sim, ː
é apenas a marca da vogal longa, mas trate-a como uma vogal para o objetivo deste desafio.)
Finalmente, essas são estrias primárias e secundárias :
ˈˌ
Observe que
ɡ
( U + 0261 ) não é um g minúsculo, e o marcador de estresse primárioˈ
( U + 02C8 ) não é um apóstrofo, eː
( U + 02D0 ) não é um cólon.
Sua tarefa
Dada uma palavra, empilhe as vogais em cima das consoantes que seguem e coloque os marcadores de tensão sob as consoantes que precedem. (Como o título da pergunta sugere, esse sistema de escrita, em que sequências consoantes-vogais são agrupadas como uma unidade, é chamado de abugida .) Dada a entrada ˈbætəlʃɪp
, produza a saída:
æə ɪ
btlʃp
ˈ
Uma palavra é garantida como uma sequência de consoantes, vogais e marcas de estresse, conforme definido acima. Nunca haverá estresses consecutivos, e eles sempre serão colocados no início da palavra e / ou antes de uma consoante.
Casos de teste
Pode haver vogais consecutivas. Por exemplo, kənˌɡrætjʊˈleɪʃən
torna-se
ɪ
ə æ ʊeə
knɡrtjlʃn
ˌ ˈ
Se uma palavra começar com uma vogal, imprima-a na “linha de base” com as consoantes: əˈpiːl
torna - se
ː
i
əpl
ˈ
Um caso de teste com uma vogal estressada inicial: ˈælbəˌtrɔs
torna - se
ə ɔ
ælbtrs
ˈ ˌ
Uma palavra longa: ˌsuːpərˌkaləˌfrædʒəˌlɪstɪˌkɛkspiːæləˈdoʊʃəs
torna - se
æ
ː ː ʊ
uə aə æ əɪ ɪɛ iəoə
sprklfrdʒlstkkspldʃs
ˌ ˌ ˌ ˌ ˌ ˈ
Um exemplo sem sentido com um ditongo inicial, muito empilhamento de vogais e sem marcadores de estresse: eɪbaeioubaabaaa
torna - se
u
o
i a
eaa
ɪaaa
ebbb
Implementação de referência
Seu programa deve produzir a mesma saída que este script 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()))
Regras
Você pode escrever uma função ou um programa completo.
Se o seu programa possui um tipo de caractere / string Unicode, você pode assumir que entradas e saídas as utilizam. Caso contrário, ou você lê / escreve em STDIN, use a codificação UTF-8.
Você pode produzir uma sequência contendo novas linhas, uma lista de sequências representando linhas ou uma matriz de caracteres Unicode.
Cada linha de saída pode conter qualquer quantidade de espaços à direita. Se você produzir uma sequência, ela poderá ter uma única nova linha à direita.
Seu programa deve produzir a saída correta para palavras arbitrariamente longas com cadeias de vogais arbitrariamente longas, mas pode assumir que a palavra de entrada é sempre válida.
Se não houver marcadores de tensão, sua saída poderá incluir opcionalmente uma linha vazia final (sem nada ou espaços).
A resposta mais curta (em bytes) vence.
ɜ
, então essa deve ser uma vogal geral da General American definida agora.
biiiiiiiiiiiʒ
(como em "not the bees")
ɜ
, você o deixou de fora :-) E os britânicos vão reclamar dos seusɒ