कैदी प्रणाली को डिकोड करना


14

आप एक पुरानी भारतीय पांडुलिपि में आए हैं, जो दफन खजाने का वर्णन करती है। पांडुलिपि आपको खजाने का स्थान भी बताती है, सिवाय इसके कि कुछ महत्वपूर्ण संख्याओं को पाठ में अप्रत्यक्ष रूप से एन्कोड किया गया है। आप यह पता लगाते हैं कि पाठ एक 'कादी' प्रणाली का उपयोग करता है, अधिक सामान्य 'काटापाडी' प्रणाली का एक सीमित उपसमूह।

( कैटापाडी प्रणाली अंकों के रूप में अंकों को सांकेतिक शब्दों में बदलना करने के लिए एक प्राचीन भारतीय प्रणाली है, जिसका उपयोग अक्सर संख्याओं को याद करने के लिए शब्दांश के रूप में किया जाता है।)

यहाँ आपका काम कादी प्रणाली में कूटबद्ध पाठ को डिकोड करना और संख्यात्मक मान का प्रिंट आउट करना है।

विवरण

इनपुट पात्र

कैदी प्रणाली कैटापाडी प्रणाली के नियमों पर आधारित है , लेकिन व्यंजन की पहली पंक्ति का उपयोग करती है। यहाँ आपका पाठ लैटिन वर्णमाला में बदल दिया गया है, और केवल इसे शामिल करने के लिए जाना जाता है:

  • स्वर 'a', 'e', ​​'i', 'o', 'u'
  • व्यंजन 'g', 'k', 'c', 'j', और उनके पूँजी रूप ( उन व्यंजन के महाप्राण रूप का प्रतिनिधित्व करने के लिए ), और '' 'और' ñ '।

(यदि आप अपनी भाषा में अधिक सुविधाजनक हैं तो ṅ ng ’को and एनजी’ और as as ’को receive एनवाई’ के रूप में प्राप्त और संभाल सकते हैं।)

मान असाइनमेंट

इस प्रणाली में,

  1. स्वर के बाद प्रत्येक व्यंजन के पास एक अंक जुड़ा होता है। य़े हैं:

    'k'=>1, 'K'=>2,
    'g'=>3, 'G'=>4,
    'ṅ'=>5,
    'c'=>6, 'C'=>7,
    'j'=>8, 'J'=>9,
    'ñ'=>0

हालाँकि, ध्यान दें कि ये मूल्य तभी लागू होते हैं जब इन व्यंजन का पालन एक स्वर द्वारा किया जाता है। kacCiएक ही मान है जैसे kaCi( ka,, Ci= (1,7)) क्योंकि मध्य c एक स्वर से असम्बद्ध है।

  1. इसके अतिरिक्त, एक प्रारंभिक स्वर या दो स्वरों के अनुक्रम का प्रतिनिधित्व करता है एक 0. aikaCiहोगा: ai, ka, Ci= (0,1,7)

  2. पाठ के बीच में कहीं भी अतिरिक्त स्वरों का कोई मूल्य नहीं है: kauCiaवैसा ही है kaCi, अतिरिक्त स्वरों को अनदेखा किया जा सकता है।

अंतिम सांख्यिक मूल्य

एक बार जब अक्षरों के अंक मानों का पता लगा लिया जाता है, तो अंतिम संख्यात्मक मान को उन अंकों के रिवर्स ऑर्डर के रूप में प्राप्त किया जाता है अर्थात पाठ से पहला अंक अंतिम मूल्य में सबसे कम महत्वपूर्ण अंक होता है।

उदाहरण के लिए।
GucCiहै Guऔर Ci, (4, 7), इसलिए अंतिम मान 74
kakakaGoहै। (1,1,1,4), इसलिए उत्तर 4111
guṅKoहै। (3,2) है, इसलिए 23 को एन्कोड करता है ( gungKoयदि ASCII का उपयोग कर रहा है) -equivalent।)

इनपुट

  • कैदी-एन्कोडेड पाठ युक्त एक स्ट्रिंग
    • केवल स्वर और उपरोक्त व्यंजन होंगे
    • स्वर हमेशा निचले हिस्से में होते हैं और 2 से अधिक के समूह में नहीं होते हैं
    • आप 5 और 0 के लिए अक्षरों को या तो उनके यूनिकोड वर्णों '' और 'ñ' के रूप में या उनके ASCII समकक्षों 'ng' और 'ny' के रूप में स्वीकार कर सकते हैं (वे किसी भी रूप में निचले हिस्से में हैं)
    • आप मान सकते हैं कि कोई स्थान या विराम चिह्न नहीं हैं

