Ayak tırnaklarını otomatik olarak kesecek bir makine için yazılım üzerinde çalışıyorum, böylece kullanıcılar ayaklarını ısırarak veya tırnak makası kullanarak manuel olarak yapmak zorunda kalmadan kolayca ayaklarını koyabilir ve çalıştırabilir.
Potansiyel kullanıcı tabanımızın önemli bir yüzdesi muhtemelen Yahudi olacak ve belli ki ayak tırnaklarını ( veya tırnakları ) sırayla kesmeme geleneği var.
Bu geleneğin tam olarak uygulanması konusunda muhalif görüşler var gibi görünüyor, ancak aşağıdaki kuralların, dini uygulamaları sırayla ayak tırnaklarını kesmeyi yasaklayan insanları yerleştirmek için yeterli olduğunu düşünüyoruz:
- Hiçbir bitişik ayak tırnağı arka arkaya kesilmemelidir
- Sol ayaktaki kesme sırası, sağ ayaktaki sırayla eşleşmemelidir
- Birbirini izleyen iki çalışmada kesme sırası aynı olmamalıdır. Sıralar kolayca tahmin edilebilir olmamalıdır, bu nedenle alternatif bir sırayı kodlamak işe yaramaz.
Ayak parmaklarını numaralandırmaya böyle karar verdik:
5 4 3 2 1 1 2 3 4 5
Left foot Right foot
Sorunu çözmek için kod yazdım, ancak kullanılan algoritma optimalin altında: Aslında, en kötü durum performansı O (∞) . Çalışma şekli bogosort ile karşılaştırılabilir . İşte kullanılan gerçek kodun sözde kod basitleştirmesi:
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)
Temel olarak, rastgele diziler oluşturur ve kriterleri karşılayıp karşılamadıklarını kontrol eder. Kriterleri karşılamıyorsa, baştan başlar. Gülünç derecede uzun bir zaman almaz, ancak çok öngörülemez.
Şu anda yaptığım yöntemin oldukça kötü olduğunun farkındayım, ancak daha iyi bir yol bulmakta zorlanıyorum. Herhangi biriniz daha zarif ve daha performanslı bir algoritma önerebilir mi?