У меня есть два рекурсивных, простые SCALA решения для Вас. Основная идея заключается в том, что путь не должен превышать половину раунда, который, случается, 3 в нашем случае, но может быть, конечно, параметризованная:
def fromAtoBClockwise (a: Int, b: Int) : Boolean = {
if (a > b) ! fromAtoBClockwise (b, a)
else b - a <= 3 }
расстояние не должно превышать 3, но, чтобы избежать вычитания 1 - 5, мы поворачиваем параметры и инвертируем результат, если a> b.
def fromAtoBClockwise (a: Int, b: Int) : Boolean = {
if (a > b) fromAtoBClockwise (a, b + 6)
else b - a <= 3 }
Альтернативный способ состоит в том, чтобы просто добавить 6, размер круга, в b, если он ниже.
Оба работают, но иногда отличаются результатом, если оба способа имеют одинаковую длину.
С параметром для размера и нечетного размера, вы получите тот же результат для обоих:
def fromAtoBClockwise (a: Int, b: Int, size: Int) : Boolean = {
if (a > b) ! fromAtoBClockwise (b, a, size)
else b - a <= size/2 }
def fromAtoBClockwise (a: Int, b: Int, size: Int) : Boolean = {
if (a > b) fromAtoBClockwise (a, b + size, size)
else b - a <= size/2 }
Test (выход конденсируется):
(1 to 5).map (a => (1 to 5).map (b => { if (a != b) println (a + " " + b + " " + fromAtoBClockwise (a, b, 5))}))
1 2 true 1 3 true 1 4 false 1 5 false
2 1 false 2 3 true 2 4 true 2 5 false
3 1 false 3 2 false 3 4 true 3 5 true
4 1 true 4 2 false 4 3 false 4 5 true
5 1 true 5 2 true 5 3 false 5 4 false
ли число всегда в порядке? Каков ваш «диапазон» видимости? – Nicholas
Да, цифры всегда в порядке, и вы «видите» (знаете) все числа. –
Выполните вычитание модуля (base n) и используйте порог n/2. – ElKamina