चलो इसे डिक्रिप्ट करें!

Aug 22 2020

ध्यान दें

यह डिक्रिप्शन चैलेंज है। एन्क्रिप्शन चुनौती यहाँ मिल सकती है ।

चुनौती

नीचे दिए गए नियमों का उपयोग करके चुनौती दी गई स्ट्रिंग को डिक्रिप्ट करना है। स्ट्रिंग में केवल लोअरकेस अक्षर , अंक और / या रिक्त स्थान होंगे । यदि आप जानना चाहते हैं कि इनपुट स्ट्रिंग को कैसे एन्क्रिप्ट किया गया है, तो इस चुनौती को देखें !

एक वर्ण के बराबर

अब, सबसे पहले आपको यह जानना होगा कि प्रत्येक वर्ण के "समकक्ष" को कैसे खोजना है।

यदि चरित्र एक व्यंजन है, तो यह समान होने का पता लगाने का तरीका है:

1) List all the consonants in alphabetical order
    b c d f g h j k l m n p q r s t v w x y z
2) Get the position of the consonant you are finding the equivalent of.
3) The equivalent is the consonant at that position when starting from the end.

उदाहरण: 'h' और 't' एक दूसरे के समतुल्य हैं क्योंकि 'h', 't' क्रमशः आरंभ और अंत से 6 ठी स्थिति में हैं।

स्वरों / अंकों के बराबर खोजने के लिए एक ही प्रक्रिया का पालन किया जाता है। आप क्रम में सभी स्वरों या अंकों (0 से शुरू) को सूचीबद्ध करते हैं और समान पाते हैं।

नीचे सभी पात्रों के समकक्षों की सूची दी गई है:

b <-> z
c <-> y
d <-> x
f <-> w
g <-> v
h <-> t
j <-> s
k <-> r
l <-> q
m <-> p
n <-> n

a <-> u
e <-> o
i <-> i

0 <-> 9
1 <-> 8
2 <-> 7
3 <-> 6
4 <-> 5

डिक्रिप्टिंग के नियम

  1. आप दो खाली तारों से शुरू करते हैं, चलो उन्हें कॉल करें s1और s2। हम इनपुट स्ट्रिंग के बाएं से दाएं की ओर बढ़ेंगे। शुरुआत में, हम पहले खाली स्ट्रिंग पर विचार करेंगे, अर्थात s1। जब भी हम एक स्वर का सामना करेंगे, हम दो तारों के बीच स्विच करेंगे।

  2. हम इनपुट स्ट्रिंग के वर्तमान वर्ण के बराबर लेते हैं, या रिक्त स्थान होने पर रिक्त स्थान। इस चरित्र को कहते हैं c। cअब में जोड़ा जाता है के अधिकार s1 (यदि हम विचार कर रहे हैं s1वर्तमान में) या करने के बाईं s2 (यदि हम विचार कर रहे हैं s2वर्तमान में)।

  3. यदि वह वर्ण एक स्वर था, तो अब दूसरे तार पर स्विच करें ( s1 <-> s2)।

  4. इनपुट स्ट्रिंग में प्रत्येक वर्ण के लिए चरण 2 (और 3 स्वरों के लिए) दोहराएं।

  5. कॉनटेनटेट s1और s2परिणाम डिक्रिप्टेड स्ट्रिंग है।

अब मुझे आपके लिए एक स्ट्रिंग डिक्रिप्ट करनी चाहिए।

