Jest to oparte na xkcd # 153 .
Utwórz program lub funkcję o nazwie, która pobierze 2 parametry, z których każdy jest łańcuchem, listą lub tablicą bajtów lub znaków. Drugi parametr będzie zawierał tylko znaki zaczerpnięte z lrfu
(lub równoważne bajty ASCII). Należy to interpretować jako ciąg instrukcji do wykonania na sekwencji bitowej reprezentowanej przez pierwszy parametr.
Wykonane przetwarzanie musi być równoważne z następującymi:
- Konwertuj pierwszy parametr na pojedynczy ciąg bitów utworzony przez konkatenację bitów każdego znaku (interpretowanego jako jeden z 7-bitowego ASCII, 8-bitowego rozszerzonego ASCII lub standardowego kodowania Unicode). Np. Jeśli pierwszym parametrem jest,
"AB"
to będzie to jeden z10000011000010
(7-bitów),0100000101000010
(8-bitów lub UTF-8)00000000010000010000000001000010
lub01000001000000000100001000000000
(UTF-16 w dwóch endiannościach) itp. - Dla każdego znaku w drugim parametrze wykonaj kolejno odpowiednią instrukcję:
l
obraca łańcuch bitów w lewo. Np .10000011000010
Staje się00000110000101
.r
obraca łańcuch bitów w prawo. Np .10000011000010
Staje się01000001100001
.f
odwraca (lub odwraca) każdy bit w łańcuchu bitów. Np .10000011000010
Staje się01111100111101
.u
odwraca ciąg bitów. Np .10000011000010
Staje się01000011000001
.
- Przekształć ciąg bitów na ciąg ASCII, który używa jednego znaku na bit. Np .
10000011000010
Staje się"10000011000010"
. Wynika to z faktu, że nie wszystkie zestawy 7/8 bitów mają przypisany znak.
Przykład (w Pythonie):
>>> f("b", "rfu")
01110011
Przekształca się "b"
w 8-bitową reprezentację binarną ASCII 01100010
, obraca ją w prawo ( 00110001
), odwraca każdy bit ( 11001110
) i odwraca ( 01110011
).
Elastyczność
Inne znaki mogą być stosowane zamiast znaków l
, r
, f
, i u
, ale muszą one być wyraźnie udokumentowane.
Tablica wyników
Dzięki @Optimizer za utworzenie następującego fragmentu kodu. Aby użyć, kliknij „Pokaż fragment kodu”, przewiń w dół i kliknij „► Uruchom fragment kodu”.
"rrfrburb"
? Ponadto, kiedy przesuwa się lub odwraca bity, czy robi to dla każdej pojedynczej litery lub ciągu jako całości? Więcej przypadków testowych by to wyjaśniło.