मैं एक मशीन के लिए सॉफ्टवेयर पर काम कर रहा हूं जो स्वचालित रूप से toenails ट्रिम कर देगा, ताकि उपयोगकर्ता बस अपने पैरों को इसमें डाल सकें और इसे मैन्युअल रूप से करने के बजाय उन्हें काटने या नाखून कतरनी का उपयोग करने के बजाय चला सकते हैं।
हमारे संभावित उपयोगकर्ता आधार का एक बड़ा प्रतिशत यहूदी होने की संभावना है, और, जाहिर है, क्रमिक क्रम में टोकन ( या नाखूनों ) को ट्रिम न करने के बारे में एक परंपरा है।
इस परंपरा के सटीक अनुप्रयोग पर विवादास्पद राय दी जा रही है, लेकिन हमें लगता है कि निम्नलिखित नियम ऐसे लोगों को शामिल करने के लिए पर्याप्त हैं, जिनकी धार्मिक प्रथाओं में क्रम में टोनेल काटने पर प्रतिबंध है:
- किसी भी दो निकटवर्ती toenails को लगातार नहीं काटा जाना चाहिए
- बाएं पैर पर काटने का क्रम दाहिने पैर पर अनुक्रम से मेल नहीं खाना चाहिए
- लगातार दो रनों पर काटने का क्रम समान नहीं होना चाहिए। दृश्यों को आसानी से अनुमानित नहीं किया जाना चाहिए, इसलिए एक वैकल्पिक अनुक्रम को हार्डकोड करना काम नहीं करता है।
इस तरह हमने पैर की उंगलियों को नंबर देने का फैसला किया है:
5 4 3 2 1 1 2 3 4 5
Left foot Right foot
मैंने समस्या को हल करने के लिए कोड लिखा है, लेकिन उपयोग किया गया एल्गोरिथ्म उप-इष्टतम है: वास्तव में, सबसे खराब स्थिति प्रदर्शन ओ (∞) है । जिस तरह से यह काम करता है वह बोगोसॉर्ट के बराबर है । यहाँ उपयोग किए गए वास्तविक कोड का छद्म कोड सरल है:
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)
मूल रूप से, यह यादृच्छिक अनुक्रम उत्पन्न करता है और जांचता है कि क्या वे मानदंडों को पूरा करते हैं। यदि यह मानदंडों को पूरा नहीं करता है, तो यह खत्म हो जाता है। यह हास्यास्पद रूप से लंबे समय तक नहीं लेता है, लेकिन यह बहुत अप्रत्याशित है।
मुझे एहसास है कि जिस तरह से मैं वर्तमान में कर रहा हूं वह बहुत भयानक है, लेकिन मुझे बेहतर तरीके से आने में परेशानी हो रही है। क्या आप में से कोई भी अधिक सुरुचिपूर्ण और प्रदर्शनकारी एल्गोरिथम सुझा सकता है?