Lấy cảm hứng từ truyện tranh XKCD sau đây:
Trong "Work It" của Missy Elliot, một phần của đoạn điệp khúc như sau:
Is it worth it, let me work it
I put my thing down, flip it and reverse it
Nắm bắt được điều đó, tôi đề xuất thử thách chơi gôn mã sau đây:
Tạo mã theo thứ tự:
- Lấy đầu vào ASCII 8 bit từ STDIN; ví dụ:
n
(Hex 6E hoặc Bin 01101110) - Chuyển 8 bit của mỗi byte xuống mức 1 bit (tôi tin rằng nó được gọi là dịch chuyển bitwise xuống), ví dụ như
01101110
trở thành00110111
("đặt điều của tôi xuống"); - Đảo ngược từng bit của từng byte, ví dụ
00110111
trở thành11001000
("lật nó"); - Đảo ngược các bit cho mỗi byte, ví dụ
11001000
trở thành00010011
("đảo ngược nó"); - Nếu giá trị của byte nhỏ hơn 32, thì thực hiện
(95 + [byte value])
hoặc nói cách khác(126-(31-[byte value]))
, trên byte trước khi chuyển đổi trở lại ASCII ... Nếu giá trị byte vẫn nhỏ hơn 32, lặp lại bước 5 - Nếu giá trị của byte lớn hơn 126, thì thực hiện
([byte value] - 95)
hoặc nói cách khác(32+([byte value]-127))
, trên byte trước khi chuyển đổi trở lại ASCII ... NẾU giá trị vẫn lớn hơn 126, lặp lại bước 6. - Hiển thị chuỗi mới được chuyển đổi dưới dạng ASCII.
Một ví dụ về mã này đang hoạt động:
(Đầu vào, nó có đáng không?)
workit missy
("missy" là đầu vào, "workit" là hàm)
Bây giờ đằng sau hậu trường ...
(hãy để tôi làm việc đó ... thành nhị phân)
01101101 01101001 01110011 01110011 01111001
(Đặt điều của tôi xuống ... Bitwise)
00110110 00110100 00111001 00111001 00111100
(...Lật nó...)
11001001 11001011 11000110 11000110 11000011
(... Và đảo ngược nó!)
10010011 11010011 01100011 01100011 11000011
(Chuyển đổi trở lại thập phân)
147 211 99 99 195
(Thực hiện các phép toán cần thiết)
147-95 211-95 99 99 195-95 => 52 116 99 99 100
(Chuyển đổi trở lại ASCII và hiển thị, đầu ra)
4tccd
Quy tắc
- Mã ngắn nhất sẽ thắng ... đơn giản như vậy ...
- Đầu vào có thể thông qua chức năng, bằng lời nhắc hoặc bất cứ điều gì phù hợp với bạn, miễn là bạn có thể làm cho Quy tắc 1 "hoạt động" cho bạn ...;)
- Tôi không phải là người có khả năng đảo ngược, miễn là bạn có thể làm cho mã làm những gì tôi đã yêu cầu, tôi sẽ rất vui ...
May mắn nhất!
0 1 1 0 1 1 0 1
và 0 1 1 0 1 0 0 1
chomi
P
biến thành giá trị byte 235
và trừ đi 95
cho bạn 140
. Vẫn không thể in được. Hay tôi hiểu lầm?