Zero Sum

zerosum

Algorithm

We generate all possible combinations of "+","-" and " ", then test if the sum is zero.

Python

# Evaluate strings
def calc(s):
    prev = 0
    lastOp = 1
    res = 0
    for i in range(len(s)):
        if s[i] in ['+','-']:
            res += lastOp*int(s[prev:i])
            if s[i] == '+': lastOp = 1
            if s[i] == '-': lastOp = -1
            prev = i+1
    res += lastOp*int(s[prev:])
    return res

# Recursive function that generates combos of +,-,' '
def gen(n):
    if n == 1: return [[]]
    res = []
    for i in ['+','-',' ']:
        res += [[i]+j for j in gen(n-1)]
    return res

# Test each combination
def test(c):
    res = []
    for i in c:
        # Generate exp
        s = ''.join(['1']+[i[j]+str(j+2) for j in range(len(i))])
        # Zero sum?
        if calc(s.replace(' ','')) == 0: # Remove spaces
            res.append(s)
    return sorted(res)

def main():
    with open('zerosum.in','r') as fIn:
        n = int(fIn.read())
    with open('zerosum.out','w') as fOut:
        fOut.write('\n'.join(test(gen(n)))+'\n')

if __name__ == '__main__': main()