Ceci est basé sur xkcd # 153 .
Créez un programme ou une fonction nommée qui prend 2 paramètres, chacun étant une chaîne ou une liste ou un tableau d'octets ou de caractères. Le deuxième paramètre ne contiendra que des caractères tirés de lrfu
(ou les octets ASCII équivalents). Elle doit être interprétée comme une série d'instructions à exécuter sur une séquence de bits représentée par le premier paramètre.
Le traitement effectué doit être équivalent à ce qui suit:
- Convertissez le premier paramètre en une seule chaîne de bits formée en concaténant les bits de chaque caractère (interprété comme l'un des codes ASCII 7 bits, ASCII étendu 8 bits ou un codage Unicode standard). Par exemple, si le premier paramètre est
"AB"
alors ce serait l'un de10000011000010
(7 bits),0100000101000010
(8 bits ou UTF-8)00000000010000010000000001000010
, ou01000001000000000100001000000000
(UTF-16 dans les deux endiannesses), etc. - Pour chaque caractère du deuxième paramètre, dans l'ordre, exécutez l'instruction correspondante:
l
fait tourner la chaîne de bits à gauche. Par exemple,10000011000010
devient00000110000101
.r
fait tourner la chaîne de bits à droite. Par exemple,10000011000010
devient01000001100001
.f
retourne (ou inverse) chaque bit de la chaîne de bits. Par exemple,10000011000010
devient01111100111101
.u
inverse la chaîne de bits. Par exemple,10000011000010
devient01000011000001
.
- Convertissez la chaîne de bits en une chaîne ASCII qui utilise un caractère par bit. Par exemple,
10000011000010
devient"10000011000010"
. En effet, tous les ensembles de 7/8 bits n'ont pas de caractère attribué.
Exemple (en Python):
>>> f("b", "rfu")
01110011
Il se transforme "b"
en sa représentation binaire ASCII 8 bits 01100010
, le fait pivoter vers la droite ( 00110001
), retourne chaque bit ( 11001110
) et l'inverse ( 01110011
).
Souplesse
D' autres caractères peuvent être utilisés à la place des personnages l
, r
, f
et u
, mais ils doivent être clairement documentées.
Tableau d'affichage
Merci à @Optimizer avoir créé l'extrait de code suivant. Pour l'utiliser, cliquez sur "Afficher l'extrait de code", faites défiler vers le bas et cliquez sur "► Exécuter l'extrait de code".
"rrfrburb"
? De plus, lorsque l'on décale ou inverse des bits, le fait-on pour chaque lettre individuelle ou pour la chaîne dans son ensemble? Plus de cas de test le rendraient plus clair.