To jest pytanie uzupełniające do mojego pytania Puzzling.SE : Zapytałem, czy istnieje funkcja f mapująca ciągi logiczne na ciągi logiczne, tak że f (f (b)) = rewers (b) dla wszystkich ciągów wejściowych b . (Przez odwrotność rozumiem funkcję odwracającą kolejność bitów.)
Powyższy link zawiera pozytywną odpowiedź, z dowodem, przez wielkie f '' , ale możesz zastanowić się nad tym pytaniem przed spojrzeniem.
Zaimplementuj taką funkcję f w jak najmniejszej liczbie bajtów.
Możesz albo odczytać dane wejściowe ze STDIN, albo wziąć argument funkcji; i albo napisz wynikowy ciąg do STDOUT, albo zwróć go.
Tak czy inaczej, możesz pracować z rzeczywistymi ciągami dwóch różnych bajtów lub znaków do wyboru (powiedz
0i1, lub\x00i i\x01), lub z tablicami / listami wartości prawdziwych i fałszywych . Wybierz dwie wartości i trzymaj się ich.Wynikiem pojedynczego zastosowania f musi być sam ciąg binarny: żadne głupie odpowiedzi, takie jak
b -> if b starts with 'x' then reverse(b[1:]) else 'x' + b...Twoja funkcja powinna być całkowita ; w szczególności wejściem może być pusty ciąg lub jeden bit długości itp. Nie ma górnej granicy długości łańcucha.
Powinno być również czyste : nie utrzymuj żadnego globalnego stanu między wywołaniami funkcji; ciąg wejściowy musi całkowicie określać ciąg wyjściowy.