แรงบันดาลใจจากการ์ตูน XKCD ต่อไปนี้:
ใน Missy Elliot's "ทำงานมัน" ส่วนหนึ่งของคอรัสจะเป็นดังนี้:
Is it worth it, let me work it
I put my thing down, flip it and reverse it
จำไว้ว่าในใจฉันขอเสนอการแข่งขันกอล์ฟรหัสต่อไปนี้:
สร้างรหัสตามลำดับ:
- รับอินพุต ASCII 8 บิตจาก STDIN เช่น
n
(Hex 6E หรือ Bin 01101110) - เลื่อน 8 บิตของแต่ละไบต์ลงไปในระดับ 1 บิต (ฉันเชื่อว่ามันเรียกว่าการเลื่อนบิตล่าง) เช่น
01101110
จะกลายเป็น00110111
("วางสิ่งที่ฉันลง"); - แปลงบิตของแต่ละไบต์เช่น
00110111
กลายเป็น11001000
("พลิก"); - ฝืนบิตสำหรับแต่ละไบต์เช่น
11001000
กลายเป็น00010011
("ย้อนกลับ"); - หากค่าของไบต์น้อยกว่า 32 ให้ดำเนินการ
(95 + [byte value])
หรือกล่าวอีกนัยหนึ่ง(126-(31-[byte value]))
เป็นไบต์ก่อนที่จะแปลงกลับเป็น ASCII ... หากค่าไบต์ยังคงน้อยกว่า 32 ให้ทำซ้ำขั้นตอนที่ 5 - หากค่าของไบต์มีค่ามากกว่า 126 ให้ดำเนินการ
([byte value] - 95)
หรือกล่าวอีกนัยหนึ่ง(32+([byte value]-127))
เป็นไบต์ก่อนที่จะแปลงกลับเป็น ASCII ... หากค่ายังคงมากกว่า 126 ให้ทำซ้ำขั้นตอนที่ 6 - แสดงสตริงที่แปลงใหม่เป็น ASCII
ตัวอย่างของการใช้งานโค้ดนี้:
(อินพุตมันคุ้มค่าหรือไม่)
workit missy
("missy" เป็นอินพุต "workit" เป็นฟังก์ชัน)
ตอนนี้อยู่เบื้องหลัง ...
(ให้ฉันทำงาน ... เป็นไบนารี)
01101101 01101001 01110011 01110011 01111001
(วางของฉันลง ... Bitwise)
00110110 00110100 00111001 00111001 00111100
(...กลับมัน...)
11001001 11001011 11000110 11000110 11000011
(... และย้อนกลับ!)
10010011 11010011 01100011 01100011 11000011
(แปลงกลับเป็นทศนิยม)
147 211 99 99 195
(ดำเนินการทางคณิตศาสตร์ที่จำเป็น)
147-95 211-95 99 99 195-95 => 52 116 99 99 100
(แปลงกลับเป็น ASCII และจอแสดงผลเอาต์พุต)
4tccd
กฎระเบียบ
- รหัสที่สั้นที่สุดชนะ ... ง่ายเหมือนที่ ...
- อินพุตสามารถทำได้ผ่านฟังก์ชั่นโดยทันทีหรืออะไรก็ตามที่เหมาะกับคุณตราบใดที่คุณสามารถทำให้กฎ 1 "ทำงานได้" สำหรับคุณ ... ;)
- ฉันไม่ได้กลับตัวได้ตราบใดที่คุณสามารถทำให้โค้ดทำสิ่งที่ฉันขอให้ทำฉันจะมีความสุข ...
ขอให้โชคดี!
0 1 1 0 1 1 0 1
และ0 1 1 0 1 0 0 1
สำหรับmi
P
กลายเป็นค่าไบต์235
และลบใบคุณมี95
140
ยังไม่สามารถพิมพ์ได้ หรือฉันเข้าใจผิด?