这是基于xkcd#153的。
制作一个带有2个参数的程序或命名函数,每个参数是一个字符串或字节或字符的列表或数组。第二个参数将仅包含从中提取的字符lrfu
(或等效的ASCII字节)。应该将其解释为要对由第一参数表示的位序列执行的一系列指令。
执行的处理必须等同于以下内容:
- 将第一个参数转换为通过串联每个字符的位组成的单个位串(解释为7位ASCII,8位扩展ASCII或标准Unicode编码之一)。例如,如果第一个参数是
"AB"
那么这将是一个10000011000010
(7位),0100000101000010
(8位或UTF-8),00000000010000010000000001000010
或01000001000000000100001000000000
(UTF-16在这两个字节排列顺序)等。 - 对于第二个参数中的每个字符,依次执行相应的指令:
l
将位串左移一位。例如10000011000010
变为00000110000101
。r
将位串右移一位。例如10000011000010
变为01000001100001
。f
翻转(或反转)位串中的每个位。例如10000011000010
变为01111100111101
。u
反转位串。例如10000011000010
变为01000011000001
。
- 将位字符串转换为ASCII字符串,每位使用一个字符。例如
10000011000010
变为"10000011000010"
。这是因为并非所有7/8位的集合都分配有一个字符。
示例(在Python中):
>>> f("b", "rfu")
01110011
它变成"b"
8位ASCII二进制表示形式01100010
,向右旋转(00110001
),翻转每个位(11001110
),然后反转(01110011
)。
灵活性
其它字符可以是用来代替字符l
,r
,f
,和u
,但他们必须清楚地记录在案。
计分板
感谢@Optimizer创建以下代码段。要使用,请单击“显示代码段”,滚动到底部,然后单击“►运行代码段”。
"rrfrburb"
吗?另外,当一个移位或反转位时,是针对每个单独的字母还是整个字符串执行一个操作?更多的测试案例将使其更加清晰。