Завдання
У кредитних рейтингових агентств рейтинги приписувати облігацій в відповідно до кредитоспроможності емітента, а також кредитний рейтинг агентства «великої трійки» використовують аналогічний (хоча і з ідентичні) багаторівневу систему рейтингу . Вони мають чіткий логічний порядок - використовуючи яруси S&P, AAA> AA +> AA> AA-> A +> ...> BBB> B> ...> C. Moody's використовує подібну систему, але їхні рівні називають по-різному ( Aaa> Aa1> Aa2> ...> Baa1> ...> C).
Ваше завдання - розробити програму, яка бере на вхід список рядків, що представляють рівні рейтингу облігацій, та виводить той самий список, відсортований у порядку зменшення від найвищого рівня (AAA / Aaa) до найнижчого рівня (C).
Введення-виведення
Ви можете вибрати формат введення (список, по одному на аргумент, CSV-файл). Ви можете припустити, що кожен елемент списку вхідних даних є дійсним рядком рейтингу і що всі рядки рейтингу у списку надходять із одного рейтингового агентства . Крім того, ви можете припустити, що жоден із прикольних рейтингів у стилі NA, таких як "NR" або "WR", не буде включено - це суворо від "Aaa / AAA" до "C". У списку введення можуть бути дублікати рейтингів, і якщо вони знайдуться, їх не слід видаляти.
Ви також можете вибрати формат виводу відповідно до вашої мови, єдиним обмеженням є те, що він повинен виводити стандартне кодування тексту, наприклад UTF-8 або ASCII.
Правила та оцінка
Це кодовий гольф, тому виграш найнижчого байту, стандартні лазівки заборонені. Вкажіть, будь ласка, який формат вводу та виводу.
Приклад програми та тестові приклади
Приклад програми Python нижче може використовуватися як стандартний приклад правильного порядку сортування. Переліки Moody
та SP
впорядкування для використання.
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
Тестові справи
У випадку, якщо форматування тестового випадку в стилі python є незручним, я виводить його у вигляді вхідних рядків, обмежених простором (згруповані у вхідні дворядкові пари з поданням на вихід):
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
Примітка : я згадую "Велику трійку", але тут вказую лише Moody's та S&P - причина полягає в тому, що третій, Fitch, використовує ту саму систему, що і S&P, коли ви не враховуєте рейтинги в стилі NA, тому включаючи Fitch, бути зайвими.