Postacie
Nazwijmy te znaki Unicode angielskimi spółgłosek IPA :
bdfhjklmnprstvwzðŋɡʃʒθ
Nazwijmy te znaki Unicode angielskimi samogłoskami IPA :
aeiouæɑɔəɛɜɪʊʌː
(Tak, ː
to tylko długi znak samogłoski, ale traktuj go jako samogłoskę do celów tego wyzwania).
Wreszcie są to pierwotne i wtórne znaki stresu :
ˈˌ
Zauważ, że
ɡ
( U + 0261 ) nie jest małą literą g, a główny marker stresuˈ
( U + 02C8 ) nie jest apostrofem, aː
( U + 02D0 ) nie jest dwukropkiem.
Twoje zadanie
Przy danym słowie ułóż samogłoski na podążających za nimi spółgłosek i umieść znaczniki naprężenia pod spółgłosek, które poprzedzają. (Jak sugeruje tytuł pytania, taki system pisania, w którym sekwencje spółgłoskowo-samogłoskowe są spakowane razem jako jednostka, nazywa się abugida .) Biorąc pod uwagę dane wejściowe ˈbætəlʃɪp
, uzyskaj wynik:
æə ɪ
btlʃp
ˈ
Słowo jest gwarancją ciąg spółgłosek, samogłosek i znaków stresu, jak zdefiniowano powyżej. Nigdy nie będzie kolejnych znaków naprężenia i zawsze będą one umieszczane na początku słowa i / lub przed spółgłoską.
Przypadki testowe
Mogą występować kolejne samogłoski. Na przykład kənˌɡrætjʊˈleɪʃən
staje się
ɪ
ə æ ʊeə
knɡrtjlʃn
ˌ ˈ
Jeśli słowo zaczyna się od samogłoski, wydrukuj je na „linii bazowej” ze spółgłoskami: əˈpiːl
staje się
ː
i
əpl
ˈ
Przypadek testowy z początkową, zaakcentowaną samogłoską: ˈælbəˌtrɔs
staje się
ə ɔ
ælbtrs
ˈ ˌ
Długie słowo: ˌsuːpərˌkaləˌfrædʒəˌlɪstɪˌkɛkspiːæləˈdoʊʃəs
staje się
æ
ː ː ʊ
uə aə æ əɪ ɪɛ iəoə
sprklfrdʒlstkkspldʃs
ˌ ˌ ˌ ˌ ˌ ˈ
Bzdurny przykład z początkowym dyftongiem, dużą ilością stosów samogłosek i bez znaczników stresu: eɪbaeioubaabaaa
staje się
u
o
i a
eaa
ɪaaa
ebbb
Realizacja referencyjna
Twój program powinien generować takie same dane wyjściowe jak ten skrypt w języku 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()))
Zasady
Możesz napisać funkcję lub pełny program.
Jeśli twój program ma znak / ciąg znaków Unicode, możesz założyć, że dane wejściowe i wyjściowe wykorzystują je. Jeśli nie, lub czytasz / piszesz ze STDIN, użyj kodowania UTF-8.
Możesz utworzyć ciąg zawierający znaki nowego wiersza lub listę ciągów reprezentujących wiersze lub tablicę znaków Unicode.
Każdy wiersz wyniku może zawierać dowolną liczbę końcowych spacji. Jeśli utworzysz ciąg znaków, może on mieć pojedynczą nową linię.
Twój program powinien wygenerować poprawny wynik dla dowolnie długich słów z dowolnie długimi łańcuchami samogłosek, ale może założyć, że słowo wejściowe jest zawsze poprawne.
Jeśli nie ma znaczników naprężenia, dane wyjściowe mogą opcjonalnie zawierać ostatni pusty wiersz (nie zawierający niczego lub spacji).
Najkrótsza odpowiedź (w bajtach) wygrywa.
ɜ
, więc powinien to być teraz pełny zestaw samogłosek amerykańskich.
biiiiiiiiiiiʒ
(jak w „nie pszczołach”)
ɜ
, pominęłeś :-) A Brytyjczycy będą narzekać na ichɒ