Karakterler
Bu Unicode karakterlerine İngilizce IPA ünsüzleri diyelim :
bdfhjklmnprstvwzðŋɡʃʒθ
Ve şu Unicode karakterlerine İngilizce IPA ünlüleri diyelim :
aeiouæɑɔəɛɜɪʊʌː
(Evet, ː
sadece uzun sesli harftir, ancak bu zorluğun amacı için bir sesli harf olarak ele alın.)
Son olarak, bunlar birincil ve ikincil stres işaretleri :
ˈˌ
Not
ɡ
( U +, 0261 ), bir küçük g değildir ve birinci gerilim belirteçˈ
( u + 02C8 ) bir kesme işareti değildir veː
( u + 02D0 ), bir kolon değildir.
Senin görevin
Bir kelime söyledikçe, ünlüleri takip ettikleri ünsüzlerin üstüne koyun ve stres işaretlerini önünde bulundukları ünsüzlerin altına yerleştirin. (Soru başlığı ipucu olarak, ünsüz sesli harf dizilerinin bir birim olarak bir araya getirildiği böyle bir yazma sistemine abugida denir .) Girdi göz önüne alındığında ˈbætəlʃɪp
, çıktıyı üretin:
æə ɪ
btlʃp
ˈ
Bir kelimenin , yukarıda tanımlandığı gibi bir ünsüz, sesli harf ve stres işareti olduğu garanti edilir. Asla ardışık stres işaretleri olmayacak ve her zaman kelimenin başına ve / veya bir ünsüzden önce yerleştirilecektir.
Test senaryoları
Ardıl ünlüler olabilir. Örneğin, kənˌɡrætjʊˈleɪʃən
olur
ɪ
ə æ ʊeə
knɡrtjlʃn
ˌ ˈ
Bir kelime sesli harfle başlıyorsa, ünsüzlerle "taban çizgisine" yazdırın: əˈpiːl
olur
ː
i
əpl
ˈ
İlk, stresli sesli harfleri olan bir test vakası: ˈælbəˌtrɔs
olur
ə ɔ
ælbtrs
ˈ ˌ
Uzun bir kelime: ˌsuːpərˌkaləˌfrædʒəˌlɪstɪˌkɛkspiːæləˈdoʊʃəs
olur
æ
ː ː ʊ
uə aə æ əɪ ɪɛ iəoə
sprklfrdʒlstkkspldʃs
ˌ ˌ ˌ ˌ ˌ ˈ
İlk diphthong, çok sayıda sesli harf istifleme ve stres işareti olmayan saçma bir örnek: eɪbaeioubaabaaa
olur
u
o
i a
eaa
ɪaaa
ebbb
Referans uygulaması
Programınız bu Python betiğiyle aynı çıktıyı üretmelidir:
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()))
kurallar
Bir işlev veya tam bir program yazabilirsiniz.
Programınızın Unicode karakter / dize türü varsa, girişlerin ve çıkışların bunları kullandığını varsayabilirsiniz. Değilse veya STDIN'den okuma / yazma işlemi yaparsanız, UTF-8 kodlamasını kullanın.
Yeni satırlar içeren bir dize veya satırları temsil eden bir dize listesi veya bir Unicode karakter dizisi üretebilirsiniz.
Her çıktı sırası herhangi bir miktarda arka boşluk içerebilir. Bir dize oluşturursanız, tek bir sondaki yeni satır olabilir.
Programınız keyfi olarak uzun sesli harf zincirlerine sahip rastgele uzun kelimeler için doğru çıktıyı üretmelidir, ancak giriş kelimesinin her zaman geçerli olduğunu varsayabilir.
Stres işareti yoksa, çıktınız isteğe bağlı olarak son boş satır içerebilir (hiçbir şey veya boşluk içermez).
En kısa cevap (bayt cinsinden) kazanır.
ɜ
, bu yüzden şimdi tam bir Amerikan geneli sesli harf olmalı.
biiiiiiiiiiiʒ
("arılar değil" gibi) bir test örneği eklemek
ɜ
, dışarıda bıraktın :-) Ve İngilizler şikayet edecekɒ