diff --git a/Students/Rperkins/break_me.py b/Students/RPerkins/session01/break_me.py similarity index 100% rename from Students/Rperkins/break_me.py rename to Students/RPerkins/session01/break_me.py diff --git a/Students/Rperkins/grid_build.py b/Students/RPerkins/session01/grid_build.py similarity index 100% rename from Students/Rperkins/grid_build.py rename to Students/RPerkins/session01/grid_build.py diff --git a/Students/RPerkins/session02/ack.py b/Students/RPerkins/session02/ack.py new file mode 100644 index 00000000..d54b896e --- /dev/null +++ b/Students/RPerkins/session02/ack.py @@ -0,0 +1,46 @@ +__author__ = 'Robert W. Perkins' + + +def ack(m, n): + """Return the result of the Ackermann function on m and n""" + if m < 0 or n < 0: + return None + elif m == 0: + return n+1 + elif m > 0 and n == 0: + return ack(m-1, 1) + elif m > 0 and n > 0: + return ack(m-1, ack(m, n-1)) + +# Testing Block +if __name__ == "__main__": + assert ack(-1, 2) is None + assert ack(2, -1) is None + assert ack(-1, -1) is None + assert ack(0, 0) == 1 + assert ack(0, 1) == 2 + assert ack(0, 2) == 3 + assert ack(0, 3) == 4 + assert ack(0, 4) == 5 + assert ack(1, 0) == 2 + assert ack(1, 1) == 3 + assert ack(1, 2) == 4 + assert ack(1, 3) == 5 + assert ack(1, 4) == 6 + assert ack(2, 0) == 3 + assert ack(2, 1) == 5 + assert ack(2, 2) == 7 + assert ack(2, 3) == 9 + assert ack(2, 4) == 11 + assert ack(3, 0) == 5 + assert ack(3, 1) == 13 + assert ack(3, 2) == 29 + assert ack(3, 3) == 61 + assert ack(3, 4) == 125 + # max recursion depth exceeded after this point + #assert ack(4, 0) == 2**2**2-3 + #assert ack(4, 1) == 2**2**2**2-3 + #assert ack(4, 2) == (2**65536)-3 + #assert ack(4, 3) == (2**2**65536)-3 + #assert ack(4, 4) == (2**2**2**65536)-3 + print 'All tests passed' \ No newline at end of file diff --git a/Students/RPerkins/session02/series.py b/Students/RPerkins/session02/series.py new file mode 100644 index 00000000..041742a8 --- /dev/null +++ b/Students/RPerkins/session02/series.py @@ -0,0 +1,93 @@ +__author__ = 'Robert W. Perkins' + + +def fibonacci(n): + """Return the 'n'th value in the Fibonacci series""" + +# test for input in valid range + if n < 0: + return None + +# test for n == 0 + if n == 0: + return 0 + +# base case is n == 1 + if n == 1: + return 1 + else: + return fibonacci(n-1) + fibonacci(n-2) + +def lucas(n): + """Return the 'n'th value in the Lucas number series""" + +# test for input in valid range + if n < 0: + return None + +# test for n == 0 + if n == 0: + return 2 + +# base case is n == 1 + if n == 1: + return 1 + else: + return lucas(n-1) + lucas(n-2) + +def sum_series(n,first=0,second=1): + """Return the 'n'th value of a variable series""" + + """The first two numbers are passed via "first" and "second" + and each subsequent element is the sum of the 'n-1'th and 'n-2'th element (yes, i said tooth)""" + +# test for input in valid range + if n < 0: + return None + +# test for n == 0 + if n == 0: + return first + +# base case is n == 1 + if n == 1: + return second + else: + return sum_series(n-1,first,second) + sum_series(n-2,first,second) + + +# Testing Block +if __name__ == "__main__": + + # test fibonacci function for out of range, n == zero, base case, and 18th value in series + assert fibonacci(-3) is None + assert fibonacci(0) == 0 + assert fibonacci(1) == 1 + assert fibonacci(17) == 1597 + + # test lucas function for out of range, n == zero, base case, and 11th value in series + assert lucas(-3) is None + assert lucas(0) == 2 + assert lucas(1) == 1 + assert lucas(10) == 123 + + # tests sum_series function for fibonacci behavior with no optional params + # for out of range, n == zero, base case, and 18th value in series + assert sum_series(-3) is None + assert sum_series(0) == 0 + assert sum_series(1) == 1 + assert sum_series(17) == 1597 + + # tests sum_series function for lucas behavior with lucas series params + # for out of range, n == zero, base case, and 11th value in series + assert sum_series(-3,2,1) is None + assert sum_series(0,2,1) == 2 + assert sum_series(1,2,1) == 1 + assert sum_series(10,2,1) == 123 + + # tests sum_series function for valid results with optional params + # for out of range, n == zero, base case, and 11th value in series + assert sum_series(-3,4,2) is None + assert sum_series(0,4,2) == 4 + assert sum_series(1,4,2) == 2 + assert sum_series(10,4,2) == 246 \ No newline at end of file