ตัวละคร
มาเรียกตัวอักษรยูนิโค้ดเหล่านี้ว่าตัวอักษรIPA ภาษาอังกฤษ :
bdfhjklmnprstvwzðŋɡʃʒθ
และลองเรียกอักษร Unicode เหล่านี้ สระ IPA ภาษาอังกฤษ :
aeiouæɑɔəɛɜɪʊʌː
(ใช่ː
มันเป็นเพียงเสียงสระยาว แต่ถือว่าเป็นเสียงสระสำหรับจุดประสงค์ของการท้าทายนี้)
ในที่สุดเหล่านี้เป็นเครื่องหมายความเครียดหลักและรอง :
ˈˌ
โปรดทราบว่า
ɡ
( U + 0261 ) ไม่ใช่ตัวพิมพ์เล็ก g และเครื่องหมายเน้นหลักˈ
( U + 02C8 ) ไม่ใช่เครื่องหมายอะโพสโทรฟีและː
( U + 02D0 ) ไม่ใช่เครื่องหมายโคลอน
งานของคุณ
ให้เสียงสระซ้อนสระที่ด้านบนของพยัญชนะที่พวกเขาทำตามและวางเครื่องหมายความเครียดใต้พยัญชนะที่พวกเขานำหน้า (ในฐานะที่เป็นชื่อคำถามคำแนะนำเช่นระบบการเขียนที่ประกอบด้วยพยัญชนะสระ - เสียงสระเรียงกันเป็นหน่วยเรียกว่าabugidaเลย) รับข้อมูลˈbætəlʃɪp
ผลิตผลลัพธ์:
æə ɪ
btlʃp
ˈ
คำรับประกันได้ว่าจะสตริงของพยัญชนะสระและเครื่องหมายความเครียดตามที่ระบุไว้ข้างต้น จะไม่มีเครื่องหมายความเครียดติดต่อกันและพวกเขาจะถูกวางไว้ที่จุดเริ่มต้นของคำและ / หรือก่อนที่พยัญชนะ
กรณีทดสอบ
อาจมีเสียงสระติดต่อกัน ตัวอย่างเช่นkənˌɡrætjʊˈleɪʃən
กลายเป็น
ɪ
ə æ ʊeə
knɡrtjlʃn
ˌ ˈ
หากคำขึ้นต้นด้วยสระให้พิมพ์คำนั้นลงบน "พื้นฐาน" ด้วยพยัญชนะ: əˈpiːl
กลายเป็น
ː
i
əpl
ˈ
กรณีทดสอบที่มีสระเริ่มต้นที่เน้นเสียง: ˈælbəˌtrɔs
กลายเป็น
ə ɔ
ælbtrs
ˈ ˌ
คำยาว: ˌsuːpərˌkaləˌfrædʒəˌlɪstɪˌkɛkspiːæləˈdoʊʃəs
กลายเป็น
æ
ː ː ʊ
uə aə æ əɪ ɪɛ iəoə
sprklfrdʒlstkkspldʃs
ˌ ˌ ˌ ˌ ˌ ˈ
ตัวอย่างที่ไร้สาระพร้อมคำควบกล้ำเริ่มต้นจำนวนมากของเสียงสระซ้อนกันและไม่มีเครื่องหมายความเค้น: eɪbaeioubaabaaa
กลายเป็น
u
o
i a
eaa
ɪaaa
ebbb
การดำเนินการอ้างอิง
โปรแกรมของคุณควรสร้างผลลัพธ์เดียวกันกับสคริปต์ 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()))
กฎระเบียบ
คุณสามารถเขียนฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบ
หากโปรแกรมของคุณมีประเภทอักขระ / สตริง Unicode คุณสามารถสมมติว่าอินพุตและเอาต์พุตใช้สิ่งเหล่านั้นได้ ถ้าไม่เช่นนั้นหรือคุณอ่าน / เขียนจาก STDIN ให้ใช้การเข้ารหัส UTF-8
คุณสามารถสร้างสตริงที่มีการขึ้นบรรทัดใหม่หรือรายการของสตริงที่แทนแถวหรืออาร์เรย์ของอักขระ Unicode
เอาต์พุตแต่ละแถวอาจมีช่องว่างต่อท้ายจำนวนเท่าใดก็ได้ หากคุณสร้างสตริงมันอาจมีการขึ้นบรรทัดใหม่ต่อท้ายเดียว
โปรแกรมของคุณควรสร้างผลลัพธ์ที่ถูกต้องสำหรับคำที่ยาวโดยพลการที่มีสระเสียงยาวโดยพลการ แต่อาจคิดว่าคำที่ป้อนนั้นถูกต้องเสมอ
หากไม่มีเครื่องหมายระบุความกดดันเอาท์พุทของคุณอาจรวมแถวว่างสุดท้ายไว้ (ไม่มีสิ่งใดหรือเว้นวรรค)
คำตอบที่สั้นที่สุด (เป็นไบต์) ชนะ
ɜ
ดังนั้นนี่ควรเป็นสระสังทั่วไปของอเมริกาในขณะนี้
biiiiiiiiiiiʒ
(ใน "ไม่ใช่ผึ้ง")
ɜ
คุณออก :-) และอังกฤษจะบ่นเกี่ยวกับพวกเขาɒ