これはxkcd#153に基づいています。
2つのパラメーターをとるプログラムまたは名前付き関数を作成します。各パラメーターは、文字列、またはバイトまたは文字のリストまたは配列です。2番目のパラメーターには、lrfu
(または同等のASCIIバイト)からの文字のみが含まれます。これは、最初のパラメーターで表されるビットシーケンスで実行される一連の命令として解釈される必要があります。
実行される処理は、次と同等である必要があります。
- 最初のパラメーターを各文字のビットを連結して形成される単一のビット文字列に変換します(7ビットASCII、8ビット拡張ASCII、または標準Unicodeエンコードのいずれかとして解釈されます)。たとえば、最初のパラメーターが
"AB"
次にある場合、これは10000011000010
(7ビット)、0100000101000010
(8ビットまたはUTF-8)、、00000000010000010000000001000010
または01000001000000000100001000000000
(2つのエンディアンのUTF-16)などのいずれかになります。 - 2番目のパラメーターの各文字について、順番に、対応する命令を実行します。
l
ビット列を左に回転します。例えばに10000011000010
なり00000110000101
ます。r
ビット列を右に回転します。例えばに10000011000010
なり01000001100001
ます。f
ビット列の各ビットを反転(または反転)します。例えばに10000011000010
なり01111100111101
ます。u
ビット列を反転します。例えばに10000011000010
なり01000011000001
ます。
- ビット文字列をビットごとに1文字を使用するASCII文字列に変換します。例えばに
10000011000010
なり"10000011000010"
ます。これは、7/8ビットのすべてのセットに文字が割り当てられているわけではないためです。
例(Python):
>>> f("b", "rfu")
01110011
それはターン"b"
の8ビットASCIIバイナリ表現に01100010
、それが正しい(回転00110001
)(各ビットを反転させ11001110
)、それを(反転します01110011
)。
柔軟性
その他の文字は文字の代わりに使用することができるl
、r
、f
、そしてu
、彼らは明確に文書化されなければなりません。
スコアボード
次のコードスニペットを作成してくれた@Optimizerに感謝します。使用するには、[コードスニペットを表示]をクリックし、一番下までスクロールして[►コードスニペットを実行]をクリックします。
"rrfrburb"
か?また、ビットをシフトまたはリバースするとき、個々の文字ごとに、または文字列全体に対してそれを行いますか?より多くのテストケースはそれを明確にするでしょう。