उत्पादन

  • पाठ का संख्यात्मक मान, जैसा कि उपरोक्त नियमों द्वारा दिया गया है
    • खाली इनपुट के लिए, एक खाली आउटपुट या आपकी पसंद की भाषा में कोई भी गलत-वाई आउटपुट 0 के अतिरिक्त स्वीकार्य है
    • अमान्य इनपुट के लिए (स्वर और उपरोक्त व्यंजन के अलावा अन्य किसी भी चीज़ से इनपुट), आउटपुट अपरिभाषित है - कुछ भी

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

"GucCi"
=> 74
"kakakaGo"
=> 4111
"aiKaCiigukoJe"
=> 913720
""
=> 0 //OR empty/falsey output
"a"
=> 0
"ukkiKagijeCaGaacoJiiKka"
=> 1964783210
"kegJugjugKeg"
=> 2891
"guṅKo"
=> 23
"Guñaaka"
=> 104
"juñiKoṅe"
=>5208

(अंतिम वाले हो सकते हैं:

"gungKo"
=> 23
"Gunyaaka"
=> 104
"junyiKonge"
=>5208

अगर आप इसे पसंद करते हैं।)

आई / ओ और खामियों के लिए मानक नियम लागू होते हैं। सर्वश्रेष्ठ गोल्फर जीत सकते हैं!


1
कर सकते हैं aiaKaciइनपुट हो सकता है? (3 प्रमुख स्वर)
आउटगोल्फर

कोई परीक्षण मामला भी नहीं है जो एक व्यंजन में समाप्त होता है; क्या हम मान सकते हैं कि इनपुट हमेशा एक स्वर में समाप्त होगा?
आउटगोल्फर

3 प्रमुख स्वरों के लिए नहीं। वास्तव में, मुझे नहीं लगता कि यह 3 परिणामी स्वरों के लिए इनपुट में कहीं भी होता है (2 अंग्रेजी स्वरों को कभी-कभी एक संस्कृत स्वर ध्वनि का प्रतिनिधित्व करने की आवश्यकता होती है, लेकिन कभी 3)। क्या मैं इसे अब इनपुट बाधा के रूप में जोड़ सकता हूं या बहुत देर हो चुकी है?
सूंदर -

2
यह स्पष्ट करने में देर नहीं हुई कि इनपुट में 3 प्रमुख स्वर नहीं होंगे। इससे कोई सबमिशन नहीं टूटेगा, और मुझे संदेह है कि किसी ने भी इसे ध्यान में रखने के लिए लंबा कोड लिखा है, और अगर उनके पास है तो वे इसे हटा सकते हैं। वैसे पहला अच्छा सवाल! :)
स्टू ग्रिफिन

2
मामले में यह कुछ भाषाओं में मदद करता है: प्रत्येक व्यंजन के लिए ord(c)%47%10एक अद्वितीय सूचकांक देता है [0..9]। (के साथ ord("ṅ")=7749और ord("ñ")=241।)
Arnauld

जवाबों:


5

जावास्क्रिप्ट (ईएस 6), 83 बाइट्स

s=>s.replace(s=/(^|[ṅcCjJñkKgG])[aeiou]/g,(_,c)=>o=(s+s).search(c)%10+o,o='')&&o

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

कैसे?

हम स्ट्रिंग या काड़ी व्यंजन की शुरुआत से मेल खाने के लिए निम्नलिखित नियमित अभिव्यक्ति का उपयोग करते हैं, उसके बाद एक स्वर:

/(^|[ṅcCjJñkKgG])[aeiou]/g

इनपुट स्ट्रिंग में हर मैच के लिए, हम निम्नलिखित कॉलबैक समारोह है कि सामग्री लेता आह्वान पैरामीटर के रूप में कब्जा समूह का:

(_, c) => o = (s + s).search(c) % 10 + o

हम नियमित अभिव्यक्ति में इसकी स्थिति की तलाश करके व्यंजन का मूल्य पाते हैं (इसे खुद से जोड़कर एक स्ट्रिंग के लिए मजबूर)।

व्यंजन का ऑर्डर इस तरह से किया जाता है कि उनका मूल्य उनकी स्थिति के मोडुलो 10 के बराबर हो :

string   : /  (  ^  |  [  ṅ  c  C  j  J  ñ  k  K  g  G  ]  )  [  a  e  i  o  u  ]  /  g
position : 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 ...
modulo 10: -  -  -  -  -  5  6  7  8  9  0  1  2  3  4  -  ...

जब हम एक व्यंजन के बजाय स्ट्रिंग की शुरुआत से मेल खाते हैं, तो सी एक रिक्त स्ट्रिंग है जिसकी नियमित अभिव्यक्ति में स्थिति 0 है - जो, सुविधाजनक रूप से, उस मामले में अपेक्षित परिणाम है।

