# Codewars

codewars kata: www.codewars.com/kata/zero-balanced-array/python

An array is called `zero-balanced` if its elements sum to `0` and for each positive element `n`, there exists another element that is the negative of `n`. Write a function named `ìsZeroBalanced` that returns `true` if its argument is `zero-balanced` array, else return `false`. Note that an `empty array` will not sum to `zero`.

## Tests

```Test.describe("Basic tests")
Test.assert_equals(is_zero_balanced([3]),False)
Test.assert_equals(is_zero_balanced([-3]),False)
Test.assert_equals(is_zero_balanced([0,0,0,0,0,0]),True)
Test.assert_equals(is_zero_balanced([0,1,-1]),True)
Test.assert_equals(is_zero_balanced([]),False)
Test.assert_equals(is_zero_balanced([3,-2,-1]),False)
Test.assert_equals(is_zero_balanced([0]),True)
Test.assert_equals(is_zero_balanced([1,1,-2]),False)
Test.assert_equals(is_zero_balanced([-1,1,-2,2,-2,-2,-4,4]),False)
Test.assert_equals(is_zero_balanced([0,0, 0,0,0]),True)```

# Best solution

```def is_zero_balanced2(arr):
return bool(arr) and sum(arr) == 0 and all(-x in arr for x in arr if x > 0)```

# My Solution

```def is_zero_balanced(arr):
return True if arr and sorted([x for x in arr if x>0]) == sorted(map(lambda x: x*-1, [x for x in arr if x<0])) and sum(arr)==0 else False```

# My Comment

Firstly I was thinking about that for every positive number you have to find equal negative. So for [5,-5,-5] you should check that there is exactly one opposite for positive number. Unfortunately I completely forgot about one thing – you do not have to check uniqueness if you calculate sum of whole array.

Also from competitive solutions I have learned a new thing – function All ( docs.python.org/2/library/functions.html#all )