这是我的Puzzling.SE问题的后续问题:我问是否有一个函数f将布尔字符串映射到布尔字符串,以便所有输入字符串b的f(f(b))= reverse(b)。(通过reverse,我的意思是反转位顺序的函数。)
上面的链接包含一个很好的肯定答案,并有一个很好的f''证明,但是您可能想在看之前自己考虑一下问题。
用尽可能少的字节实现这种功能f。
您可以从STDIN读取输入,也可以采用函数参数。并将结果字符串写入STDOUT或将其返回。
无论哪种方式,您都可以使用两个不同字节的实际字符串或您选择的字符(例如
0
和1
,或\x00
和\x01
),或使用true和falsy值的数组/列表。选择两个值并坚持使用。单个应用f 的结果必须是二进制字符串本身:没有像
b -> if b starts with 'x' then reverse(b[1:]) else 'x' + b
... 这样的愚蠢答案。你的功能应该是合计的 ; 特别是,输入可以是空字符串,也可以是一比特长,等等。字符串的长度没有上限。
它也应该是纯净的:在函数调用之间不要保留任何全局状态。输入字符串必须完全确定输出字符串。
输出的长度可以与输入的长度不同吗?
—
Luis Mendo
当然!(实际上,否则,证明挑战是不可能的。)
—
林恩
它必须对长度为1或零的字符串起作用吗?
—
CalculatorFeline
是; 功能必须是合计的。我已经在问题中澄清了!
—
林恩