rot32エンクリプターを構築する


10

ASCII文字空間では文字がすべて同じ順序であるため、ゴルフrot13暗号化機能の構築は簡単すぎます。代わりにrot32エンジンを試してみましょう。

あなたの仕事は、Base64文字列を入力として受け取り、同じ文字列を返すが、各文字が元の文字から32シンボル回転した(本質的に、最初のビットが反転した)関数を作成することです。

この問題に使用するbase64エンコード文字列には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
質問から、base-64デコード、ビットトゥウィドル、base-64エンコードを実行する必要があることは理解できます。しかし、サンプルの回答は、base-64に関するすべての話が真っ赤なニシンであることを示唆しており、無視されない文字のセットがより大きいことを除いて、rot-13と同じです。どっち?
— Peter Taylor

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

Bash / Unixシェル、29

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

STDINからの入力、STDOUTでの出力。


5

Perl、41

ただの文字変換。STDINから読み取り、STDOUTに出力します。

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

ここで試してみてください。


2
Perlはesolang(および/またはゴルフ指向の言語)ではないと誰が言ったのですか?
— オプティマイザ

あなたは使用していくつかの文字をオフに剃ることができ-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

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

これは、独自の実装をテストするために使用できる、Pythonの手に負えない最後の参照実装です。


少なくとも、私はそれが最後の場所にとどまることを望みます。
— Joe Z.

0

GolfScript(41 40バイト)

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

オンラインデモ

これには2つの部分があります。翻訳はで最後の技術上の変種言及されているに私の先端trGolfScriptで、他の部分は、文字列を使用して文字列の建物である0:a{A[にそれらを回すためにchar型の値の配列と折り目として文字範囲。を使用し32/(*て、2番目の32文字と翻訳する文字の間に最初の32文字を挿入することにより、翻訳された文字列を作成することに注意してください。


0

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

LiveScript、91

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

LiveScript、50

文字列が2番目の引数として許可されている場合。

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}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.