Görev
Kredi derecelendirme kuruluşları veren kredi kullanabilme göre tahvillerine atama derecelendirme ve "Üç Büyük" kredi derecelendirme kuruluşları da benzer (gerçi aynı değil) kullanan katmanlı bir derecelendirme sistemi . Bunların net ve mantıklı bir düzeni var - S&P katmanları, AAA> AA +> AA> AA-> A +> ...> BBB> B> ...> C kullanılarak. Moody's benzer bir sistem kullanıyor, Aaa> Aa1> Aa2> ...> Baa1> ...> C).
Göreviniz, tahvil derecelendirme katmanlarını temsil eden dizelerin bir listesini girdi olarak alan ve aynı listeyi çıkaran, en yüksek seviyeden (AAA / Aaa) en düşük seviyeye (C) kadar azalan bir program tasarlamaktır.
Giriş çıkış
Girişin biçimini seçebilirsiniz (liste, bağımsız değişken başına bir tane, CSV dosyası). Giriş listesindeki her öğenin geçerli bir derecelendirme dizesi olduğunu ve listedeki tüm derecelendirme dizelerinin aynı derecelendirme kuruluşundan geldiğini varsayabilirsiniz . Ek olarak, "NR" veya "WR" gibi ilginç NA tarzı derecelendirmelerden hiçbirinin eklenmeyeceğini de varsayabilirsiniz - bu kesinlikle "Aaa / AAA" dan "C" ye kadardır. Giriş listesinde yinelenen derecelendirmeler olabilir ve bulunursa kaldırılmaması gerekir.
Çıktının biçimini dilinize uygun olarak da seçebilirsiniz; tek kısıtlama UTF-8 veya ASCII gibi bazı standart metin kodlamaları çıkarmasıdır.
Kurallar ve puanlama
Bu kod golf, bu yüzden en düşük bayt sayısı kazanır, standart boşluklara izin verilmez. Lütfen giriş ve çıkış formatının ne olduğunu belirtin.
Örnek program ve test durumları
Aşağıdaki örnek Python programı, doğru sıralama düzeninin standart bir örneği olarak kullanılabilir. Listeler Moody
ve SP
kullanılacak siparişlerdir.
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
Test durumları
Python tarzı test durumunun biçimlendirmesinin sakıncalı olması durumunda, bunu alanla ayrılmış girdi dizeleri olarak çıktım (çıktıyı izleyen iki satırlık çiftler halinde gruplandırılmış):
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
Not : "Büyük Üç" ten bahsediyorum ama burada sadece Moody's ve S&P'yi belirtiyorum - bunun nedeni, üçüncü Fitch’in, NA tarzı derecelendirmeleri hesaba katmadığınızda S&P ile aynı sistemi kullanmasıdır. gereksiz olmak.