3
ย้อนกลับสตริงไบนารีครึ่งหนึ่ง
นี่คือคำถามที่ติดตามของฉันคำถาม Puzzling.SE : ผมถามว่ามีฟังก์ชั่นฉทำแผนที่สตริงบูลีนสตริงบูลีนเพื่อให้f (f (ข)) = ย้อนกลับ (ข)สำหรับการป้อนข้อมูลทุกสายข (โดยย้อนกลับฉันหมายถึงฟังก์ชั่นที่กลับคำสั่งของบิต) ลิงก์ด้านบนมีคำตอบที่เป็นบวกโดยมีข้อพิสูจน์โดยf ''ที่ยอดเยี่ยมแต่คุณอาจต้องการไตร่ตรองคำถามด้วยตัวคุณเองก่อนที่จะมอง ใช้ฟังก์ชันfในจำนวนน้อยที่สุดเท่าที่เป็นไปได้ คุณสามารถอ่านอินพุตจาก STDIN หรือรับฟังก์ชั่นอาร์กิวเมนต์ และเขียนสตริงผลลัพธ์ไปที่ STDOUT หรือส่งคืน ทั้งสองวิธีคุณอาจทำงานร่วมกับสายที่เกิดขึ้นจริงของทั้งสองไบต์ที่แตกต่างกันหรือตัวอักษรที่คุณเลือก (พูด0และ1หรือ\x00และ\x01) หรือกับอาร์เรย์ / รายการtruthy และ falsy ค่า เลือกค่าสองค่าแล้วใช้ค่าเหล่านั้น ผลลัพธ์ของแอปพลิเคชั่นเดียวของf ต้องเป็นสตริงไบนารีตัวเอง: ไม่มีคำตอบที่โง่เช่นb -> if b starts with 'x' then reverse(b[1:]) else 'x' + b... ฟังก์ชั่นของคุณควรจะรวม ; โดยเฉพาะอย่างยิ่งการป้อนข้อมูลอาจเป็นสตริงที่ว่างเปล่าหรือหนึ่งบิตยาว ฯลฯ ไม่มีขอบเขตบนสำหรับความยาวของสตริง มันควรจะบริสุทธิ์ : …