इन बॉन्ड रेटिंग को क्रमबद्ध करें


23

काम

क्रेडिट रेटिंग एजेंसियों जारीकर्ता के साख योग्यता के अनुसार बांड को असाइन रेटिंग और "बिग थ्री" क्रेडिट रेटिंग एजेंसियों के लिए एक समान है (हालांकि समान नहीं) का उपयोग स्तरीय रेटिंग प्रणाली । इनका एक स्पष्ट, तार्किक क्रम है - S & P tiers, AAA> AA +> AA-> A-> A +> ...> BBB> B> ...> C. Moody एक समान प्रणाली का उपयोग करता है, लेकिन उनके स्तरों को अलग नाम देता है ( आआ> आ १> आ २> ...> ब १>>> ग)।

आपका कार्य एक प्रोग्राम डिजाइन करना है जो इनपुट के रूप में बॉन्ड रेटिंग टियर का प्रतिनिधित्व करता है और उसी सूची को आउटपुट करता है, जो उच्चतम टीयर (एएए / एएए) से सबसे निचले स्तर (सी) तक अवरोही क्रम में क्रमबद्ध होता है।

इनपुट आउटपुट

आप इनपुट का प्रारूप चुन सकते हैं (सूची, एक प्रति तर्क, सीएसवी फ़ाइल)। आप मान सकते हैं कि इनपुट सूची में प्रत्येक आइटम एक मान्य रेटिंग स्ट्रिंग है और सूची में सभी रेटिंग स्ट्रिंग एक ही रेटिंग एजेंसी से आए हैं । इसके अतिरिक्त, आप मान सकते हैं कि "एनआर" या "डब्ल्यूआर" जैसी कोई भी कायरतापूर्ण एनए-शैली रेटिंग शामिल नहीं होगी - यह "आ / एएए" से "सी" तक सख्ती से है। इनपुट सूची में डुप्लिकेट रेटिंग हो सकती है, और यदि पाया जाए तो उन्हें हटाया नहीं जाना चाहिए।

आप आउटपुट का प्रारूप भी चुन सकते हैं, जो आपकी भाषा के लिए उपयुक्त है, एकमात्र प्रतिबंध यह है कि इसे कुछ मानक टेक्स्ट एन्कोडिंग जैसे UTF-8 या ASCII में आउटपुट करना चाहिए।

नियम और स्कोरिंग

यह कोड गोल्फ है, इसलिए सबसे कम बाइट काउंट जीतता है, मानक कमियां समाप्त हो जाती हैं। कृपया बताएं कि इनपुट और आउटपुट प्रारूप क्या है।

उदाहरण कार्यक्रम और परीक्षण के मामले

नीचे दिए गए उदाहरण पायथन कार्यक्रम को सही क्रम क्रम के मानक उदाहरण के रूप में इस्तेमाल किया जा सकता है। सूचियों 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

परीक्षण के मामलों

अजगर-शैली परीक्षण के मामले में स्वरूपण असुविधाजनक होने पर, मैंने इसे अंतरिक्ष-सीमांकित इनपुट स्ट्रिंग्स (दो-पंक्ति जोड़े इनपुट में आउटपुट के बाद समूहित) के रूप में आउटपुट किया है:

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

नोट : मैं "बिग थ्री" का उल्लेख करता हूं, लेकिन केवल मूडीज और एसएंडपी को यहां निर्दिष्ट करता हूं - कारण यह है कि तीसरा, फिच, एस एंड पी के समान सिस्टम का उपयोग करता है जब आप एनए-शैली रेटिंग्स को ध्यान में नहीं रखते हैं, तो फिच सहित बेमानी हो।


3
यार, अगर यह आपकी पहली पोस्ट है, तो मैं बहुत प्रभावित हूं। +1
Addison Crump

9
@VoteToClose लंबे समय के श्रोता, पहली बार कॉल करने वाले। ;)
पॉल

1
क्या आउटपुट संवेदनशील होना चाहिए?
andlrc

@ देव-नल हां, आउटपुट एक ही इनपुट तार होना चाहिए, पुन: क्रमबद्ध होना चाहिए।
पॉल

1
क्या इनपुट सूचियों में कोई समान रेटिंग हो सकती है? यदि ऐसा है तो सभी समान होना चाहिए आउटपुट, या डुप्लिकेट निकालें?
डिजिटल ट्रामा

जवाबों:


1

पायथ, 16 बाइट्स

o+Xs}RGrN0N\z\,Q

हम @ नील के दृष्टिकोण का उपयोग करते हुए एक कुंजी द्वारा लेक्सोग्राफिक रूप से सॉर्ट करते हैं। इनपुट और आउटपुट सूची के रूप में हैं; यह सूची को म्यूट नहीं करता है।

o+Xs}RGrN0N\z\,Q       Implicit: Q = input list
                        lambda N  (N is a bond rating)
       rN0               Convert N to lowercase
    }RG                  Map is-in G, the lowercase alphabet.
   s                     Sum the list of bools; the number of letters in N.
  X       N\z            Insert "z" at that position in N.
 +           \,          Append "," to the end.
                         This works because "," is between "+" and "-" lexicographically.
o              Q       Sort Q, using that lambda as a key.

इसे यहाँ आज़माएँ । टेस्ट केस प्रत्येक रेटिंग स्कीम के सभी बॉन्ड रेटिंग्स हैं, जिसमें एक डुप्लिकेट फेंका गया है।


7

ईएस 6, 71 65 बाइट्स

a=>a.sort((b,c)=>r(b)>r(c)||-1,r=s=>s.replace(/[^A-z]*$/,"z$&,"))

zअक्षरों के बाद सम्मिलित करने और ,हम प्रत्यय लगाने से हमें केवल तार को छांटना होगा।

संपादित करें: @ user81655 के लिए 6 बाइट्स सहेजे गए।


अछा सुझाव। यह एक अलग फ़ंक्शन को परिभाषित करने replaceऔर $&इसके अंदर उपयोग करने से थोड़ा कम हो सकता है:a=>a.sort((b,c)=>(r=t=>t.replace(/[^A-z]*$/,"z$&,"))(b)>r(c)||-1)
user81655

@ user81655 बाह, मैं मूल रूप से था s="$1z$2,"और हालांकि मुझे एहसास हुआ कि मैं गोल्फ को दूर कर सकता हूं, मेरे साथ ऐसा $1नहीं हुआ था कि मैं अब गोल्फ $2भी दूर कर सकता हूं ...
नील

2

बैश + जीएनयू उपयोगिताओं, 45

क्रेडिट के लिए @Neil की वजह से है दृष्टिकोण

sed s/$/e/|tr +-3 d-l|sort|tr -d e|tr d-l +-3

मेरे लोकल सॉर्ट क्रम में, अक्षरों को क्रमबद्ध करने से पहले क्रमबद्ध करें और -पहले टाइप करें +। इसलिए इन वर्णों को वर्णमाला सीमा में बदल दिया जाता है ताकि वे सही क्रम में क्रमबद्ध हो जाएं।

इसे ऑनलाइन आज़माएं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.