นี้อยู่บนพื้นฐาน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 ที่เหลือหนึ่งอัน เช่นจะกลายเป็น1000001100001000000110000101rหมุนบิตสตริงขวาหนึ่ง เช่นจะกลายเป็น1000001100001001000001100001fพลิก (หรือสลับกลับ) แต่ละบิตใน bitstring เช่นจะกลายเป็น1000001100001001111100111101uฝืน bitstring เช่นจะกลายเป็น1000001100001001000011000001
- แปลง bitstring เป็นสตริง ASCII ซึ่งใช้หนึ่งอักขระต่อบิต เช่นจะกลายเป็น
10000011000010"10000011000010"นี่เป็นเพราะไม่ใช่ทุกชุด 7/8 บิตมีอักขระที่กำหนดให้
ตัวอย่าง (ใน Python):
>>> f("b", "rfu")
01110011
มันจะเปลี่ยน"b"เป็นตัวแทนไบนารี ASCII 8 บิตของ01100010มันหมุนไปทางขวา ( 00110001) พลิกแต่ละบิต ( 11001110) และกลับด้าน ( 01110011)
มีความยืดหยุ่น
ตัวละครอื่น ๆ อาจจะนำมาใช้แทนของตัวละครl, r, fและuแต่พวกเขาต้องได้รับการบันทึกไว้อย่างชัดเจน
ป้ายบอกคะแนน
ขอบคุณ@Optimizerสำหรับการสร้างข้อมูลโค้ดต่อไปนี้ วิธีใช้คลิก "แสดงตัวอย่างข้อมูล" เลื่อนไปที่ด้านล่างและคลิก "►เรียกใช้ข้อมูลโค้ด"
"rrfrburb"ไหม นอกจากนี้เมื่อหนึ่งกะหรือกลับบิตหนึ่งจะทำมันสำหรับตัวอักษรแต่ละตัวหรือสตริงโดยรวมหรือไม่ กรณีทดสอบเพิ่มเติมจะทำให้ชัดเจนยิ่งขึ้น