Điều này dựa trên xkcd # 153 .
Tạo một chương trình hoặc hàm được đặt tên có 2 tham số, mỗi tham số là một chuỗi hoặc một danh sách hoặc mảng byte hoặc ký tự. Tham số thứ hai sẽ chỉ chứa các ký tự được rút ra từ lrfu
(hoặc các byte ASCII tương đương). Nó nên được hiểu là một loạt các hướng dẫn được thực hiện trên một chuỗi bit được biểu thị bằng tham số đầu tiên.
Việc xử lý được thực hiện phải tương đương như sau:
- Chuyển đổi tham số đầu tiên thành một chuỗi bit đơn được hình thành bằng cách ghép các bit của mỗi ký tự (được hiểu là một trong ASCII 7 bit, ASCII mở rộng 8 bit hoặc mã hóa Unicode tiêu chuẩn). Ví dụ: nếu tham số đầu tiên là
"AB"
thì đây sẽ là một trong10000011000010
(7 bit),0100000101000010
(8 bit hoặc UTF-8)00000000010000010000000001000010
hoặc01000001000000000100001000000000
(UTF-16 trong hai endianness), v.v. - Đối với mỗi ký tự trong tham số thứ hai, theo thứ tự, thực hiện lệnh tương ứng:
l
xoay chuỗi bit trái một. Ví dụ10000011000010
trở thành00000110000101
.r
xoay chuỗi bit phải. Ví dụ10000011000010
trở thành01000001100001
.f
lật (hoặc đảo ngược) từng bit trong chuỗi bit. Ví dụ10000011000010
trở thành01111100111101
.u
đảo ngược chuỗi bit. Ví dụ10000011000010
trở thành01000011000001
.
- Chuyển đổi chuỗi bit thành chuỗi ASCII sử dụng một ký tự cho mỗi bit. Ví dụ
10000011000010
trở thành"10000011000010"
. Điều này là do không phải tất cả các bộ 7/8 bit có một ký tự được gán cho chúng.
Ví dụ (bằng Python):
>>> f("b", "rfu")
01110011
Nó biến "b"
thành biểu diễn nhị phân ASCII 8 bit của nó 01100010
, xoay nó phải ( 00110001
), lật từng bit ( 11001110
) và đảo ngược nó ( 01110011
).
Uyển chuyển
Nhân vật khác có thể được sử dụng thay cho các nhân vật l
, r
, f
, và u
, nhưng họ phải được ghi rõ ràng.
Bảng điểm
Cảm ơn @Optimizer đã tạo đoạn mã sau. Để sử dụng, nhấp vào "Hiển thị đoạn mã", cuộn xuống dưới cùng và nhấp vào "► Chạy đoạn mã".
"rrfrburb"
không? Ngoài ra, khi một người dịch chuyển hoặc đảo ngược các bit, liệu người ta có làm điều đó cho từng chữ cái riêng lẻ hay toàn bộ chuỗi không? Nhiều trường hợp thử nghiệm sẽ làm cho nó rõ ràng hơn.