बॉब के पासवर्ड


13

परिचय

बॉब अपने द्वारा उपयोग की जाने वाली प्रत्येक वेबसाइट के लिए अलग-अलग पासवर्ड रखना पसंद करता है। वह एक विशेष प्रारूप में पासवर्ड चाहता है ताकि वह याद रख सके। एक पासवर्ड जनरेटर के निर्माण में उसकी मदद करें जो कोड लंबाई में जितना संभव हो उतना कम हो, क्योंकि वह अपने नाम की तरह ही सामान रखना पसंद करता है।

चुनौती

बॉब एक ​​पासवर्ड जनरेटर का निर्माण करें जो चार मापदंडों में लेता है -

  • डोमेन पता, (उदा: stackexchange.com)
  • पहला नाम,
  • उपनाम,
  • जन्म तिथि और वर्ष।

और एक स्ट्रिंग को आउटपुट करता है जो निम्न परिवर्तनों से गुजरा है।

हर पासवर्ड लंबाई के आधार पर एक टेम्पलेट है एल डोमेन नाम की। यदि l अभाज्य है तो टेम्पलेट इस रूप में है -

[birth-date][domain-name][lastname][birth-year][symbol]

यह इस रूप का है -

[symbol][birth-year][firstname][domain-name][birth-date]।

प्रतीक क्षेत्र में डोमेन प्रकार के आधार पर मान होंगे।

.com -> $$$
.org -> &&&
.net -> %%te
.edu -> +++
.gov -> @@@
.mil -> >>>
डिफ़ॉल्ट -> ~~~

अब, वह खेतों के ऊपर एक सीज़र साइफर भी चलाना चाहता है - [firstname][domain-name][lastname]शिफ्ट दिशा सही है यदि एल प्रमुख है तो इसे छोड़ दिया जाता है। शिफ्ट मान जन्म तिथि और वर्ष के जोड़ के मूल्य से निर्धारित होता है।

उपरोक्त प्रक्रिया के बाद, पाठ को आसानी से याद नहीं किया जा सकता है, इसलिए वह चाहता है कि सिफर पाठ को उच्चारण योग्य बनाया जाए। ऐसा करने के लिए वह हर तीसरे व्यंजन को वर्णमाला क्रम में एक स्वर से बदलना चाहता है (यानी, aeiou)।

अंत में, वह समान अक्षरों की लगातार घटनाओं को हटाना चाहता है।

उदाहरण

इनपुट - stackexchange.com बॉब विलियम्स 0894

आउटपुट - 08qraicvafyecugjigyoq94 $$$।

स्पष्टीकरण:

पासवर्ड टेम्प्लेट है [birth-date][domain-name][lastname][birth-year][symbol], क्योंकि डोमेन नाम की लंबाई stackexchangeएक प्रमुख है। प्रतीक के $$$रूप में होगा डोमेन प्रकार है .com।

आइए उन मानों को टेम्पलेट में भरें - 08stackexchangewilliams94$$$। अब सीज़र सिफर को खेतों पर चलाया जाना है [firstname][domain-name][lastname](यह इस मामले में सिर्फ अंतिम नाम है)। Shift दिशा सही है क्योंकि l अभाज्य है और शिफ्ट मान है 08+94 = 102।

तो, में 08stackexchangewilliams94$$$बदल जाता है 08qryaicvafylecugjjgykq94$$$। अब हर तीसरे लगातार व्यंजन को एक स्वर से बदल दिया जाता है - एक 08qraaicvafyeecugjigyoq94$$$ ही अक्षर के हर लगातार ences of को हटा दिया जाता है - 08qraicvafyecugjigyoq94$$$। चिंता मत करो यह बॉब के लिए उच्चारण करने योग्य है।

अतिरिक्त जानकारी

  • डोमेन पता, पहला नाम और अंतिम नाम में केवल लोअरकेस अक्षर होते हैं।
  • डोमेन पता हमेशा एक दूसरे-स्तर और शीर्ष-स्तरीय डोमेन से बना होगा, जैसे stackexchange.comऔर नहीं codegolf.stackexchange.com। इसके अलावा, जैसे डोमेन की .co.ukअनुमति नहीं है , लेकिन सिर्फ .ukया .inवैध है।
  • वर्णमाला के क्रम में स्वर का प्रतिस्थापन चक्रीय है। मेरा मतलब बाद में u, aप्रतिस्थापित करने के लिए किया जाता है।
  • सीज़र सिफर के लिए एएससीआईआई रेंज 97 - 122 समावेशी है।
  • आप यहाँ बताए अनुसार इनपुट ले सकते हैं ।
  • आउटपुट के लिए एक स्ट्रिंग होना चाहिए।
  • जन्म तिथि और वर्ष के प्रारूप है ddऔर yyतो 02स्वीकार्य है और 2नहीं है।

यह कोड-गोल्फ है, इसलिए बाइट्स में सबसे छोटा कोड जीत जाता है। हैप्पी गोल्फिंग!


