ฉันกำลังทำงานกับซอฟต์แวร์สำหรับเครื่องที่จะตัดเล็บเท้าโดยอัตโนมัติเพื่อให้ผู้ใช้สามารถสอดเท้าเข้าไปแล้ววิ่งได้แทนที่จะต้องทำด้วยตนเองโดยการกัดหรือใช้กรรไกรตัดเล็บ
ฐานผู้ใช้ที่มีศักยภาพของเราจำนวนมากน่าจะเป็นชาวยิวและเห็นได้ชัดว่ามีประเพณีเกี่ยวกับการไม่ตัดเล็บเท้า ( หรือเล็บมือ ) ตามลำดับ
ดูเหมือนจะมีความเห็นที่ไม่เห็นด้วยกับการนำประเพณีนี้ไปใช้อย่างถูกต้อง แต่เราคิดว่ากฎต่อไปนี้เพียงพอที่จะรองรับผู้ที่ปฏิบัติทางศาสนาห้ามไม่ให้ตัดเล็บเท้าตามลำดับ:
- ไม่ควรตัดเล็บเท้า 2 ข้างติดกัน
- ลำดับการตัดที่เท้าซ้ายไม่ควรตรงกับลำดับที่เท้าขวา
- ลำดับการตัดของการวิ่งสองครั้งติดต่อกันไม่ควรเหมือนกัน ลำดับไม่ควรคาดเดาได้ง่ายดังนั้นการเข้ารหัสลำดับแบบสลับจึงไม่ทำงาน
นี่คือวิธีที่เราตัดสินใจที่จะนับนิ้วเท้า:
5 4 3 2 1 1 2 3 4 5
Left foot Right foot
ฉันได้เขียนรหัสในการแก้ปัญหา แต่อัลกอริทึมที่ใช้ย่อยที่ดีที่สุด: ในความเป็นจริงการปฏิบัติงานในกรณีที่เลวร้ายที่สุดคือO (∞) วิธีการทำงานก็เปรียบได้กับbogosort นี่คือการลดความซับซ้อนของรหัสเทียมของรหัสจริงที่ใช้:
function GenerateRandomSequence
sequence = Array[5]
foreach (item in sequence)
item = RandomNumberBetween(1,5)
return sequence
function GetToenailCuttingOrder
while (true)
sequence = GenerateRandomSequence()
if (!AllItemsAreUnique(sequence))
continue
if (NoTwoAdjacentItemsHaveConsecutiveNumbers(sequence))
return sequence
do
leftFootSequence = GetToenailCuttingOrder()
rightFootSequence = GetToenailCuttingOrder()
until (leftFootSequence != rightFootSequence &&
leftFootSequence != leftFootSequenceFromLastRun &&
rightFootSequence != rightFootSequenceFromLastRun)
โดยทั่วไปจะสร้างลำดับแบบสุ่มและตรวจสอบว่าตรงตามเกณฑ์หรือไม่ หากไม่เป็นไปตามเกณฑ์ก็เริ่มต้นใหม่ ใช้เวลาไม่นานอย่างน่าขัน แต่ก็ไม่สามารถคาดเดาได้
ฉันรู้ว่าวิธีที่ฉันทำอยู่ตอนนี้มันค่อนข้างแย่ แต่ฉันมีปัญหาในการหาวิธีที่ดีกว่านี้ มีใครช่วยแนะนำอัลกอริทึมที่สวยงามและมีประสิทธิภาพมากขึ้นได้ไหม