একটি রোট 32 এনক্রিপটর তৈরি করুন


10

একটি গল্ফযুক্ত রট 13 এনক্রিপটর তৈরি করা খুব সহজ কারণ অক্ষরগুলি ASCII অক্ষরের জায়গাতে একই ক্রম। পরিবর্তে একটি rot32 ইঞ্জিন চেষ্টা করুন।

আপনার কাজটি এমন একটি ফাংশন তৈরি করা যা একটি বেস 64৪ স্ট্রিংটিকে ইনপুট হিসাবে গ্রহণ করে এবং একই স্ট্রিংটি দেয় তবে প্রতিটি বর্ণের সাথে তার আসলটি থেকে 32২ টি প্রতীক ঘোরানো হয় (সংক্ষেপে, প্রথম বিটটি উল্টানো থাকে)।

এই সমস্যার জন্য ব্যবহার করতে বেস 64 এনকোডিং স্ট্রিং এর 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/প্যাডিং চরিত্রের সাথে =। এই সমাধান অন্যথায় ব্যবহার করুন অথবা আমদানি করবে একটি বিল্ট-ইন করুন Base64- গ্রন্থাগার যেখানে স্ট্রিং স্বাভাবিকভাবে দিয়ে শুরু প্রতিরোধ করা হয় 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৪ সম্পর্কে সমস্ত কথা একটি লাল বর্ণের রঙ এবং এটি পচ -১ like এর মতো যা অক্ষরের সেটটিকে উপেক্ষা করা হয় না সেগুলি আরও বড়। ইহা কোনটা?
পিটার টেলর

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

সিজেম, 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

গল্ফস্ক্রিপ্ট ( 41 40 বাইট)

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

অনলাইন ডেমো

এর দুটি অংশ রয়েছে: গল্ফস্ক্রিপ্টে আমার টিপতেtr উল্লিখিত সর্বশেষ প্রযুক্তিতে অনুবাদটি একটি বৈকল্পিক এবং অন্য অংশটি স্ট্রিং বিল্ডিং, যা স্ট্রিংটিকে 0:a{A[চর মানগুলির অ্যারে হিসাবে ব্যবহার করে এবং এগুলিকে রূপান্তর করার জন্য একটি ভাঁজ চরিত্রের ব্যাপ্তি। 32/(*দ্বিতীয় 32 অক্ষর এবং আমরা যে চরিত্রটি অনুবাদ করছি তার মধ্যে প্রথম 32 টি অক্ষর tingুকিয়ে অনুবাদকৃত স্ট্রিং তৈরির ব্যবহারটি লক্ষ্য করুন ।


0

অজগর, 69

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}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.