Tôi đang nghiên cứu phần mềm cho một chiếc máy tự động cắt móng chân, để người dùng có thể chỉ cần đặt chân vào đó và chạy nó thay vì phải làm thủ công bằng cách cắn hoặc cắt móng tay.
Một tỷ lệ phần trăm đáng kể trong cơ sở người dùng tiềm năng của chúng tôi có thể sẽ là người Do Thái và hiển nhiên, có một truyền thống về việc không cắt tỉa móng chân ( hoặc móng tay ) theo thứ tự tuần tự
Có vẻ như có ý kiến bất đồng về việc áp dụng chính xác truyền thống này, nhưng chúng tôi nghĩ rằng các quy tắc sau đây là đủ để áp dụng những người có thực hành tôn giáo cấm cắt móng chân theo thứ tự:
- Không nên cắt hai móng chân liền nhau
- Trình tự cắt ở chân trái không được khớp với trình tự ở chân phải
- Trình tự cắt trên hai lần chạy liên tiếp không được giống nhau. Các trình tự không được dự đoán dễ dàng, vì vậy việc mã hóa cứng một trình tự xen kẽ không hoạt động.
Đây là cách chúng tôi quyết định đánh số ngón chân:
5 4 3 2 1 1 2 3 4 5
Left foot Right foot
Tôi đã viết mã để giải quyết vấn đề, nhưng thuật toán được sử dụng là tối ưu phụ: trên thực tế, hiệu suất trong trường hợp xấu nhất là O (∞) . Cách nó hoạt động có thể so sánh với bogosort . Đây là một đơn giản hóa mã giả của mã thực được sử dụng:
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)
Về cơ bản, nó tạo ra các chuỗi ngẫu nhiên và kiểm tra xem chúng có đáp ứng các tiêu chí hay không. Nếu nó không đáp ứng các tiêu chí, nó sẽ bắt đầu lại. Nó không mất nhiều thời gian một cách lố bịch, nhưng nó rất khó lường.
Tôi nhận ra rằng cách tôi đang làm hiện tại khá tệ, nhưng tôi đang gặp khó khăn khi tìm ra cách tốt hơn. Có ai trong số bạn có thể đề xuất một thuật toán hiệu quả và thanh lịch hơn không?