threesum.py


Below is the syntax highlighted version of threesum.py from §4.1 Performance.


#-----------------------------------------------------------------------
# threesum.py
#-----------------------------------------------------------------------

import stdio
import stdarray

#-----------------------------------------------------------------------

# Write to standard output the triples in array a that sum to 0.

def writeTriples(a):
    n = len(a)
    for i in range(n):
        for j in range(i+1, n):
            for k in range(j+1, n):
                if (a[i] + a[j] + a[k]) == 0:
                    stdio.writef('%d %d %d\n', a[i], a[j], a[k])

#-----------------------------------------------------------------------

# Return the number of triples in array a that sum to 0.

def countTriples(a):
    n = len(a)
    count = 0
    for i in range(n):
        for j in range(i+1, n):
            for k in range(j+1, n):
                if (a[i] + a[j] + a[k]) == 0:
                    count += 1
    return count

#-----------------------------------------------------------------------

# Read an array of integers from standard input. Write to standard
# output the count of triples in the array that that sum to 0. If
# the count is low, then also write the triples.

def main():
    a = stdarray.readInt1D()
    count = countTriples(a)
    stdio.writeln(count)
    if count < 10:
        writeTriples(a)

if __name__ == '__main__':
    main()

#-----------------------------------------------------------------------

# python threesum.py < 8ints.txt
# 4
# 30 -30 0
# 30 -20 -10
# -30 -10 40
# -10 0 10

# python threesum.py < 1Kints.txt
# 0

# python threesum.py < 2kints.txt
# 2
# 391930676 -763182495 371251819
# -326747290 802431422 -475684132

# python threesum.py < 4kints.txt
# ...

# python threesum.py < 8kints.txt
# ...

# python threesum.py < 16kints.txt
# ...

# python threesum.py < 32kints.txt
# ...

# python threesum.py < 64kints.txt
# ...

# python threesum.py < 128kints.txt
# ...


Copyright © 2000–2015, Robert Sedgewick, Kevin Wayne, and Robert Dondero.
Last updated: Fri Oct 20 20:45:16 EDT 2017.