जैसे कि यह चुनौती आत्मा में कोई और पायथन हो सकती है ... मार्कोव श्रृंखला या एन्क्रिप्शन तकनीकों के पूर्व ज्ञान की आवश्यकता नहीं है।
आप एक जासूस हैं जिन्हें ब्रिटिश सुरक्षा सेवा M1S से कुछ महत्वपूर्ण जानकारी प्राप्त करने की आवश्यकता है। M1S के एजेंट अच्छी तरह से जानते हैं कि उनके वाई-फाई सिग्नलों को इंटरसेप्ट किया जा सकता है, उनका एंड्रॉइड / आईओएस सिक्योरिटी कमजोरियों आदि का फायदा उठाया जा सकता है, इसलिए वे सभी नोकिया 3310 का उपयोग टेक्स्ट जानकारी प्रसारित करने के लिए कर रहे हैं जो कि टी 9 ऑटो-कम्प्लीट का उपयोग करके टाइप किया गया है ।
आपने पहले खुफिया एजेंसी पर डिलीवर होने के लिए फोन हैक किए थे और अपने शानदार प्लास्टिक कीबोर्ड के नीचे कीलॉगर्स लगाए थे, इसलिए अब आपको टाइप किए गए अक्षरों के अनुरूप संख्याओं के अनुक्रम प्राप्त होते हैं, इसलिए " ईगल ने घोंसले को छोड़ दिया है, जो एजेंट बन गए हैं।"
84303245304270533808430637802537808430243687
लेकिन रुकें! कुछ T9 अनुक्रम अस्पष्ट हैं ("6263" "नाम", "अयाल" या "ओबो" हो सकता है;) जितना अधिक अस्पष्ट, उतना ही अधिक संदिग्ध!), तो आप क्या करते हैं? आप जानते हैं कि एकमात्र प्रवेश परीक्षा M1S का उपयोग 15 सेकंड में मार्सेल प्रूस्ट की कृति "रिमेंबरेंस ऑफ थिंग्स पास्ट" को संक्षेप में प्रस्तुत करता है, इसलिए आप उस शब्द को चुनना चाहते हैं जो पिछले शेफ-डी में इसकी आवृत्ति वितरण के अनुसार पिछले एक के बाद आता है। ' प्राउस्ट के Puvre!
क्या आप कोड को क्रैक कर सकते हैं और प्राप्त कर सकते हैं कि मूल संदेश क्या हो सकता है?
टी 9 का सिद्धांत
T9 ऑटो-पूरा करने के तंत्र को निम्नानुसार वर्णित किया जा सकता है। यह वर्णमाला के अक्षरों को मैप करता है जैसा कि ऊपर चित्र में दिखाया गया है।
abc -> 2
def -> 3
ghi -> 4
jkl -> 5
mno -> 6
pqrs -> 7
tuv -> 8
wxyz -> 9
<space> -> 0
<other> -> <is deleted>
टी 9 डिक्रिप्टर अंक का एक अनुक्रम प्राप्त करता है और उन कुंजीशब्दों के साथ टाइप किए जा सकने वाले शब्द का अनुमान लगाने की कोशिश करता है। यह एक मानक आवृत्ति तालिका का उपयोग कर सकता है, लेकिन हम एक कदम आगे जा रहे हैं और मार्कोव श्रृंखला का उपयोग करते हुए अगले शब्द की भविष्यवाणी कर रहे हैं!
नमूना सीखना
कोरपस इस जोर से छीन लिया गया संस्करण है जो प्राउस्ट के "रिमेंबरेंस ऑफ थिंग्स पास्ट"s/-/ /g
, ( s/['’]s //g
और s/[^a-zA-Z ]//g
- भ्रामक भ्रामक है 's
!) को मूल रूप से एडिलेड वेबसाइट पर प्रकाशित किया गया है (इस काम का पाठ ऑस्ट्रेलिया में पब्लिक डोमेन में है)।
पूरे पाठ का एक स्ट्रिंग के रूप में विश्लेषण किया जाना चाहिए, एक लंबे वाक्य के रूप में, शब्दों के एक लंबे वेक्टर के रूप में (जो भी आपकी भाषा के लिए अधिक सुविधाजनक है), लाइनब्रेक से छीन लिया गया , और रिक्त स्थान पर शब्दों में विभाजित हो गया । (मैं एकल-पैराग्राफ फ़ाइल की आपूर्ति नहीं करता हूं क्योंकि इस तरह से गितुब टूल द्वारा भरा जा सकता है।)
मैं पूरे पाठ को एक स्ट्रिंग / वाक्य के रूप में कैसे पढ़ सकता हूं? R में एक उदाहरण :
p_raw <- read.table("proust.txt", sep="\t") # Because there are no tabs
p_vec <- as.character(p_raw$V1) # Conversion to character vector
p_str <- paste(p_vec, collapse=" ") # One long string with spaces
p_spl <- strsplit(p_str, split=" ")[[1]] # Vector of 1360883 words
proust <- p_spl[p_spl!=""] # Remove empty entries — 1360797
कार्य
एक संख्या के रूप में अंकों के अनुक्रम को देखते हुए, एक संभावित पाठ स्ट्रिंग लौटाएं जिसे एक लंबे वाक्य के रूप में माना जाने वाले इस प्रशिक्षण पाठ के आधार पर अगले शब्द X की भविष्यवाणी करने के लिए एक संभावित श्रृंखला का उपयोग करके संबंधित T9 कुंजी का उपयोग करके टाइप किया जा सकता है ।
यदि X पाठ का पहला T9-शब्द है और कई अनुमान हैं, तो यादृच्छिक पर एक को चुनें, अन्यथा केवल एक को ही चुनें।
बाद के सभी T9- शब्द X (i) के लिए पहले से ही व्याख्या किए गए शब्द (i-1) से पहले :
- यदि T9- शब्द X को एक अनोखे तरीके से सामान्य शब्द x में परिवर्तित किया जा सकता है , तो करें।
- यदि X के लिए कई रूपांतरण विकल्प उपलब्ध हैं , तो X1, x2, ... कहते हैं , पूर्ववर्ती अनुमानित शब्द w देखें ।
- यदि w का कभी भी ऐसा कुछ भी नहीं है जो Proust के मूल काम में X के लिए मैप करता है, तो किसी भी संभावित X1, x2, ... को यादृच्छिक रूप से चुनें।
- यदि w X हमेशा मूल में X1 से मेल खाता है और कोई समवर्ती xi नहीं है जिसे X में मैप किया जा सकता है , तो X1 को चुनें ।
- यदि w X को w1 , w x2 , w में परिवर्तित किया जा सकता है , ... जो कि कॉर्पस में पाया जा सकता है, तो सभी संभावित xi की गणना करें, जो कॉर्प में w का अनुसरण करता है और कॉर्प का X में मैप करता है और प्रायिकता xi / X1 के साथ xi को चुनता है। + x2 + ...) ।
उदाहरण 2 ए। यदि संदेश है 76630489
, जहां 489
हो सकता है guy
या ivy
(वे कम से कम एक बार कॉर्पस में होते हैं), (एक बहुत ही संभावित पहला शब्द) के 7663
रूप में व्याख्या की जा सकती है some
। यदि कॉर्पस में some
मैप करने वाली किसी भी चीज़ का पालन कभी नहीं किया जाता है 489
, तो संभावना 0.5 के साथ यादृच्छिक पर चुनें guy
या ivy
।
उदाहरण 2 बी। यदि संदेश है 766302277437
, जहां या 2277437
हो सकता है , के रूप में डिक्रिप्ट किया जा सकता है । यदि प्राउस्ट हमेशा उपयोग किया जाता है और कभी नहीं , तो उठाओ ।barrier
carrier
7663
some
some carrier
some barrier
some carrier
उदाहरण 2 सी। मान लीजिए कि आप अनुक्रम को समझना चाहते हैं 536307663
। 5363
के रूप में भविष्यवाणी की गई थी lend
। 7663
इनमें से किसी भी हो सकता है: pond
, roof
और some
। आप lend
नमूना कॉर्पस में निम्नलिखित शब्दों की घटनाओं को गिनते हैं । मान लीजिए कि आपको कुछ ऐसा मिलता है (उदाहरण के लिए):
T9 Word following lend Occurrences
7663 some 7
7663 pond 2
7663 roof 1
इसलिए यदि 7663
पहले से lend
, 7/(7+2+1)=70%
संभावना है कि 20% और 10% 7663
के लिए खड़ा है । आपके एल्गोरिथ्म को 70% मामलों में, 20% मामलों में आदि का उत्पादन करना चाहिए ।some
pond
roof
lend some
lend pond
आप सुरक्षित रूप से मान सकते हैं कि एजेंट केवल az अक्षर और रिक्त स्थान का उपयोग करते हैं (कोई विराम चिह्न, कोई अधिकार 's
नहीं और कोई संख्या नहीं)।
आप यह भी मान सकते हैं कि M1S के एजेंट कभी भी " रिमेंबरेंस ऑफ थिंग्स पास्ट" के दायरे के बाहर किसी भी शब्द का उपयोग नहीं करते हैं (जो 29,237 शब्दों की एक गहन शब्दावली है!)।
इस चुनौती में टी 9 की अस्थिरता को लागू किया गया था , इसलिए आपको इस पर एक नज़र पड़ सकती है।
आप किसी भी मदद की ज़रूरत है, संभाव्य चेन महाप्रतापी में वश में कर रहे थे इस , कि और निम्नलिखित चुनौतियों, लेकिन आप भी इस तरह के चेन के सिद्धांत पता करने की जरूरत नहीं है: सब कुछ कार्य में कहा गया है।
परीक्षण के मामलों
--Inputs--
20784250276960369
20784250276960369
84303245304270533808430637802537808430243687
94280343084306289072908608430262780482737
94280343084306289072908608430262780482737
--Possible outputs--
c quick brown fox
a stick crown fox
the eagle gas left the nest blest vie agents
what did the navy pay to the coast guards
what did the navy raz un the coast guards
नियम:
- मानक खामियां लागू होती हैं।
- आपको मूल संदेश नहीं पता है, आपको जो कुछ भी मिलता है वह अंकों का एक क्रम है और फ़ाइल proust.txt है जिसे आपको बस मेमोरी / कार्यक्षेत्र / जो कुछ भी लोड करने की आवश्यकता है। कुछ भी आत्म-निहित होने की आवश्यकता नहीं है; मान
proust.txt
हमेशा सुलभ है। - आपके एल्गोरिदम को संबंधित संभावनाओं के साथ विभिन्न आउटपुट का उत्पादन करने में सक्षम होना चाहिए यदि कॉर्पस के अनुसार एक से अधिक डिक्रिप्शन विकल्प संभावित है (उदाहरण 2c देखें)।
आपको यथासंभव विवेकशील रहने की आवश्यकता है, इसलिए सबसे छोटा कोड जीतता है!
पुनश्च इस संभाव्य एल्गोरिथ्म का स्पष्ट लाभ यह तथ्य है कि संभाव्यता आपको एक अस्पष्ट डिक्रिपर्ड स्ट्रिंग के लिए एक वास्तविक मूल स्ट्रिंग मिलेगी - बस प्रतीक्षा करें ...
PPS आंशिक मिलान द्वारा भविष्यवाणी भी देखें ।