4
क्या डोमेन नाम में हमेशा केवल द्वितीय-स्तरीय और उच्च-स्तरीय डोमेन होते हैं, जैसे stackexchange.com, नहीं img.stackexchange.com? देश डोमेन के बारे में क्या पसंद है bbc.co.uk?
— रिश्वतखोर

आपका उदाहरण कॉल उपयोग करता है 0894जो अप करने के लिए जोड़ता है, 102लेकिन स्पष्टीकरण का उपयोग करता है 08+96=106। 102मूल्य का उपयोग करने के लिए सिफर टेक्स्ट दिखाई देता है । बस एक छोटी सी असंगति है जो भ्रामक हो सकती है ...
— ब्रायंटिस्ट

6
बॉब एक ​​पागल मोफो है अगर वह उच्चारण कर सकता है।
— मैजिक ऑक्टोपस Urn

5
@carusocomputing शायद बॉब वेल्श है?
— रिश्वतखोर

1
नहीं, मेरा मतलब है कि आप defualtनहीं हैंdefault
— रोमन ग्रैफ़

जवाबों:


7

पावरशेल 3+, 480 476 474 453 450 448 बाइट्स

param($d,$f,$l,$b)$s,$t=$d-split'\.'
$m,$y=$b-split'(?<=..)(?=..)'
$v=+$m+$y
$p='1'*$s.Length-match'^(?!(..+)\1+$)..'
$c={-join([char[]]"$input"|%{[char](97..122)[((+$_-97)+((26-$v),$v)[$p])%26]})}
$s=$s|&$c
$f=$f|&$c
$l=$l|&$c
$a=(($a=@{com='$';org='&';net='%';edu='+';gov='@';mil='>'}.$t),'~')[!$a]*3
("`"$(("$a$y$f$s$m","$m$s$l$y$a")[$p]-replace'([^aeiou\d]{3})',"`$('`$1'-replace'[a-z]`$$',('aeiou'[`$i++%5]))")`""|iex)-replace'([a-z])\1+','$1'

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

सहेजी गयी 24 26 के लिए धन्यवाद बाइट्स TimmyD !

वाह, यह एक पागल था। मुझे नहीं लगता कि मैं बाद में या कल तक इसका पूर्ण विराम पोस्ट कर सकता हूं।

नोट: सभी लाइन एंडिंग \n( 0x10) हैं, ताकि मुझे ;यह सब एक लाइन में इस्तेमाल न करना पड़े ।

त्वरित अवलोकन:

  1. डोमेन को दूसरे स्तर और शीर्ष स्तर में विभाजित करें।
  2. जन्मतिथि को महीने और साल में विभाजित करें।
  3. शिफ्ट मान की गणना करें।
  4. निर्धारित करें कि क्या SLD की लंबाई प्रमुख है। चूंकि खंड 63 वर्णों से अधिक लंबा नहीं हो सकता है ( RFC 1035 भी देखें ), मुझे लगता है कि यह सिर्फ primes की सूची को हार्डकोड करने के लिए छोटा था :) सुझाए गए regex विधि का उपयोग करना।
  5. सीज़र सिफर करने के लिए एक स्क्रिप्टब्लॉक (अनाम फ़ंक्शन अनिवार्य रूप से) को परिभाषित करें।
  6. SLD, प्रथम और अंतिम नामों के लिए सिफर लागू करें
  7. एक हैशटेबल और इंडेक्सिंग मज़ेदार व्यवसाय के साथ प्रतीक प्राप्त करें।
  8. अंत में, एक विशाल गड़बड़ जहां मैं उपयुक्त टेम्पलेट लागू करता हूं, व्यंजन ट्रिपल्स के लिए एक प्रतिस्थापित करें, प्रत्येक को एक सब-डेप्रिसिएशन (कोड) के साथ प्रतिस्थापित करें जो उस अनुभाग को उचित मूल्य के साथ बदल देगा, फिर निष्पादित करने के लिए परिणामी स्ट्रिंग Invoke-Expression( iex) के माध्यम से चलाएं । जनरेटेड कोड जेनरेट किया गया, फिर एक अक्षर के साथ लगातार अक्षरों की एक अंतिम जगह।

@TimmyD वाह मैंने पहले कभी नहीं देखा, और यह शानदार है। धन्यवाद!
— रिश्वतखोर

@TimmyD आप जानते हैं, मैंने मूल रूप से इसे एकात्मकता के साथ लिखने की कोशिश की थी -joinऔर मैं शपथ ले सकता था कि यह रिक्त स्थान के साथ जुड़ रहा था और $nullएस नहीं , जिसने मुझे आश्चर्यचकित कर दिया, लेकिन सिर्फ कोशिश करने के बाद इसे फिर से काम किया जैसा कि मुझे मूल रूप से उम्मीद थी। अजीब (और फिर से धन्यवाद)!
— रिश्वतखोर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.