用于确定值是否在多个范围内的算法

时间:2013-11-22 18:57:13

标签: python algorithm

算法问题:

假设我想确定一个值是否在十位数的范围内(例如2) - 所以,8-12,18-22,28-32等。

我目前的解决方案是将范围添加到值,mod乘以10,然后重新减去范围 - 从而留下-2到8的东西 - 然后检查绝对值是否小于期望的范围。

value = 38
range = 2
cycle = 10

tweaked_mod = ((value + range) % cycle) - range
# tweaked_mod = -2
within_range = (abs(tweaked_mod) <= range)
# within_range = True

value = 37
range = 2
cycle = 10

tweaked_mod = ((value + range) % cycle) - range
# tweaked_mod = 7
within_range = (abs(tweaked_mod) <= range)
# within_range = False

它有效,但很尴尬。

我在这里错过了一个更直观/简洁的算法吗?

1 个答案:

答案 0 :(得分:7)

我发现这个解决方案更容易理解:

remainder = (value % cycle)
(remainder <= range) || (cycle - remainder) <= range

基本上我找到value的剩余部分来搜索模数(cycle),然后检查它是否在预期的范围内。

<强>替代:

另一种解决方案(基本相同)将是:

remainder = (value % cycle)
min(remainder, cycle - remainder) <= range

您可以自由选择您最喜欢的两种解决方案。

注意如果range&lt; cycle。在其他情况下,答案总是正确的。