एक Rot32 एन्क्रिप्टर बनाएँ


10

गोल्फ रोट 13 एनकैप्टर का निर्माण बहुत आसान है क्योंकि अक्षर ASCII वर्ण स्थान में समान क्रम हैं। आइए इसके बजाय एक rot32 इंजन का प्रयास करें।

आपका कार्य एक फ़ंक्शन का निर्माण करना है जो बेस 64 स्ट्रिंग को इनपुट के रूप में लेता है और उसी स्ट्रिंग को लौटाता है लेकिन प्रत्येक अक्षर के साथ इसके मूल से 32 प्रतीकों को घुमाया जाता है (संक्षेप में, पहले बिट के साथ फ़्लिप)।

इस समस्या के लिए उपयोग करने वाला बेस 64 एन्कोडिंग स्ट्रिंग 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/एक पेडिंग कैरेक्टर के साथ है =। यह उन समाधानों को रोकने के लिए है जो अन्यथा अंतर्निहित बेस 64 लाइब्रेरी में उपयोग या आयात करेंगे जहां तार सामान्य रूप से शुरू होते Aहैं 0

Example inputs and outputs:

> rot32("THE+QUICK+BROWN+FOX+JUMPS+OVER+THE+LAZY+DOG=")
nb8ukoc6eu5liqhu9irudogjmuip8lunb8uf4tsu7ia=

> rot32("NB8UKOC6EU5LIQHU9IRUDOGJMUIP8LUNB8UF4TSU7IA=")
h5Eoei6C8oBfckboFclo7iadgocjEfoh5Eo9AnmoDc4=

> rot32("Daisy++daisy++give+me+your+answer+true/I+/+m+half+crazy++all+for+the+love+of+you")
7GOY2uuJGOY2uuMO/KuSKu2U+XuGTY0KXuZX+KvcuvuSuNGRLuIXG32uuGRRuLUXuZNKuRU/KuULu2U+

किसी भी भाषा में ऐसा करने वाला सबसे छोटा कार्यक्रम जीत जाता है।


4
प्रश्न से, मैं समझूंगा कि हमें एक बेस -64 डिकोड, कुछ बिट-ट्विडलिंग और एक बेस -64 डेकोड करना होगा। लेकिन आपके नमूना उत्तर से पता चलता है कि बेस -64 के बारे में सभी बातें एक लाल हेरिंग है, और यह केवल सड़न -13 की तरह है सिवाय इसके कि पात्रों का सेट जिसे अनदेखा नहीं किया जाता है, बड़ा है। यह किसका है?
पीटर टेलर

1
यह सिर्फ रोट -13 की तरह है, लेकिन मैं सोच रहा था कि कोड को छोटा करने के लिए बिट-ट्विडलिंग एक संभावित रणनीति हो सकती है।
जो जेड।

जवाबों:


4

सीजेएम, 24 बाइट्स

q"+"":/{a[A"{,^}/_32m>er

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

यह काम किस प्रकार करता है

q         " Read from STDIN.                                                              ";
"+"       " Push that string.                                                             ";
":/{a[A"  " Push that string.                                                             ";
{         " For each character in the second string:                                      ";
  ,       "   Push the string of all charcters with a lower ASCII code.                   ";
  ^       "   Take the symmetric difference of the two topmost strings on the stack.      ";
}/        " Result: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/0123456789'.   ";
_32m>     " Rotate a copy 32 characters to the right.                                     ";
er        " Perform character transliteration.                                            ";

15

बैश / यूनिक्स खोल, 29

tr 0-9a-zA-Z+/ w-zA-Z+/0-9a-v

STDIN से इनपुट, STDOUT पर आउटपुट।


5

पर्ल, 41

बस एक सरल लिप्यंतरण है । STDIN से पढ़ता है, STDOUT को आउटपुट:

$_=<>;y#0-9a-zA-Z+/#w-zA-Z+/0-9a-v#;print

इसे यहाँ आज़माएँ।


