Xây dựng một bộ mã hóa rot32


10

Xây dựng một bộ mã hóa rot13 được đánh gôn là quá dễ dàng vì các chữ cái đều có cùng thứ tự trong không gian ký tự ASCII. Hãy thử một động cơ rot32 thay thế.

Nhiệm vụ của bạn là xây dựng một hàm lấy chuỗi Base64 làm đầu vào và trả về cùng một chuỗi nhưng với mỗi chữ cái được xoay 32 ký hiệu từ gốc (về bản chất, với bit đầu tiên được lật).

Chuỗi mã hóa base64 được sử dụng cho vấn đề này 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/có ký tự đệm là =. Điều này là để ngăn các giải pháp sử dụng hoặc nhập thư viện Base64 tích hợp trong đó các chuỗi thường bắt đầu bằng Athay vì 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+

Chương trình ngắn nhất để làm như vậy trong bất kỳ ngôn ngữ nào sẽ thắng.


4
Từ câu hỏi, tôi sẽ hiểu rằng chúng ta phải thực hiện giải mã base-64, một số twiddling và mã hóa base-64. Nhưng câu trả lời mẫu của bạn cho thấy rằng tất cả các cuộc nói chuyện về cơ sở 64 là cá trích đỏ và nó giống như rot-13 ngoại trừ tập hợp các ký tự không bị bỏ qua lớn hơn. Đó là cái gì
Peter Taylor

1
Nó giống như rot-13, nhưng tôi đã nghĩ rằng twiddling có thể là một chiến lược khả thi để làm cho mã ngắn hơn.
Joe Z.

Câu trả lời:


4

CJam, 24 byte

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

Hãy thử trực tuyến.

Làm thế nào nó hoạt động

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

Vỏ Bash / Unix, 29

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

Đầu vào từ STDIN, đầu ra trên STDOUT.


5

Perl, 41

Chỉ là một phiên âm đơn giản . Đọc từ STDIN, xuất ra STDOUT:

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

Hãy thử nó ở đây.


2
Ai nói Perl không phải là một esolang (và / hoặc ngôn ngữ định hướng chơi gôn)?
Tối ưu hóa

Bạn có thể tắt một vài ký tự bằng cách sử dụng các công tắc -p-edòng lệnh để loại bỏ $_=<>;;print.
Đánh dấu

4

CJam, 45 41 38 29 27 26 byte

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

Đọc chuỗi được mã hóa từ STDIN

Cách thức hoạt động :

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";

Dùng thử trực tuyến tại đây


3

Con trăn, 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

Đây là một triển khai tham chiếu ở vị trí cuối cùng không được chỉnh sửa trong Python mà bạn có thể sử dụng để kiểm tra việc thực hiện của chính mình.


Ít nhất, tôi hy vọng nó ở vị trí cuối cùng.
Joe Z.

0

GolfScript ( 41 40 byte)

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

Bản demo trực tuyến

Có hai phần này: bản dịch là một biến thể của kỹ thuật cuối cùng được đề cập trong mẹo của tôi về trGolfScript và phần khác là xây dựng chuỗi, sử dụng chuỗi 0:a{A[như một mảng các giá trị char và gấp lại để biến chúng thành phạm vi nhân vật. Lưu ý việc sử dụng 32/(*để xây dựng chuỗi dịch bằng cách chèn 32 ký tự đầu tiên giữa 32 ký tự thứ hai và ký tự chúng tôi đang dịch.


0

trăn, 69

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

kiểm tra

>>> 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

LiveScript, 91

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

LiveScript, 50

Nếu chuỗi được cho phép như là một đối số thứ hai.

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

0

JavaScript 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}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.