Dies basiert auf xkcd # 153 .
Erstellen Sie ein Programm oder eine benannte Funktion, die zwei Parameter akzeptiert, von denen jeder eine Zeichenfolge oder eine Liste oder ein Array von Bytes oder Zeichen ist. Der zweite Parameter enthält nur Zeichen lrfu(oder die entsprechenden ASCII-Bytes). Es sollte als eine Reihe von Anweisungen interpretiert werden, die an einer durch den ersten Parameter dargestellten Bitfolge ausgeführt werden sollen.
Die durchgeführte Verarbeitung muss der folgenden entsprechen:
- Konvertieren Sie den ersten Parameter in einen einzelnen Bitstring, der durch Verketten der Bits jedes Zeichens gebildet wird (interpretiert als einer von 7-Bit-ASCII, einem 8-Bit-erweiterten ASCII oder einer Standard-Unicode-Codierung). Wenn beispielsweise der erste Parameter lautet,
"AB"ist dies einer von10000011000010(7-Bit),0100000101000010(8-Bit oder UTF-8)00000000010000010000000001000010oder01000001000000000100001000000000(UTF-16 in den beiden Endiannessen) usw. - Führen Sie für jedes Zeichen im zweiten Parameter der Reihe nach die entsprechende Anweisung aus:
ldreht den Bitstring nach links. ZB10000011000010wird00000110000101.rdreht den Bitstring nach rechts. ZB10000011000010wird01000001100001.fkippt (oder invertiert) jedes Bit in der Bitfolge. ZB10000011000010wird01111100111101.ukehrt die Bitfolge um. ZB10000011000010wird01000011000001.
- Konvertieren Sie den Bitstring in einen ASCII-String, der ein Zeichen pro Bit verwendet. ZB
10000011000010wird"10000011000010". Dies liegt daran, dass nicht allen Sätzen von 7/8 Bits ein Zeichen zugewiesen ist.
Beispiel (in Python):
>>> f("b", "rfu")
01110011
Es verwandelt sich "b"in seine 8-Bit-ASCII-Binärdarstellung 01100010, dreht es nach rechts ( 00110001), dreht jedes Bit ( 11001110) um und kehrt es um ( 01110011).
Flexibilität
Andere Zeichen anstelle der Zeichen verwendet werden können l, r, f, und u, aber sie müssen eindeutig dokumentiert werden.
Anzeigetafel
Vielen Dank an @Optimizer für die Erstellung des folgenden Code-Snippets. Klicken Sie zur Verwendung auf "Code-Snippet anzeigen", scrollen Sie nach unten und klicken Sie auf "► Code-Snippet ausführen".
"rrfrburb"? Wenn man Bits verschiebt oder umkehrt, macht man das auch für jeden einzelnen Buchstaben oder die Zeichenfolge als Ganzes? Weitere Testfälle würden es klarer machen.