rot32 암호화 기 구축


10

ASCII 문자 공간에서 문자가 모두 동일한 순서이므로 골프 용 rot13 암호화기를 만드는 것이 너무 쉽습니다. 대신 rot32 엔진을 사용해 봅시다.

귀하의 작업은 Base64 문자열을 입력으로 사용하고 동일한 문자열을 반환하지만 각 문자는 원래 문자에서 본질적으로 32 기호를 회전시키는 함수를 작성하는 것입니다 (기본적으로 첫 번째 비트가 뒤집힌 상태).

이 문제에 사용할 base64 인코딩 문자열 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/은 패딩 문자가입니다 =. 이렇게하면 문자열이 일반적으로 A대신 시작되는 내장 Base64 라이브러리를 사용하거나 가져 오는 솔루션을 방지 할 수 있습니다 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
이 질문에서 우리는 base-64 디코드, 비트 트위들 링 및 base-64 인코딩을 수행해야한다는 것을 이해할 것입니다. 그러나 귀하의 샘플 답변에 따르면 base-64에 대한 모든 이야기는 빨간색 청어이며 무시되지 않는 문자 세트가 더 크다는 점을 제외하면 rot-13과 같습니다. 무엇 이니?
피터 테일러

1
그것은 rot-13과 비슷하지만 비트 트위들 링이 코드를 더 짧게 만드는 가능한 전략이라고 생각했습니다.
Joe Z.

답변:


4

CJam, 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
펄이에 솔랑 (또는 골프 중심 언어)이 아니라고 누가 말합니까?
Optimizer

당신은을 사용하여 몇 가지 문자를 면도 할 수 -p-e명령 줄이 제거로 전환 $_=<>;하고 ;print.
Mark

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

이것은 자신의 구현을 테스트하는 데 사용할 수있는 파이썬에서 마지막이 아닌 참조 참조 구현입니다.


적어도 나는 그것이 마지막 자리에 있기를 바랍니다 .
Joe Z.

0

GolfScript ( 41 40 바이트)

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

온라인 데모

여기에는 두 부분이 있습니다. 번역은 GolfScript 에서 제가 끝 tr냈던 마지막 기술에 대한 변형 이며, 다른 부분은 문자열 0:a{A[을 문자 값의 배열로 사용하고 접는 문자열을 사용하는 문자열 작성입니다. 문자 범위. 32/(*두 번째 32 문자와 번역하는 문자 사이에 첫 32 문자를 삽입하여 번역 된 문자열을 작성하는 것에주의하십시오 .


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.