Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
in O(n) determine the balanced position with zero trials! solution in Clear category for Can Balance by piter239
from typing import Iterable
from itertools import count
from operator import mul
def can_balance(weights: Iterable) -> int:
torque = sum(map(mul, weights, count())) # compute initial torque at pos 0
s = sum(weights) # each step to the right subtracts exacly the sum
# if torque divisible by sum - balance can be found!
return torque // s if torque % s == 0 else -1
if __name__ == '__main__':
print("Example:")
print(can_balance([6, 1, 10]))
print(can_balance([6, 1, 10, 5, 4]))
# These "asserts" are used for self-checking and not for an auto-testing
assert can_balance([6, 1, 10, 5, 4]) == 2
assert can_balance([10, 3, 3, 2, 1]) == 1
assert can_balance([7, 3, 4, 2, 9, 7, 4]) == -1
assert can_balance([42]) == 0
print("Coding complete? Click 'Check' to earn cool rewards!")
April 22, 2020
Comments: