คุณควรคุ้นเคยกับลำดับ Conway (หรือที่รู้จักกันว่า 'look-and-say'-sequence)โดยตอนนี้:
1
11
21
1211
111221
312211
etc
นอกจากนี้คุณยังสามารถเริ่มต้นด้วยหมายเลขโดยพลการใด ๆ เป็นจุดเริ่มต้น อนุญาตf(s)เป็นองค์ประกอบถัดไปของลำดับ ตอนนี้สำหรับทุกคนให้สิทธิ์แก่เราสามารถหาs f(s)กลับไม่เป็นที่น่ารำคาญ: มันไม่ได้สำหรับทุกคนyที่เป็นไปได้ที่จะหาบรรพบุรุษดังกล่าวว่าs f(s) = yเช่นสำหรับy = 1เราไม่สามารถหาบรรพบุรุษ แต่ถ้าyมีแม้แต่ความยาวคุณสามารถแบ่งออกเป็นคู่ของตัวเลขซึ่งอธิบายแต่ละส่วนหนึ่งของบรรพบุรุษ:
513211 divides in 51,32,11
so: 51 comes from 11111
32 comes from 222
11 comes from 1
put together: 111112221
ด้วยวิธีนี้เราสามารถกำหนดบรรพบุรุษที่ไม่ซ้ำกันสำหรับทุกyความยาว
หมายเหตุ : ใน 'รุ่นก่อน' กำหนดวิธีนี้ไม่ทั่วไปไม่ตอบสนองsf(s) = y
เป้าหมาย
เขียนตัวอย่างข้อมูลของฟังก์ชัน / โปรแกรมที่ยอมรับสตริงตัวเลขเป็นอินพุต
- คำนวณองค์ประกอบถัดไปของลำดับ Conway หากความยาวของสตริงป้อนเข้าเป็นเลขคี่
- คำนวณบรรพบุรุษของสายป้อนตามที่ระบุไว้ข้างต้นหากความยาวสายป้อนเป็นแม้กระทั่ง
รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ
คำถามล่าสุดขึ้นอยู่กับลำดับการมองและพูด:
11111111111111จะเป็นอย่างไร 1111111ตามสเป็คของคุณก็จะเป็น คุณควรแก้ไขสเปคของคุณเพื่อกำหนดคำตอบที่สมเหตุสมผลสำหรับเรื่องนี้
11111111111111นั้นไม่มีรุ่นก่อน มันเป็นข้อมูลที่ผิดกฎหมาย
513111แบ่งออกเป็น51,32และ11?