अंत में, हम आउटपुट स्ट्रिंग की शुरुआत में इस अंक को सम्मिलित करते हैं ।


4

रेटिना , 41 बाइट्स

T`ñkKgGṅcCjJ`d`.[aeiou]
^[aeiou]
0
\D

V`

इसे ऑनलाइन आज़माएं! लिंक में परीक्षण के मामले शामिल हैं। Explantion:

T`ñkKgGṅcCjJ`d`.[aeiou]

स्वरों द्वारा अनुसरण किए जाने वाले व्यंजन का अनुवाद करें।

^[aeiou]
0

एक प्रमुख स्वर को संभालें।

\D

बाकी सबकुछ हटा दो।

V`

परिणाम उल्टा।


4

पायथन 2 , 93 बाइट्स

lambda s,h=u'ñkKgGṅcCjJ'.find:''.join(`h(c)`*(0>h(v)<h(c))for c,v in zip(u'ñ'+s,s))[::-1]

एक अनाम फ़ंक्शन जो एक यूनिकोड स्ट्रिंग को स्वीकार करता है जो बेस दस परिणाम का एक स्ट्रिंग प्रतिनिधित्व लौटाता है।

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


3

जावा 8, 136 126 बाइट्स

s->{for(int i=s.length,t;i-->0;)if("aeiou".contains(s[i]))System.out.print(i<1?0:(t="ñkKgGṅcCjJ".indexOf(s[i-1]))<0?"":t);}

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

स्पष्टीकरण:

s->{                           // Method with String-array parameter and String return-type
  for(int i=s.length,t;i-->0;) //  Loop backwards over the input-characters
    if("aeiou".contains(s[i])) //   If the current character is a vowel:
      System.out.print(        //    Print:
         i<1?                  //     If we're at the first character:
          0                    //      Print a 0
         :                     //     Else:
          (t="ñkKgGṅcCjJ".indexOf(s[i-1]))<0?
                               //      If the character before the vowel is also a vowel:
           ""                  //       Print nothing
          :                    //      Else:
           t);}                //       Print the correct digit of the consonant

3

जेली , 27 बाइट्स

Żµe€Øẹœpṫ€0F“kKgGṅcCjJ”iⱮUḌ

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

जेली ने बिल्ट-इन ... 1-बाइट

व्याख्या


Żµ             Prepend 0 to the string.
  e€  œp       Split at...
    Øẹ           the vowels. (0 is not a vowel)

ṫ€0            For each sublist `l` takes `l[-1:]`.
                 If the initial list is empty the result is empty,
                 otherwise the result is a list contain the last element.
   F           Flatten. (concatenate the results)

“kKgGṅcCjJ”iⱮ  Find the index of each character in the list.
                 Get 0 if not found (i.e., for `0` or `ñ`)
UḌ             Upend (reverse) and then convert from decimal.

मुझे उस के साथ बाइट्स को बचाने का एक तरीका नहीं मिला, लेकिन प्रत्येक व्यंजन के लिए O%47%10एक अद्वितीय सूचकांक देता है [0...9]। (जिसका अर्थ है कि O%47अंतर्निहित मॉडुलो के साथ 10 प्रविष्टियों की एक सरणी में सही मान लेने की अनुमति होगी।)
अर्नुलद

1
@ अरनल्ड 6;µe€Øẹœpṫ€0O%47ị“ ʠḷ’Œ?’¤Ṛलेकिन 27 भी जब तक इसे गोल्फ नहीं किया जा सकता।
जोनाथन एलन

3

पायथन 2 , 101 बाइट्स

lambda s,S=u'ñkKgGṅcCjJ':''.join(`S.find(c)`for c,n in zip(u'ñ'+s,s)if c in(n in'aeiou')*S)[::-1]

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

पायथन 3 , 104 102 बाइट्स

lambda s,S='ñkKgGṅcCjJ':''.join(str(S.find(c))for c,n in zip('ñ'+s,s)if c in(n in'aeiou')*S)[::-1]

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


बचाया

  • -3 बाइट्स, रॉड के लिए धन्यवाद

ठीक है, अगर आप हेडर जोड़ते हैं, तो आप कर सकते हैं , लेकिन मैं स्ट्रिंग्स में यूनिकोड उपसर्ग को भूल गया, आखिरकार, यह एक सिंगल बाइट बचाएगा
रॉड

@Rod, आह धन्यवाद, मैं यूनिकोड उपसर्ग के बारे में भूल गया :)
TFeld

1

जावास्क्रिप्ट (Node.js) , 126 बाइट्स

_=>(l=_.match(/[kgñṅcj][aeiou]/gi))?l.map(a=>"ñkKgGṅcCjJ".indexOf(a[0])).reverse``.join``+(/[ aiueo]/.test(_[0])?0:''):0

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


