Nhân vật
Chúng ta hãy gọi các ký tự Unicode này là phụ âm IPA tiếng Anh :
bdfhjklmnprstvwzðŋɡʃʒθ
Và hãy gọi các ký tự Unicode này nguyên âm IPA tiếng Anh :
aeiouæɑɔəɛɜɪʊʌː
(Vâng, ː
chỉ là dấu nguyên âm dài, nhưng coi nó như một nguyên âm cho mục đích của thử thách này.)
Cuối cùng, đây là những dấu hiệu căng thẳng chính và phụ :
ˈˌ
Lưu ý rằng
ɡ
( U + 0261 ) không phải là chữ thường g và dấu căng thẳng chínhˈ
( U + 02C8 ) không phải là dấu nháy đơn vàː
( U + 02D0 ) không phải là dấu hai chấm.
Nhiệm vụ của bạn
Đưa ra một từ, xếp các nguyên âm lên trên các phụ âm mà chúng theo sau và đặt các dấu căng thẳng bên dưới các phụ âm mà chúng đứng trước. (Như gợi ý tiêu đề câu hỏi, một hệ thống chữ viết, trong đó các chuỗi nguyên âm phụ âm được đóng gói cùng nhau như một đơn vị, được gọi là abugida .) Với đầu vào ˈbætəlʃɪp
, tạo đầu ra:
æə ɪ
btlʃp
ˈ
Một từ được đảm bảo là một chuỗi các phụ âm, nguyên âm và dấu trọng âm, như được định nghĩa ở trên. Sẽ không bao giờ có các dấu căng thẳng liên tiếp, và chúng sẽ luôn được đặt ở đầu từ và / hoặc trước một phụ âm.
Các trường hợp thử nghiệm
Có thể có nguyên âm liên tiếp. Ví dụ, kənˌɡrætjʊˈleɪʃən
trở thành
ɪ
ə æ ʊeə
knɡrtjlʃn
ˌ ˈ
Nếu một từ bắt đầu bằng nguyên âm, hãy in nó trên đường cơ sở của Google với các phụ âm: əˈpiːl
trở thành
ː
i
əpl
ˈ
Một trường hợp thử nghiệm với một nguyên âm ban đầu, nhấn mạnh: ˈælbəˌtrɔs
trở thành
ə ɔ
ælbtrs
ˈ ˌ
Một từ dài: ˌsuːpərˌkaləˌfrædʒəˌlɪstɪˌkɛkspiːæləˈdoʊʃəs
trở thành
æ
ː ː ʊ
uə aə æ əɪ ɪɛ iəoə
sprklfrdʒlstkkspldʃs
ˌ ˌ ˌ ˌ ˌ ˈ
Một ví dụ vô nghĩa với một diphthong ban đầu, rất nhiều nguyên âm xếp chồng và không có dấu căng thẳng: eɪbaeioubaabaaa
trở thành
u
o
i a
eaa
ɪaaa
ebbb
Thực hiện tham khảo
Chương trình của bạn sẽ tạo ra cùng một đầu ra như tập lệnh Python này:
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()))
Quy tắc
Bạn có thể viết một chức năng hoặc một chương trình đầy đủ.
Nếu chương trình của bạn có loại ký tự / chuỗi Unicode, bạn có thể giả sử đầu vào và đầu ra sử dụng chúng. Nếu không, hoặc bạn đọc / ghi từ STDIN, hãy sử dụng mã hóa UTF-8.
Bạn có thể tạo một chuỗi chứa dòng mới hoặc danh sách các chuỗi biểu thị các hàng hoặc một mảng các ký tự Unicode.
Mỗi hàng đầu ra có thể chứa bất kỳ số lượng dấu cách. Nếu bạn sản xuất một chuỗi, nó có thể có một dòng mới duy nhất.
Chương trình của bạn sẽ tạo ra đầu ra chính xác cho các từ dài tùy ý với các chuỗi nguyên âm dài tùy ý, nhưng có thể cho rằng từ đầu vào luôn hợp lệ.
Nếu không có dấu căng thẳng, đầu ra của bạn có thể tùy ý bao gồm một hàng trống cuối cùng (không chứa gì hoặc khoảng trắng).
Câu trả lời ngắn nhất (tính bằng byte) sẽ thắng.
ɜ
, vì vậy đây sẽ là một bộ nguyên âm chung của Mỹ.
biiiiiiiiiiiʒ
(Như trong "không phải là ong")
ɜ
Thật tội nghiệp , bạn đã bỏ nó ra :-) Và người Anh sẽ phàn nàn về họɒ