Karakter
Sebut saja karakter Unicode ini konsonan IPA Bahasa Inggris :
bdfhjklmnprstvwzðŋɡʃʒθ
Dan mari kita sebut karakter Unicode vokal IPA Bahasa Inggris ini :
aeiouæɑɔəɛɜɪʊʌː
(Ya, ː
itu hanya tanda vokal panjang, tetapi perlakukan itu sebagai vokal untuk tujuan tantangan ini.)
Akhirnya, ini adalah tanda stres primer dan sekunder :
ˈˌ
Perhatikan bahwa
ɡ
( U + 0261 ) bukan huruf kecil g, dan penanda stres primerˈ
( U + 02C8 ) bukan merupakan tanda kutip, danː
( U + 02D0 ) bukan titik dua.
Tugas Anda
Diberi kata, susun huruf vokal di atas konsonan yang mereka ikuti, dan tempatkan penanda tegangan di bawah konsonan yang didahului. (Seperti yang ditunjukkan oleh judul pertanyaan, sistem penulisan seperti itu, di mana sekuens konsonan-vokal dikemas bersama sebagai satu unit, disebut abugida .) Berdasarkan input ˈbætəlʃɪp
, hasilkan output:
æə ɪ
btlʃp
ˈ
Sebuah kata dijamin menjadi serangkaian konsonan, vokal, dan tanda tekanan, sebagaimana didefinisikan di atas. Tidak akan pernah ada tanda stres berturut-turut, dan mereka akan selalu ditempatkan pada awal kata dan / atau sebelum konsonan.
Uji kasus
Mungkin ada vokal berturut-turut. Misalnya, kənˌɡrætjʊˈleɪʃən
menjadi
ɪ
ə æ ʊeə
knɡrtjlʃn
ˌ ˈ
Jika sebuah kata dimulai dengan vokal, cetaklah pada "garis dasar" dengan konsonan: əˈpiːl
menjadi
ː
i
əpl
ˈ
Sebuah test case dengan huruf vokal awal yang ditekankan: ˈælbəˌtrɔs
menjadi
ə ɔ
ælbtrs
ˈ ˌ
Kata yang panjang: ˌsuːpərˌkaləˌfrædʒəˌlɪstɪˌkɛkspiːæləˈdoʊʃəs
menjadi
æ
ː ː ʊ
uə aə æ əɪ ɪɛ iəoə
sprklfrdʒlstkkspldʃs
ˌ ˌ ˌ ˌ ˌ ˈ
Contoh omong kosong dengan diftong awal, banyak susunan vokal, dan tanpa penanda stres: eɪbaeioubaabaaa
menjadi
u
o
i a
eaa
ɪaaa
ebbb
Implementasi referensi
Program Anda harus menghasilkan output yang sama dengan skrip Python ini:
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()))
Aturan
Anda dapat menulis fungsi atau program lengkap.
Jika program Anda memiliki karakter Unicode / tipe string, Anda dapat mengasumsikan input dan output menggunakannya. Jika tidak, atau Anda membaca / menulis dari STDIN, gunakan pengodean UTF-8.
Anda dapat menghasilkan string yang berisi baris baru, atau daftar string yang mewakili baris, atau array karakter Unicode.
Setiap baris output dapat berisi jumlah spasi tambahan. Jika Anda menghasilkan string, itu mungkin memiliki satu baris tambahan.
Program Anda harus menghasilkan output yang benar untuk kata-kata panjang sewenang-wenang dengan rantai vokal panjang sewenang-wenang, tetapi dapat mengasumsikan bahwa kata input selalu valid.
Jika tidak ada penanda tegangan, output Anda dapat secara opsional menyertakan baris kosong terakhir (tidak mengandung apa-apa, atau spasi).
Jawaban terpendek (dalam byte) menang.
ɜ
, jadi ini harus menjadi set lengkap vokal Jenderal Amerika sekarang.
biiiiiiiiiiiʒ
(Seperti pada "not the bees")
ɜ
, Anda meninggalkannya :-) Dan Inggris akan mengeluh tentang merekaɒ