amloessb

hailstone.py

Jan 24th, 2012
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.70 KB | None | 0 0
  1. import sys
  2.  
  3. hailrecord = {1:0, 2:1}
  4.  
  5. def is_int(s):
  6.     try:
  7.         int(s)
  8.         return True
  9.     except ValueError:
  10.         return False
  11.  
  12. def hailstone(n, prt, opt):
  13.     if n < 1:
  14.         print "Pick a positive number, dummy."
  15.         return -1
  16.     elif not is_int(n):
  17.         print "That's not a number, dummy."
  18.         return -1
  19.     else:
  20.         n = int(n)
  21.         steps = 0
  22.         while n <> 1:
  23.             if opt:
  24.                 if n in hailrecord:
  25.                     return hailrecord[n] + steps
  26.             if prt: print n,
  27.             steps += 1
  28.             if n % 2 == 0:
  29.                 n = n / 2
  30.             else:
  31.                 n = n * 3 + 1
  32.         if prt: print n
  33.         return steps
  34.  
  35. if __name__ == '__main__':
  36.     if (len(sys.argv) < 2 or len(sys.argv) > 3):
  37.         print "You done goofed!"
  38.         sys.exit(1)
  39.     else:
  40.         if sys.argv[1] == "find":
  41.             goal = int(sys.argv[2])
  42.             if not is_int(goal):
  43.                 print "That goal's not a number, dummy."
  44.                 sys.exit(1)
  45.             else:
  46.                 num = 2
  47.                 s = 0
  48.                 while s < goal:
  49.                     num += 1
  50.                     if num in hailrecord:
  51.                         temp = hailrecord[num]
  52.                     else:
  53.                         temp = hailstone(num, False, True)
  54.                     if temp > 0 and temp > s:
  55.                         s = temp
  56.                     elif temp < 0:
  57.                         sys.exit(2)
  58.                 hailstone(num, True, False)
  59.                 print num, "has a hailstone sequence of length", s
  60.         else:
  61.             num = sys.argv[1]
  62.             hailstone(num, True, False)
Advertisement
Add Comment
Please, Sign In to add comment