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.
sumber
ɜ
, Anda meninggalkannya :-) Dan Inggris akan mengeluh tentang merekaɒ
ɜ
, jadi ini harus menjadi set lengkap vokal Jenderal Amerika sekarang.biiiiiiiiiiiʒ
(Seperti pada "not the bees")Jawaban:
NARS2000 APL, 138 byte
sumber
⍞←
saat output tersirat. Juga, jumlah byte harus tepat dua kali jumlah karakter, sesuai ini . Jadi ini harus 138 byte.Python, 222 byte
(202 karakter)
Mengembalikan array karakter unicode dengan array untuk setiap baris (berisi spasi tunggal untuk setiap ruang yang diperlukan)
Tidak yakin di mana orang bisa mendapatkan output yang layak secara online (dan saya bahkan belum punya alat untuk mengujinya dengan baik di sini).
Saya telah memuat versi ke ideone yang hanya menggunakan konsonan dan vokal bahasa Inggris dengan
,
dan.
sebagai tanda stres, di mana saya telah memalsukan kasus uji agar sesuai.sumber
JavaScript (ES6), 181 byte
sumber