String = "htioj ixej uy "
Initially, s1 = s2 = ""
Current: s1
Moving left to right
"h" -> "t" (s1 = "t")
"t" -> "h" (s1 = "th") 
"i" -> "i" (s1 = "thi")
Vowel encountered. Switching to s2 now.
"o" -> "e" (s2 = "e")
Vowel encountered. Switching to s1 now.
"j" -> "s" (s1 = "this")
" " -> " " (s1 = "this ")
"i" -> "i" (s1 = "this i")
Vowel encountered. Switching to s2 now.
"x" -> "d" (s2 = "de") [Note that when dealing with s2, we append to the left]
"e" -> "o" (s2 = "ode")
Vowel encountered. Switching to s1 now.
"j" -> "s" (s1 = "this is"
" " -> " " (s1 = "this is ")
"u" -> "a" (s1 = "this is a")
Vowel encountered. Switching to s2 now.
"y" -> "c" (s2 = "code")
" " -> " " (s2 = " code")
Now, append s1 and s2 to get:
"this is a code"

Output -> "this is a code"

उदाहरण

"wqcjmc" -> "flyspy"
"toek" -> "hero"
"toyike" -> "heroic"
"uo" -> "ae"
"uoz" -> "abe"
"htoo jmuy" -> "the space"
"uh68v8x " -> "a d1g13t"
"fo78i d" -> "we xi12"
"htioj ixej uy " -> "this is a code"
"jea ceeac hnx8x vni kokhj jiuth xoqqc xohmcky" -> "so you really decrypted this string d1dnt you"

आप लोअरकेस के बजाय अपरकेस अल्फाबेट्स का उपयोग करना चुन सकते हैं।

स्कोरिंग

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

जवाब

5 JonathanAllan Aug 22 2020 at 02:48

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

ØḄ,ØẹØDṭ,U$F€yµe€ØẹŻœṗµ;ṚU$m2

एक पूर्ण कार्यक्रम जो डीकोड किए गए पाठ को प्रिंट करता है।

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

कैसे?

ØḄ,ØẹØDṭ,U$F€yµe€ØẹŻœṗµ;ṚU$m2 - Main Link: list, S
ØḄ                            - consonant characters
   Øẹ                         - vowel characters
  ,                           - pair
     ØD                       - digit characters
       ṭ                      - tack -> ["bcd...","aeiou","012..."]
          $ - last two links as a monad: U - upend -> ["...dcb","uoiea","...210"] , - pair -> [["bcd...","aeiou","012..."],["...dcb","uoiea","...210"]] F€ - flatten each -> ["bcd...aeiou012...","...dcbuoiea...210"] y - translate S using that map µ - new monadic chain (i.e. f(A=that)) Øẹ - vowel characters e€ - (for c in A) exists in (vowels)? Ż - prepend a zero œṗ - partition (A) before truthy elements (of that) µ - new monadic chain (i.e. f(that)) ...e.g.: f(["thi","e","s i","do","s a","c "]) $   - last two links as a monad:
                        Ṛ     -   reverse    ["c ","s a","do","s i","e","thi"]
                         U    -   upend      [" c","a s","od","i s","e","iht"]
                       ;      - concatenate  ["thi","e","s i","do","s a","c "," c","a s","od","i s","e","iht"]
                           m2 - mod-2 slice  ["thi",    "s i",     "s a",    ," c",      "od",      "e"      ]
                              - implicit, smashing print -> this is a code
4 Arnauld Aug 22 2020 at 03:06

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

वर्णों की एक सरणी की अपेक्षा करता है।

s=>s.map(c=>(C="bzcydxfwgvhtjskrlqmpnn  aueoii",c=C[j=C.search(c)^1]||9-c,+s?b=c+b:a+=c,s^=j>23),a=b='')&&a+b

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

कैसे?

हम cनिम्नलिखित लुकअप स्ट्रिंग में प्रत्येक वर्ण के सूचकांक की तलाश करते हैं :

 0         1         2
 012345678901234567890123456789
"bzcydxfwgvhtjskrlqmpnn  aueoii"

यदि वर्ण नहीं मिला है, तो यह एक अंक होना चाहिए जो कि प्रतिस्थापित किया गया है 9-c। अन्यथा, हम सूचकांक के कम से कम महत्वपूर्ण बिट को निष्क्रिय करके समकक्ष चरित्र की स्थिति प्राप्त करते हैं।

उदाहरण के लिए: j→ 12→ 13→s

नए चरित्र को या तो जोड़ा गया है aया पहले से तैयार किया गया है b।

हम बीच स्विच करते हैं aऔर bजब भी सूचकांक 23 से अधिक होता है - यानी cएक स्वर।

4 JoeFerndz Aug 22 2020 at 16:44

पायथन, 226, 160 146 बाइट्स

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

मैं अजगर के लिए काफी नया हूं और इस चुनौती को आजमाना चाहता हूं। मुझे पता है कि लैम्ब्डा या सरलीकृत कोड का उपयोग करके इसमें बहुत सुधार किया जा सकता है। मैं अपना कोड दिखा रहा हूं ताकि मुझे प्रतिक्रिया मिल सके।

कोड के नए तरीके सीखने में मेरी मदद करने के लिए @Ananauld को धन्यवाद। अब 160 बाइट्स पर

अधिक जानकारी और परिशोधन। अब 146 पर।

def k(y):
x='aueoiibzcydxfwgvhtjskrlqmpnn0918273645  '
s=1
b=['']*2
for i in y:n=x.find(i);b[s]+=x[n+1-2*(n%2)];s^=n<6
print(b[1]+b[0][::-1])

पुराना कोड:

def k(y):
 x='aueoiibzcydxfwgvhtjskrlqmpnn0918273645  '
 s=1
 b=c=''
 def a(t):
  m=n+1 if n%2==0 else n-1;t+=x[m];return t
 for i in y:
  n=x.find(i)
  if s:
   b=a(b)
  else:
   c=a(c)
  if n<=5:s=not s
 b+=c[::-1]
 print(b)

k('wqcjmc')
k('toek')
k('toyike')
k('uo')
k('uoz')
k('htoo jmuy')
k('uh68v8x ')
k('fo78i d')
k('htioj ixej uy ')
k('jea ceeac hnx8x vni kokhj jiuth xoqqc xohmcky')

सभी नमूना वस्तुओं का परीक्षण किया और सही प्रतिक्रिया मिली।

"wqcjmc" -> "flyspy"
"toek" -> "hero"
"toyike" -> "heroic"
"uo" -> "ae"
"uoz" -> "abe"
"htoo jmuy" -> "the space"
"uh68v8x " -> "a d1g13t"
"fo78i d" -> "we xi12"
"htioj ixej uy " -> "this is a code"
"jea ceeac hnx8x vni kokhj jiuth xoqqc xohmcky" -> "so you really decrypted this string d1dnt you"
2 Neil Aug 22 2020 at 06:50

रेटिना 0.8.2 , 89 83 80 71 बाइट्स

[aeiou]|$ $&¶
+`(¶.+)¶(.*)$ $2$1 O$^r`.\G

T`¶b-df-hj-maed\oup-tv-z_`Ro

इसे ऑनलाइन आज़माएं! लिंक में परीक्षण मामले शामिल हैं। यह एन्कोडिंग की तुलना में आसान हो गया, जैसा कि इस तथ्य से प्रदर्शित होता है कि मैं रेटिना 0.8.2 की आवश्यकता के बजाय इसे रेटिना 0.8.2 में कोड करने में सक्षम था। स्पष्टीकरण:

[aeiou]|$ $&¶

स्वरों पर समाप्त होने वाले सब्सट्रिंग्स पर इनपुट को विभाजित करें। एक अतिरिक्त विभाजन को स्ट्रिंग के अंत में मजबूर किया जाता है ताकि कम से कम दो लाइनें हों।

+`(¶.+)¶(.*)$ $2$1

वैकल्पिक रेखाओं को आपस में मिलाएं, ताकि पहली रेखा सभी विषम रेखाओं का मिलन हो और दूसरी रेखा सभी सम रेखाओं का संघटन हो।

r`.\G

अंतिम (दूसरी) लाइन पर केवल वर्णों का मिलान ...

O$^`

.. मैचों को उल्टा करें, इस प्रकार केवल दूसरी पंक्ति को उलट दें।

T`¶b-df-hj-maed\oup-tv-z_`Ro

एक साथ दो पंक्तियों को मिलाएं और अक्षरों को डिकोड करें। Roस्ट्रिंग को इसके रिवर्स में ट्रांसलेट करने का कारण बनता है। मध्य व्यंजन nऔर स्वर iमानचित्र स्वयं को सूचीबद्ध करने की आवश्यकता नहीं है। विशेष के लिए नक्शे _इस प्रकार इसे हटाने। पहले और अंतिम 10 व्यंजन और पहले और अंतिम दो स्वर फिर अंकों को घेर लेते हैं। ( oसामान्य रूप से विशेष है इसलिए इसे यहां उद्धृत किया जाना है।)

2 DominicvanEssen Aug 27 2020 at 01:51

आर , 190 बाइट्स

function(i,`/`=strsplit){a=el(" 01234aeibcdfghjklmnpqrstvwxyziou98765 "/"")
names(a)=rev(a)
j=k=""
for(l in a[el(i/"")]){if(T)j=c(j,l)else k=c(l,k)
if(grepl(l,"aeiou"))T=!T}
cat(j,k,sep="")}

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

स्वयं पर ध्यान दें: एक नया, गैर- R , गोल्फ टेक्स्ट आधारित चुनौतियों के लिए भाषा सीखें ...

टिप्पणी की:

decrypt=function(i,
`/`=strsplit){                  # use infix '/' as alias to strsplit function
 a=el(" 01234aeibcdfghjklmnpqrstvwxyziou98765 "/"")
                                # a=vector of characters with equivalents at reverse index
 names(a)=rev(a)                # name characters by equivalent
 j=k=""                         # initialize j,k as empty strings
 for(l in a[el(i/"")]){         # for each input letter (split using /), find its equivalent l
  if(T)j=c(j,l)else k=c(l,k)    #  if T=1 (initial value) append l to j, otherwise put it at start of k
  if(grepl(l,"aeiou"))T=!T}     #  if it was a vowel, T=not T
 cat(j,k,sep="")}               # finally, output j,k
2 gastropner Aug 22 2020 at 08:26

सी (जीसीसी) , 144 143 140 बाइट्स

-1 -3 बाइट्स सीलिंगकैट के लिए धन्यवाद

k,v,p,a;f(char*s,char*o){for(k=p=0,v=strlen(s);a=*s++;p^=1065233>>a-97&1)o[p?--v:k++]=a<33?a:a<58?105-a:"uzyxowvtisrqpnemlkjhagfdcb"[a-97];}

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

KevinCruijssen Aug 24 2020 at 13:59

05AB1E , 27 26 बाइट्स

žMIå0šÅ¡ι€S`R«žN‡žM‡žh‡

I / O पात्रों की सूची के रूप में।

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें (आई / ओ के साथ सुंदर-प्रिंट में शामिल हुए)।

स्पष्टीकरण:

žM             # Push the vowels "aeiou"
  Iå           # Check for each character in the input-list if it's in the vowel string
               #  i.e. ["h","t","i","o","j"," ","i","x","e","j"," ","u","y"," "]
               #   → [0,0,1,1,0,0,0,1,0]
    0š         # Prepend a leading 0
               #  → [0,0,0,1,1,0,0,0,1,0]
      Å¡       # Split the (implicit) input-string on the truthy values
               #  → [["h","t","i"],["o"],["j"," ","i"],["x","e"],["j"," ","u"],["y"," "]]
        ι      # Uninterleave the list of lists
               #  → [[["h","t","i"],["j"," ","i"],["j"," ","u"]],[["o"],["x","e"],["y"," "]]]
         €S    # Convert each inner list of lists to a flattened list of characters
               #  → [["h","t","i","j"," ","i","j"," ","u"],["o","x","e","y"," "]]
           `   # Push both lists of characters separated to the stack
               #  → ["h","t","i","j"," ","i","j"," ","u"] and ["o","x","e","y"," "]
            R  # Reverse the second string
               #  → ["h","t","i","j"," ","i","j"," ","u"] and [" ","y","e","x","o"]
             « # Merge the two lists together
               #  → ["h","t","i","j"," ","i","j"," ","u"," ","y","e","x","o"]
žN             # Push the consonants "bcdfghjklmnpqrstvwxyz"
  Â            # Bifurcate it; short for Duplicate & Reverse copy
   ‡           # Transliterate the "bcdfghjklmnpqrstvwxyz" to "zyxwvtsrqpnmlkjhgfdcb"
               #  → ["t","h","i","s"," ","i","s"," ","u"," ","c","e","d","o"]
žM‡           # Do the same for the vowels "aeiou"
               #  → ["t","h","i","s"," ","i","s"," ","a"," ","c","o","d","e"]
žh‡           # And the digits "0123456789"
               #  → ["t","h","i","s"," ","i","s"," ","a"," ","c","o","d","e"]
               # (after which the result is output implicitly)
Xcali Sep 04 2020 at 05:45

पर्ल 5 -F , 110 बाइट्स

map{push@{$o[$i]},y/0-9a-z/9876543210uzyxowvtisrqpnemlkjhagfdcb/r;$i^=/[aeiou]/}@F;say@{$o[0]},reverse@{$o[1]}

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