| 837 | 1 #!/usr/bin/env python | 
|  | 2 | 
|  | 3 """ | 
|  | 4 given a `value` and an array, | 
|  | 5 if the sum of two numbers in the array | 
|  | 6 total the value, return `True` | 
|  | 7 (exit 0): | 
|  | 8 | 
|  | 9  ./array_sum.py 3 1 2 4  # YES!  because 1+2=3 | 
|  | 10 | 
|  | 11  ./array_sum.py 4 1 2 5 6  # NO! | 
|  | 12 """ | 
|  | 13 | 
|  | 14 import argparse | 
|  | 15 import sys | 
|  | 16 | 
|  | 17 | 
|  | 18 def sum_of_two(value, *array): | 
|  | 19 | 
|  | 20     start = 0 | 
|  | 21     end = len(array) - 1 | 
|  | 22     complements = [] | 
|  | 23     while start < end: | 
|  | 24         start_val = array[start] | 
|  | 25         end_val = array[end] | 
|  | 26         _sum = start_val + end_val | 
|  | 27         if _sum == value: | 
|  | 28             complements.append((start_val, end_val)) | 
|  | 29             end -= 1 | 
|  | 30             start +=1 | 
|  | 31             continue | 
|  | 32         if _sum > value: | 
|  | 33             end -= 1 | 
|  | 34         else: | 
|  | 35             start += 1 | 
|  | 36     return complements | 
|  | 37 | 
|  | 38 | 
|  | 39 def main(args=sys.argv[1:]): | 
|  | 40 | 
|  | 41     parser = argparse.ArgumentParser(description=__doc__) | 
|  | 42     parser.add_argument('value', type=int) | 
|  | 43     parser.add_argument('array', type=int, nargs='+') | 
|  | 44     options = parser.parse_args(args) | 
|  | 45 | 
|  | 46     retval = sum_of_two(options.value, *options.array) | 
|  | 47 | 
|  | 48     print (retval) | 
|  | 49 | 
|  | 50     sys.exit(0 if retval else 1) | 
|  | 51 | 
|  | 52 | 
|  | 53 if __name__ == '__main__': | 
|  | 54     main() |