Esta es una pregunta de seguimiento a mi pregunta de Puzzling.SE : pregunté si hay una función f que asigne cadenas booleanas a cadenas booleanas, de modo que f (f (b)) = reversa (b) para todas las cadenas de entrada b . (Por reversa , me refiero a la función que invierte el orden de los bits).
El enlace anterior contiene una respuesta positiva, con prueba, por la gran f '' , pero es posible que desee reflexionar sobre la pregunta antes de buscar.
Implemente dicha función f en la menor cantidad de bytes posible.
Puede leer la entrada de STDIN o tomar un argumento de función; y escribe la cadena de resultado en STDOUT o la devuelve.
De cualquier manera, puede trabajar con cadenas reales de dos bytes distintos o caracteres de su elección (digamos
0
y1
, o\x00
y\x01
), o con matrices / listas de valores de verdad y falsedad . Sin embargo, elija dos valores y quédese con ellos.El resultado de una sola aplicación de f debe ser una cadena binaria en sí misma: no hay respuestas tontas como
b -> if b starts with 'x' then reverse(b[1:]) else 'x' + b
...Tu función debe ser total ; en particular, la entrada puede ser la cadena vacía, o un bit de largo, etc. No hay límite superior para la longitud de la cadena.
También debe ser puro : no mantenga ningún estado global entre llamadas a funciones; la cadena de entrada debe determinar completamente la cadena de salida.