Intro
ลำดับการสลับถูกกำหนดดังนี้:
เริ่มต้นด้วยn
คนที่ยืนเป็นวงกลม ( 6
สำหรับตัวอย่างนี้)
1 2
6 3
5 4
เริ่มต้นจากบุคคล1
บุคคลที่อยู่ทางด้านซ้ายของบุคคล "ที่เลือก" จะถูกลบออก
1
6 3
5 4
บุคคลที่ถูกลบสามารถ "เปลี่ยน" วิธีการกำจัดได้:
- หากบุคคลที่ถูกลบออกเป็นเลขคู่ (ซึ่งเป็นในกรณีนี้) บุคคลที่ถูกลบออกคนถัดไปจะอยู่ทางขวาของบุคคล "ที่ถูกเลือก" ถัดไป
- หากบุคคลที่ถูกลบออกเป็นเลขคี่บุคคลที่ถูกลบออกคนถัดไปจะอยู่ทางซ้ายของบุคคล "ที่เลือก" ถัดไป
บุคคลที่ถูกเลือกถัดไปจะขึ้นอยู่กับบุคคลที่ถูกลบไปก่อนหน้านี้ด้วย
- หากบุคคลที่ถูกลบออกเป็นเลขคู่บุคคลที่ถูกเลือกถัดไปจะอยู่ทางขวาของบุคคลที่เลือกก่อนหน้า
- หากบุคคลที่ถูกลบออกเป็นเลขคี่ให้ดูด้านบน แต่แทนที่ "ขวา" ด้วย "ซ้าย"
6
ดังนั้นบุคคลที่ได้รับการแต่งตั้งต่อไปคือแล้ว
ตอนนี้เราลบบุคคลไปทางขวาของ6
ซึ่งก็คือ5
:
1
6 3
4
เพราะ5
แปลกแล้วบุคคลที่ถูกลบจะอยู่ทางซ้าย 1
บุคคลที่ได้รับการแต่งตั้งใหม่คือ
ตอนนี้เราลบ3
:
1
6
4
เรายังคงกระบวนการนี้จนกว่าเราจะเหลือ 1 หมายเลข - 1
ในตัวอย่างนี้จำนวนสุดท้ายคือ S(6) = 1
ดังนั้นจึง
ตัวเลขสองสามตัวแรกคือ:
n | S(n)
---------
1 | 1
2 | 1
3 | 3
4 | 1
5 | 5
6 | 1
7 | 3
8 | 6
9 | 5
10 | 6
11 | 9
งาน
งานของคุณคือการสร้างโปรแกรม (หรือฟังก์ชั่น) ที่ส่งคืนS(n)
( n
หมายเลข th ในลำดับการสลับ) เมื่อได้รับn
โดยใช้จำนวนไบต์น้อยที่สุด
ตัวอย่างอินพุตและเอาต์พุต:
1 -> 1
10 -> 6
13 -> 13
คุณรับประกันว่าจะได้รับจำนวนเต็มบวก
นี่คือรหัส - กอล์ฟดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ!
หมายเหตุ: ไม่มีลำดับ OEIS (อะไร?) เพื่อช่วยคุณในการค้นหาปัญหา
2
ไม่เคยอยู่ แต่จะทำ7
อย่างไร