Ini didasarkan pada xkcd # 153 .
Buat program atau fungsi bernama yang mengambil 2 parameter, masing-masing adalah string atau daftar atau array byte atau karakter. Parameter kedua hanya akan berisi karakter yang diambil dari lrfu
(atau byte ASCII yang setara). Ini harus ditafsirkan sebagai serangkaian instruksi yang harus dilakukan pada urutan bit yang diwakili oleh parameter pertama.
Pemrosesan yang dilakukan harus setara dengan yang berikut:
- Konversikan parameter pertama menjadi bitstring tunggal yang dibentuk dengan menggabungkan bit dari masing-masing karakter (ditafsirkan sebagai salah satu dari ASCII 7-bit, ASCII yang diperluas 8-bit, atau pengkodean Unicode standar). Misalnya jika parameter pertama adalah
"AB"
maka ini akan menjadi salah satu10000011000010
(7-bit),0100000101000010
(8-bit atau UTF-8)00000000010000010000000001000010
,, atau01000001000000000100001000000000
(UTF-16 dalam dua endiannesses), dll. - Untuk setiap karakter di parameter kedua, secara berurutan, jalankan instruksi yang sesuai:
l
memutar bitstring ke kiri. Misalnya10000011000010
menjadi00000110000101
.r
memutar bitstring ke kanan. Misalnya10000011000010
menjadi01000001100001
.f
membalik (atau membalikkan) setiap bit dalam bitstring. Misalnya10000011000010
menjadi01111100111101
.u
membalikkan bitstring. Misalnya10000011000010
menjadi01000011000001
.
- Konversi bitstring menjadi string ASCII yang menggunakan satu karakter per bit. Misalnya
10000011000010
menjadi"10000011000010"
. Ini karena tidak semua set 7/8 bit memiliki karakter yang ditugaskan padanya.
Contoh (dalam Python):
>>> f("b", "rfu")
01110011
Ia berubah "b"
menjadi representasi biner ASCII 8-bit 01100010
, memutarnya dengan benar ( 00110001
), membalik setiap bit ( 11001110
), dan membalikkannya ( 01110011
).
Fleksibilitas
Karakter lain dapat digunakan sebagai pengganti karakter l
, r
, f
, dan u
, tetapi mereka harus jelas didokumentasikan.
Papan angka
Terima kasih kepada @Optimizer untuk membuat cuplikan kode berikut. Untuk menggunakan, klik "Tampilkan cuplikan kode", gulir ke bawah dan klik "► Jalankan cuplikan kode".
"rrfrburb"
? Juga, ketika seseorang menggeser atau membalikkan bit, apakah ia melakukannya untuk setiap huruf individual, atau string secara keseluruhan? Lebih banyak kasus uji akan membuatnya lebih jelas.