นี่คือคำถามที่ติดตามของฉันคำถาม 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...ฟังก์ชั่นของคุณควรจะรวม ; โดยเฉพาะอย่างยิ่งการป้อนข้อมูลอาจเป็นสตริงที่ว่างเปล่าหรือหนึ่งบิตยาว ฯลฯ ไม่มีขอบเขตบนสำหรับความยาวของสตริง
มันควรจะบริสุทธิ์ : อย่ารักษาสถานะโกลบอลระหว่างการเรียกฟังก์ชัน สตริงอินพุตต้องพิจารณาสตริงเอาต์พุตอย่างสมบูรณ์