Personaggi
Chiamiamo queste consonanti IPA inglesi di questi caratteri Unicode :
bdfhjklmnprstvwzðŋɡʃʒθ
E chiamiamo queste vocali IPA inglesi di questi caratteri Unicode :
aeiouæɑɔəɛɜɪʊʌː
(Sì, ː
è solo il segno vocale lungo, ma trattalo come una vocale ai fini di questa sfida.)
Infine, questi sono segni di stress primari e secondari :
ˈˌ
Si noti che
ɡ
( U + 0261 ) non è un g minuscolo e che l'indicatore di sollecitazione principaleˈ
( U + 02C8 ) non è un apostrofo eː
( U + 02D0 ) non è un due punti.
Il tuo compito
Data una parola, impila le vocali sopra le consonanti che seguono e posiziona gli indicatori di stress sotto le consonanti che precedono. (Come suggerisce il titolo della domanda, un tale sistema di scrittura, in cui sequenze di vocali consonanti sono raggruppate insieme come un'unità, è chiamato abugida .) Dato l'input ˈbætəlʃɪp
, produce l'output:
æə ɪ
btlʃp
ˈ
Una parola è garantita per essere una serie di consonanti, vocali e segni di stress, come definito sopra. Non ci saranno mai segni di stress consecutivi e saranno sempre posizionati all'inizio della parola e / o prima di una consonante.
Casi test
Potrebbero esserci vocali consecutive. Ad esempio, kənˌɡrætjʊˈleɪʃən
diventa
ɪ
ə æ ʊeə
knɡrtjlʃn
ˌ ˈ
Se una parola inizia con una vocale, stampala sulla "base" con le consonanti: əˈpiːl
diventa
ː
i
əpl
ˈ
Un caso di test con una vocale iniziale stressata: ˈælbəˌtrɔs
diventa
ə ɔ
ælbtrs
ˈ ˌ
Una lunga parola: ˌsuːpərˌkaləˌfrædʒəˌlɪstɪˌkɛkspiːæləˈdoʊʃəs
diventa
æ
ː ː ʊ
uə aə æ əɪ ɪɛ iəoə
sprklfrdʒlstkkspldʃs
ˌ ˌ ˌ ˌ ˌ ˈ
Un esempio senza senso con un dittongo iniziale, un sacco di impilamento delle vocali e nessun marker di stress: eɪbaeioubaabaaa
diventa
u
o
i a
eaa
ɪaaa
ebbb
Implementazione di riferimento
Il tuo programma dovrebbe produrre lo stesso output di questo 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()))
Regole
È possibile scrivere una funzione o un programma completo.
Se il tuo programma ha un carattere Unicode / tipo stringa, puoi presumere che input e output li usino. Altrimenti, o leggi / scrivi da STDIN, usa la codifica UTF-8.
È possibile produrre una stringa contenente nuove righe o un elenco di stringhe che rappresentano righe o una matrice di caratteri Unicode.
Ogni riga di output può contenere qualsiasi quantità di spazi finali. Se produci una stringa, potrebbe avere una nuova riga finale.
Il tuo programma dovrebbe produrre l'output corretto per parole arbitrariamente lunghe con catene vocali arbitrariamente lunghe, ma può supporre che la parola di input sia sempre valida.
Se non ci sono marcatori di stress, l'output può facoltativamente includere un'ultima riga vuota (che non contiene nulla o spazi).
Vince la risposta più breve (in byte).
ɜ
, quindi ora dovrebbe essere una vocale americana generale completa.
biiiiiiiiiiiʒ
(Come in "non le api")
ɜ
, l'hai lasciato fuori :-) E gli inglesi si lamenteranno del loroɒ