Mercurial > hg > config
comparison python/example/array_sum.py @ 837:5ba219864529
add example program
| author | Jeff Hammel <k0scist@gmail.com> |
|---|---|
| date | Mon, 27 Mar 2017 14:05:29 -0700 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 836:0fa456446fea | 837:5ba219864529 |
|---|---|
| 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() |
