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.
fonte
ɜ
, você o deixou de fora :-) E os britânicos vão reclamar dos seusɒ
ɜ
, então essa deve ser uma vogal geral da General American definida agora.biiiiiiiiiiiʒ
(como em "not the bees")Respostas:
NARS2000 APL, 138 bytes
fonte
⍞←
conforme a saída está implícita. Além disso, a contagem de bytes deve ser exatamente o dobro da contagem de caracteres, conforme isso . Portanto, isso deve ser 138 bytes.Python, 222 bytes
(202 caracteres)
Retorna uma matriz de caracteres unicode com uma matriz para cada linha (contendo espaços únicos para cada espaço necessário)
Ainda não sei onde é possível obter uma produção decente on-line (e eu nem tenho as ferramentas para testá-la corretamente aqui também).
Carreguei uma versão para ideone que apenas usa consoantes e vogais em inglês com
,
e.
como marcas de estresse, onde falsifiquei os casos de teste para estar em conformidade.fonte
JavaScript (ES6), 181 bytes
fonte