นี้อยู่บนพื้นฐานxkcd #
สร้างโปรแกรมหรือฟังก์ชั่นที่ตั้งชื่อซึ่งใช้พารามิเตอร์ 2 ตัวซึ่งแต่ละตัวเป็นสตริงหรือรายการหรืออาร์เรย์ของไบต์หรือตัวอักษร พารามิเตอร์ที่สองจะมีเฉพาะอักขระที่ดึงมาจากlrfu
(หรือ ASCII ที่เทียบเท่าไบต์) ควรตีความเป็นชุดคำสั่งที่จะดำเนินการในลำดับบิตที่แสดงโดยพารามิเตอร์แรก
การประมวลผลที่ดำเนินการจะต้องเทียบเท่ากับสิ่งต่อไปนี้:
- แปลงพารามิเตอร์แรกเป็นบิตสตริงเดียวที่เกิดขึ้นจากการเชื่อมบิตของอักขระแต่ละตัว (ตีความว่าเป็นหนึ่งใน 7 บิต ASCII, ASCII ที่ขยายเพิ่ม 8 บิตหรือการเข้ารหัส Unicode มาตรฐาน) เช่นถ้าพารามิเตอร์แรกเป็น
"AB"
เช่นนี้จะเป็นหนึ่งใน10000011000010
(7-bit),0100000101000010
(8-bit หรือ UTF-8)00000000010000010000000001000010
, หรือ01000001000000000100001000000000
(UTF-16 ในสอง endiannesses) เป็นต้น - สำหรับอักขระแต่ละตัวในพารามิเตอร์ที่สองตามลำดับให้ดำเนินการคำสั่งที่สอดคล้องกัน:
l
หมุน bitstring ที่เหลือหนึ่งอัน เช่นจะกลายเป็น10000011000010
00000110000101
r
หมุนบิตสตริงขวาหนึ่ง เช่นจะกลายเป็น10000011000010
01000001100001
f
พลิก (หรือสลับกลับ) แต่ละบิตใน bitstring เช่นจะกลายเป็น10000011000010
01111100111101
u
ฝืน bitstring เช่นจะกลายเป็น10000011000010
01000011000001
- แปลง bitstring เป็นสตริง ASCII ซึ่งใช้หนึ่งอักขระต่อบิต เช่นจะกลายเป็น
10000011000010
"10000011000010"
นี่เป็นเพราะไม่ใช่ทุกชุด 7/8 บิตมีอักขระที่กำหนดให้
ตัวอย่าง (ใน Python):
>>> f("b", "rfu")
01110011
มันจะเปลี่ยน"b"
เป็นตัวแทนไบนารี ASCII 8 บิตของ01100010
มันหมุนไปทางขวา ( 00110001
) พลิกแต่ละบิต ( 11001110
) และกลับด้าน ( 01110011
)
มีความยืดหยุ่น
ตัวละครอื่น ๆ อาจจะนำมาใช้แทนของตัวละครl
, r
, f
และu
แต่พวกเขาต้องได้รับการบันทึกไว้อย่างชัดเจน
ป้ายบอกคะแนน
ขอบคุณ@Optimizerสำหรับการสร้างข้อมูลโค้ดต่อไปนี้ วิธีใช้คลิก "แสดงตัวอย่างข้อมูล" เลื่อนไปที่ด้านล่างและคลิก "►เรียกใช้ข้อมูลโค้ด"
"rrfrburb"
ไหม นอกจากนี้เมื่อหนึ่งกะหรือกลับบิตหนึ่งจะทำมันสำหรับตัวอักษรแต่ละตัวหรือสตริงโดยรวมหรือไม่ กรณีทดสอบเพิ่มเติมจะทำให้ชัดเจนยิ่งขึ้น