## The challenge#

Create a function `close_compare` that accepts 3 parameters: `a``b`, and an optional `margin`. The function should return whether `a` is lower than, close to, or higher than `b``a` is “close to” `b` if `margin` is higher than or equal to the difference between `a` and `b`.

When `a` is lower than `b`, return `-1`.

When `a` is higher than `b`, return `1`.

When `a` is close to `b`, return ``.

If `margin` is not given, treat it as zero.

Example: if `a = 3``b = 5` and the `margin = 3`, since `a` and `b` are no more than 3 apart, `close_compare` should return ``. Otherwise, if instead `margin = 0``a` is lower than `b` and `close_compare` should return `-1`.

Assume: `margin >= 0`

## Test cases#

``````test.it("No margin")
test.assert_equals(close_compare(4, 5), -1)
test.assert_equals(close_compare(5, 5), 0)
test.assert_equals(close_compare(6, 5), 1)

test.it("With margin of 3")
test.assert_equals(close_compare(2, 5, 3), 0)
test.assert_equals(close_compare(5, 5, 3), 0)
test.assert_equals(close_compare(8, 5, 3), 0)
test.assert_equals(close_compare(8.1, 5, 3), 1)
test.assert_equals(close_compare(1.99, 5, 3), -1)
``````

## The solution in Python#

Option 1:

``````def close_compare(a, b, margin = 0):
return 0 if abs(a - b) <= margin else -1 if b > a else 1
``````

Option 2:

``````def close_compare(a, b, margin=0):
if a == b or abs(a - b) <= margin:
return 0
if a < b:
return -1
if a > b:
return 1
``````

Option 3 (using `numpy`):

``````from numpy import sign

def close_compare(a, b, margin=0):
return abs(a-b) > margin and sign(a-b)
``````