2
कौन कहता है कि पर्ल एसोलंग (और / या गोल्फिंग उन्मुख भाषा) नहीं है?
ऑप्टिमाइज़र

आप का उपयोग करके कुछ वर्ण बंद दाढ़ी सकता है -pऔर -eकमांड लाइन से छुटकारा पाने के स्विच $_=<>;और ;print
मार्क

4

CJam, 45 41 38 29 27 26 बाइट्स

qA,'{,97>_eu"+/"+++_32m>er

STDIN से एन्क्रिप्ट किए जाने वाले स्ट्रिंग को पढ़ता है

यह कैसे काम करता है :

q                              "Read input";
 A,                            "Get 0 - 9 array";
   '{,                         "Get array/string of ASCII code 0 till ASCII code of z";
      97>                      "Remove first 96 characters to get a-z string";
         _eu                   "Copy a-z array and turn it to uppercase A-Z array";
            "+/"+++            "Push string +/ and concat all 4 arrays";
                   _32m>       "Copy the array and move first 32 characters to end";
                        er     "Transliterate input using the two arrays, leaving ="
                               "intact as it does not appear in the first array";

इसे यहाँ ऑनलाइन आज़माएँ


3

अजगर, 178

b = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/"

def rot32(s):
    o = ""
    for c in s:
        if c not in b:
            o += c
        else:
            o += b[b.find(c) ^ 32] 
    return o

यह पायथन में एक अनऑर्गोल्ड, अंतिम-स्थान संदर्भ कार्यान्वयन है जिसका उपयोग आप अपने स्वयं के कार्यान्वयन का परीक्षण करने के लिए कर सकते हैं।


कम से कम, मुझे आशा है कि यह अंतिम स्थान पर रहेगा।
जो जेड।

0

GolfScript ( 41 40 बाइट्स)

{'0:a{A['2/{{,>}*}%'+/'+[1$]+.32/(*@?=}%

ऑनलाइन डेमो

इसके दो भाग हैं: अनुवाद गोल्फस्क्रिप्ट में मेरी टिपtr में उल्लिखित अंतिम तकनीक पर एक प्रकार है , और दूसरा भाग स्ट्रिंग बिल्डिंग है, जो स्ट्रिंग 0:a{A[को चार मानों की एक सरणी और उन्हें मोड़ने के लिए एक तह के रूप में उपयोग करता है। चरित्र पर्वतमाला। 32/(*दूसरे 32 वर्णों और हमारे द्वारा अनुवादित चरित्र के बीच पहले 32 वर्णों को सम्मिलित करके अनुवादित स्ट्रिंग बनाने के उपयोग पर ध्यान दें ।


0

अजगर, ६ ९

f = lambda s,b: ''.join(b[b.index(c)^32] if c in b else c for c in s)

परीक्षण

>>> b = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/"
>>> print f("THE+QUICK+BROWN+FOX+JUMPS+OVER+THE+LAZY+DOG=", b)
nb8ukoc6eu5liqhu9irudogjmuip8lunb8uf4tsu7ia=

>>> print f('nb8ukoc6eu5liqhu9irudogjmuip8lunb8uf4tsu7ia=', b)
THE+QUICK+BROWN+FOX+JUMPS+OVER+THE+LAZY+DOG=

0

लाइवस्क्रिप्ट, 91

r=[\0 to\9].concat [\a to\z] [\A to\Z] [\+ \/];f=(.replace /[^\W_]/ ->r[32.^.r.indexOf it])

लाइवस्क्रिप्ट, 50

यदि स्ट्रिंग को दूसरे तर्क के रूप में अनुमति दी जाती है।

f=(a,b)->a.replace /[^\W_]/ ->r[32.^.b.indexOf it]

0

जावास्क्रिप्ट 164

b="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/"
function rot32(s){for(i=0,o="";i<s.length;i++)c=s[i],j=b.indexOf(c),o+=j>-1?b[j^32]:c
return o}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.