| 
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()
 |