バイナリ、8進数、16進数のいずれかであるバイトを含む文字列を入力すると、同等の文字列のASCIIが出力されます。
たとえば、入力は次の形式で提供されます。
501200100001147
これは
0x50 0o120 0b01000011 0x47
これは(ASCIIで)と同等です
PPCG
2進数、8進数、16進数には、常にそれぞれ8、3、2桁が表示されます。
この課題では、印刷可能なASCIIのみをサポートする必要があります。これは32..126
包括的範囲です。したがって、あいまいさがあることは不可能です。ご了承ください
文字列は、それがaで始まり
0
、2番目の文字がa0
またはaの場合に限り、バイナリを表し1
ます。すべての印刷可能なASCII文字は、バイナリでハイビットがオフになっています(つまり、aで始まります0
)。また、16進数または8進数で始まっ00
たり01
、それらで始まったりするものはありません 。道のバイナリうちでは、ノートでは、すべての印刷可能なASCII文字で始まること
2
-7
進にして0
-1
8進数で。したがって、16進数と8進数を明確に区別することもできます。
16進入力は、小文字または大文字のどちらか便利な方で提供されると想定できます。
Regexは、チャレンジの解析部分をかなり簡単にします。私は完全に正規表現の使用を禁止したくありませんが、正規表現を使用しない対応策よりも長い非正規表現ソリューションがある場合は、とにかく「本当の」答えと一緒に気軽に投稿してください。同様にそれを見てください。:)
これはcode-golfなので、バイト単位の最も短いコードが優先されます。
テストケース:
In Out
-----------------------------------
501200100001147 | PPCG
5C01101111100 | \o@
313206306400110101 | 12345
2A200530402C | * + ,
0011111100111111 | ??
<empty string> | <empty string>
0[01]{7}
代わりに使用できると思います0[01].{6}
。