Die Aufgabe
Die Ratingagenturen ordnen Anleihen Ratings entsprechend der Bonität des Emittenten zu, und die "Big Three" - Ratingagenturen verwenden ein ähnliches (wenn auch nicht identisches) abgestuftes Ratingsystem . Diese haben eine klare, logische Reihenfolge - unter Verwendung der S & P-Stufen AAA> AA +> AA> AA-> A +> ...> BBB> B> ...> C. Moody's verwendet ein ähnliches System, benennt ihre Stufen jedoch anders ( Aaa> Aa1> Aa2> ...> Baa1> ...> C).
Ihre Aufgabe ist es, ein Programm zu entwerfen, das als Eingabe eine Liste von Zeichenfolgen verwendet, die die Ratingstufen der Anleihen darstellen, und dieselbe Liste in absteigender Reihenfolge von der höchsten Stufe (AAA / Aaa) bis zur niedrigsten Stufe (C) ausgibt.
Input-Output
Sie können das Format der Eingabe auswählen (Liste, eines pro Argument, CSV-Datei). Sie können davon ausgehen, dass jedes Element in der Eingabeliste eine gültige Bewertungszeichenfolge ist und dass alle Bewertungszeichenfolgen in einer Liste von derselben Bewertungsagentur stammen . Darüber hinaus können Sie davon ausgehen, dass keine der funky NA-Stil Bewertungen wie "NR" oder "WR" enthalten sein wird - dies ist ausschließlich von "Aaa / AAA" bis "C". Möglicherweise enthält die Eingabeliste doppelte Bewertungen. Wenn sie gefunden werden, sollten sie nicht entfernt werden.
Sie können auch das Format der Ausgabe auswählen, das für Ihre Sprache geeignet ist. Die einzige Einschränkung besteht darin, dass Standardtextcodierungen wie UTF-8 oder ASCII ausgegeben werden sollen.
Regeln und Wertung
Dies ist Codegolf, daher gewinnt die niedrigste Byteanzahl, Standardlücken sind nicht zulässig. Bitte geben Sie das Eingabe- und Ausgabeformat an.
Beispielprogramm und Testfälle
Das folgende Beispiel-Python-Programm kann als Standardbeispiel für die richtige Sortierreihenfolge verwendet werden. Die Listen Moody
und SP
sind die zu verwendenden Ordnungen.
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
Testfälle
Falls die Formatierung des Testfalls im Python-Stil unpraktisch ist, habe ich sie als durch Leerzeichen getrennte Eingabezeichenfolgen ausgegeben (gruppiert in zweizeiligen Paaren, Eingabe gefolgt von Ausgabe):
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
Hinweis : Ich erwähne die "Big Three", aber spezifiziere hier nur Moody's und S & P. Der Grund dafür ist, dass das dritte, Fitch, dasselbe System wie S & P verwendet, wenn Sie die NA-Ratings nicht berücksichtigen, also auch Fitch überflüssig sein.
Antworten:
Pyth, 16 Bytes
Wir sortieren lexikographisch nach einem Schlüssel nach dem @ Neil-Ansatz. Eingabe und Ausgabe erfolgen als Listen. Dies ändert nichts an der Liste.
Probieren Sie es hier aus . Testfälle sind alle Anleiheratings jedes Rating-Schemas, wobei ein Duplikat eingeworfen wird.
quelle
ES6,
7165 BytesDurch das Einfügen eines
z
nach den Buchstaben und das Suffixieren eines müssen,
wir die Zeichenfolgen nur lexikalisch sortieren.Bearbeiten: 6 Bytes dank @ user81655 gespeichert.
quelle
replace
und$&
diese verwenden:a=>a.sort((b,c)=>(r=t=>t.replace(/[^A-z]*$/,"z$&,"))(b)>r(c)||-1)
s="$1z$2,"
und obwohl ich merkte, dass ich weggolfen konnte$1
, war mir nicht eingefallen, dass ich jetzt auch weggolfen konnte$2
...Bash + GNU-Dienstprogramme, 45
Die Gutschrift erfolgt bei @Neil für den Ansatz .
In meiner Gebietsschemasortierreihenfolge sortieren Zahlen vor Buchstaben und sortieren
-
vor+
. Diese Zeichen werden also in den Alphabetbereich transkribiert, damit sie in der richtigen Reihenfolge sortiert werden.Probieren Sie es online aus.
quelle