2
ช่วยฉันจัดเรียงถุงเท้าของฉัน!
ฉันมีถุงเท้าสะอาดที่ฉันต้องการจัดเรียงเป็นคู่ น่าเสียดายที่ฉันสามารถรับถุงเท้าจากปลายด้านใดด้านหนึ่งเท่านั้นไม่ใช่ตรงกลาง ยิ่งกว่านั้นฉันสามารถถอดถุงเท้าออกจากกองคู่ที่ตรงกันในแต่ละครั้งเท่านั้น กลยุทธ์ของฉันคือการแบ่งกองเป็นกองเล็ก ๆ หนึ่งกองหรือมากกว่า ฉันคิดว่าตัวอย่างบางอย่างจะทำให้เรื่องนี้ชัดเจน ฉันจะแทนถุงเท้าแต่ละตัวเป็นจำนวนเต็มบวก (จำนวนเต็มที่ตรงกันบ่งชี้ว่าเท่ากับถุงเท้า) หากกองถุงเท้าเริ่มต้นคือ 1 2 3 3 2 1 ถ้าอย่างนั้นฉันก็ไม่ต้องแยกอะไร ฉันสามารถนำ1ถุงเท้าทั้งสองออกจากนั้น2ถุงเท้าทั้งสองจากนั้น3ถุงเท้าทั้งสอง ถ้าแทนกองเริ่มต้นก็คือ 1 2 3 2 3 1 ถ้าอย่างนั้นฉันก็ต้องแยกมันก่อนเพราะฉันจะไม่สามารถจับคู่ถุงเท้าทั้งหมดได้โดยแค่เอามันออกจากท้าย ความเป็นไปได้อย่างหนึ่งคือแยกมันออกเป็นสองกอง 1 2 3 and 2 3 1 ตอนนี้ฉันสามารถถอด1ถุงเท้าออก2 3 and 2 3แล้วตามด้วย3ถุงเท้าออก2 and 2และสุดท้ายก็เป็น2ถุงเท้า งานของคุณ ให้กองถุงเท้าเริ่มต้นเขียนโปรแกรมที่จะแยกเป็นกองเล็ก ๆ ที่จะช่วยให้ฉันเรียงถุงเท้า โปรแกรมของคุณควรแบ่งเสาเข็มให้มีจำนวนน้อยที่สุดเท่าที่จะเป็นไปได้ (ถ้ามีวิธีแก้ปัญหาที่ดีที่สุดหลายวิธี การป้อนข้อมูลจะได้รับเป็นรายการสตริงคั่นหรือรูปแบบที่สะดวกอื่น ๆ มันจะมีจำนวนเต็มเฉพาะระหว่าง1และบางค่าสูงสุดnโดยแต่ละจำนวนเต็มเกิดขึ้นสองครั้ง …
30
code-golf