1
स्ट्रिंग्स के साथ भी काम x=[..."ñkKgGṅcCjJ"]करने x="ñkKgGṅcCjJ"से आप कुछ बाइट्स को बदल सकते indexOfहैं
वफ़लकोन

1
यह प्रारंभिक स्वरों का इलाज नहीं करता है 0, इसलिए परीक्षण के मामले 3 और 6 विफल हो जाते हैं (जैसा कि TIO पर आउटपुट में देखा जा सकता है)।
सूंदर -

@ सूंदर मेरा बुरा, निश्चित।
लुइस फेलिप डी जीसस मुनोज


1

MATL , 48 47 45 बाइट्स

'ng'98Ztt'y'whw11Y2m)'ykKgGbcCjJ'tfqXEt10<)oP

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

(बाइट बचाने के लिए 'd' के बजाय 'b')
(-2 लुइस मेंडू को धन्यवाद)

MATLAB (और इसलिए MATL) स्ट्रिंग्स को बाइट्स की गूंगी श्रृंखला के रूप में मानते हुए @ TFeld के पाइथन सॉल्यूशन को चित्रित किया है जो मैंने कल्पना की थी (शायद एक सीधा लूप समाधान यहां आसान होता?)। वैकल्पिक प्रसंस्करण 'ng', 'ny'इनपुट विधि का उपयोग करके और आसान प्रसंस्करण के लिए शुरुआत में प्रतिस्थापित ngकिया bगया।

स्पष्टीकरण:

        % Implicit input (assume 'junyiKonge')
 'ng'   % string literal
 98     % 'b'
 Zt     % replace substring with another (stack: 'junyiKobe')
 t      % duplicate that (stack: 'junyiKobe' 'junyiKobe')
 'y'    % string literal
 w      % swap elements in stack so 'y' goes before input (stack: 'junyiKobe' 'y' 'junyiKobe')
 h      % horizontal concatenation (prepend 'y' to input string) (stack: 'junyiKobe' 'yjunyiKobe')
 w      % swap stack (stack: 'yjunyiKobe' 'junyiKobe')
 11Y2   % place 'aeiou' in stack (stack: 'yjunyiKobe' 'junyiKobe' 'aeiou')
 m      % set places with a vowel to True i.e. 1 (stack: 'yjunyiKobe' 0 1 0 1 0 1 0 0 1)
 )      % index into those places (stack: 'jyKd')
 'ykKgGdcCjJ' % string literal
 tfq    % generate numbers 0 to 9 (stack: 'jyKd' 'ykKgGdcCjJ' 0 1 2 3 4 5 6 7 8 9)
 XE     % replace elements in first array which are found in second,
        %  with corresponding elements from third
 t10<)  % keep only elements that are less than 10 (removes extraneous vowels)
 o      % convert from string to double (numeric) array (stack: 8 0 2 5)
 P      % flip the order of elements (stack: 5 2 0 8)
        % (implicit) convert to string and display

धन्यवाद, किया। क्या आपको पता है कि MATLAB / Octave में बाइट्स के बजाय यूनिकोड कोड पॉइंट्स के माध्यम से एक स्ट्रिंग के माध्यम से / iterate को इंडेक्स करने के लिए कुछ भी है? यह ऐसा नहीं दिखता है, उनका यूनिकोड समर्थन सामान्य रूप से अत्याचारपूर्ण लगता है, लेकिन शायद मुझे कुछ याद आया।
सूंदर -

1
इसके अलावा, MATL मैनुअल में "यदि इनपुट स्ट्रिंग या कैरेक्टर एरे है" तो एक दो जगहों पर - क्या ये दो अलग-अलग चीजें हैं? MATLAB में फैंसी नए दोहरे उद्धृत तार के साथ कुछ भी करने के लिए ?
सूंदर -

1
मतलाब के पास है unicode2native, लेकिन मुझे लगता है कि अब आप जो चाहते हैं। मैं सहमत हूं, MATLAB में यूनिकोड समर्थन सबसे अच्छा नहीं है। और मुझे ओक्टेव के साथ शुरू नहीं करना चाहिए: - MATL के लिए, यह MATLAB में मौजूद नए स्ट्रिंग डेटा प्रकार से पहले डिजाइन किया गया था (और मुझे यह वैसे भी पसंद नहीं है), इसलिए MATL में "स्ट्रिंग" समान है जैसा कि यह पुराने MATLAB संस्करणों में हुआ करता था: वर्णों की एक पंक्ति वेक्टर। मैंने यह स्पष्ट करने के लिए एक नोट किया है कि प्रलेखन में, ध्यान देने के लिए धन्यवाद!
लुइस मेंडू

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