Nhiệm vụ
Các cơ quan xếp hạng tín dụng chỉ định xếp hạng cho trái phiếu theo mức độ xứng đáng tín dụng của tổ chức phát hành và các tổ chức xếp hạng tín dụng "Big Three" sử dụng hệ thống xếp hạng theo cấp bậc tương tự (mặc dù không giống nhau) . Những thứ này có thứ tự rõ ràng, hợp lý - sử dụng các tầng S & P, AAA> AA +> AA> AA-> A +> ...> BBB> B> ...> C. Moody sử dụng một hệ thống tương tự, nhưng đặt tên các tầng của chúng khác nhau ( Aaa> Aa1> Aa2> ...> Baa1> ...> C).
Nhiệm vụ của bạn là thiết kế một chương trình lấy đầu vào là danh sách các chuỗi biểu thị các bậc xếp hạng trái phiếu và xuất ra cùng một danh sách, được sắp xếp theo thứ tự giảm dần từ tầng cao nhất (AAA / Aaa) đến tầng thấp nhất (C).
Đầu ra đầu vào
Bạn có thể chọn định dạng của đầu vào (danh sách, mỗi đối số, tệp CSV). Bạn có thể cho rằng mọi mục trong danh sách đầu vào là một chuỗi xếp hạng hợp lệ và tất cả các chuỗi xếp hạng trong danh sách đều đến từ cùng một cơ quan xếp hạng . Ngoài ra, bạn có thể cho rằng sẽ không có xếp hạng kiểu NA thú vị nào như "NR" hoặc "WR" - điều này hoàn toàn từ "Aaa / AAA" đến "C". Có thể có xếp hạng trùng lặp trong danh sách đầu vào, và nếu tìm thấy chúng không nên bị xóa.
Bạn cũng có thể chọn định dạng đầu ra phù hợp với ngôn ngữ của mình, với hạn chế duy nhất là nó phải xuất ra một số mã hóa văn bản tiêu chuẩn như UTF-8 hoặc ASCII.
Quy tắc và tính điểm
Đây là mã golf, vì vậy số byte thấp nhất sẽ thắng, các lỗ hổng tiêu chuẩn không được phép. Vui lòng xác định định dạng đầu vào và đầu ra là gì.
Ví dụ chương trình và trường hợp thử nghiệm
Ví dụ chương trình Python dưới đây có thể được sử dụng như một ví dụ tiêu chuẩn về thứ tự sắp xếp chính xác. Các danh sách Moody
và SP
là thứ tự để sử dụng.
Moody = ['Aaa', 'Aa1', 'Aa2', 'Aa3', 'A1', 'A2', 'A3',
'Baa1', 'Baa2', 'Baa3', 'Ba1', 'Ba2', 'Ba3',
'B1', 'B2', 'B3', 'Caa', 'Ca', 'C']
SP = ['AAA', 'AA+', 'AA', 'AA-', 'A+', 'A', 'A-',
'BBB+', 'BBB', 'BBB-', 'BB+', 'BB', 'BB-',
'B+', 'B', 'B-', 'CCC', 'CC', 'C']
test_cases = [
(['Aa2', 'Aaa', 'Aa1'], ['Aaa', 'Aa1', 'Aa2']),
(['AA', 'AA-', 'AA+'], ['AA+', 'AA', 'AA-']),
(['Baa1', 'Ba1', 'A1', 'B1', 'Aaa', 'C', 'Caa', 'Aa1'],
['Aaa', 'Aa1', 'A1', 'Baa1', 'Ba1', 'B1', 'Caa', 'C']),
(['BBB+', 'BB+', 'A+', 'B+', 'AAA', 'C', 'CCC', 'AA+'],
['AAA', 'AA+', 'A+', 'BBB+', 'BB+', 'B+', 'CCC', 'C']),
(['B3', 'B1', 'B2'], ['B1', 'B2', 'B3']),
(['B-', 'B+', 'B'], ['B+', 'B', 'B-']),
(['B3', 'Caa', 'Aa1', 'Caa', 'Ca', 'B3'],
['Aa1', 'B3', 'B3', 'Caa', 'Caa', 'Ca']),
(['B-', 'CCC', 'AA+', 'CCC', 'CC', 'B-'],
['AA+', 'B-', 'B-', 'CCC', 'CCC', 'CC'])
]
mdy_sort = lambda x: Moody.index(x)
sp_sort = lambda x: SP.index(x)
for l_in, l_out in test_cases:
sort_key = mdy_sort if set(l_in).issubset(set(Moody)) else sp_sort
assert sorted(l_in, key=sort_key) == l_out
Các trường hợp thử nghiệm
Trong trường hợp định dạng trường hợp kiểm tra kiểu python không thuận tiện, tôi đã xuất nó dưới dạng chuỗi đầu vào được phân tách bằng dấu cách (được nhóm thành hai cặp đầu vào theo sau là đầu ra):
Aa2 Aaa Aa1
Aaa Aa1 Aa2
AA AA- AA+
AA+ AA AA-
Baa1 Ba1 A1 B1 Aaa C Caa Aa1
Aaa Aa1 A1 Baa1 Ba1 B1 Caa C
BBB+ BB+ A+ B+ AAA C CCC AA+
AAA AA+ A+ BBB+ BB+ B+ CCC C
B3 B1 B2
B1 B2 B3
B- B+ B
B+ B B-
B3 Caa Aa1 Caa Ca B3
Aa1 B3 B3 Caa Caa Ca
B- CCC AA+ CCC CC B-
AA+ B- B- CCC CCC CC
Lưu ý : Tôi đề cập đến "Big Three" nhưng chỉ nêu rõ Moody và S & P ở đây - lý do là Fitch thứ ba sử dụng cùng hệ thống với S & P khi bạn không tính đến xếp hạng theo kiểu NA, vì vậy bao gồm cả Fitch được dự phòng.