如何找出数字X是否在数字Y的范围内? (但以循环的方式)
How to find out if number X is in range of number Y? (But in a circular way)
假设我有一系列数字 0-9。
我想知道数字 X 是否在数字 Y 的范围内,范围是 2.
因此,例如 Y=5,如果 X 是 3、4、5、6 或 7,则 X 在范围内。
--Y--
0123456789
为此我可以做到:
isInRange = abs(X - Y) <= 2
但我在某种程度上需要它,范围是圆形的,再次从 0 开始:
--Y-- - --Y- -- --Y Y-- -- -Y-- - --Y--
0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
有人知道如何解决这个问题吗?
这在 javascript 中,但应该在任何语言中完成一些更改。看,我正在对每个数字取模,使它们在 [0, 9]
范围内
const isInRange = (x, y, range) => {
const
absDiff = Math.abs(x % 10 - y % 10),
modRange = range % 10;
return absDiff <= modRange || 10 - absDiff <= modRange;
}
console.log(isInRange(0, 9, 2))
console.log(isInRange(1, 9, 2))
console.log(isInRange(4, 7, 2))
console.log(isInRange(9, 7, 2))
console.log(isInRange(19, 7, 2))
console.log(isInRange(9, 7, 9))
假设我有一系列数字 0-9。 我想知道数字 X 是否在数字 Y 的范围内,范围是 2.
因此,例如 Y=5,如果 X 是 3、4、5、6 或 7,则 X 在范围内。
--Y--
0123456789
为此我可以做到:
isInRange = abs(X - Y) <= 2
但我在某种程度上需要它,范围是圆形的,再次从 0 开始:
--Y-- - --Y- -- --Y Y-- -- -Y-- - --Y--
0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
有人知道如何解决这个问题吗?
这在 javascript 中,但应该在任何语言中完成一些更改。看,我正在对每个数字取模,使它们在 [0, 9]
const isInRange = (x, y, range) => {
const
absDiff = Math.abs(x % 10 - y % 10),
modRange = range % 10;
return absDiff <= modRange || 10 - absDiff <= modRange;
}
console.log(isInRange(0, 9, 2))
console.log(isInRange(1, 9, 2))
console.log(isInRange(4, 7, 2))
console.log(isInRange(9, 7, 2))
console.log(isInRange(19, 7, 2))
console.log(isInRange(9, 7, 9))