diff --git a/lab.py b/lab.py index 3c57d387909cc005db551e4fc34600ac91488dc2..1eebaa730f05b7736bc8204315116837d38f37fb 100644 --- a/lab.py +++ b/lab.py @@ -2,6 +2,7 @@ def scalar_fibonacci(n): + """ Given a nonnegative integer n, return the nth Fibonacci number. For example: @@ -20,7 +21,11 @@ def scalar_fibonacci(n): >>> scalar_fibonacci(35) 9227465 """ - return 0 # stub + if n == 1: + return 1 + if n == 0: + return 0 + return scalar_fibonacci(n-2) + scalar_fibonacci(n-1) def vector_fibonacci(n): @@ -41,54 +46,68 @@ def vector_fibonacci(n): >>> vector_fibonacci(35) (5702887, 9227465) >>> vector_fibonacci(350) - (3865462327928467072415604609040860366007401579690263197296200323999931849, 6254449428820551641549772190170184190608177514674331726439961915653414425) + (3865462327928467072415604609040860366007401579690263197296200323999931849L, 6254449428820551641549772190170184190608177514674331726439961915653414425L) """ - return 0, 1 # stub + if n == 0: + return (0,0) + if n == 1: + return (0,1) + temp = vector_fibonacci(n-1) + return (temp[1],temp[0] + temp[1]) -def maximal_repetition_free_prefix(sequence): +def maximal_repetition_free_prefix(sequence,n): """ Given a sequence, return its longest repetition-free prefix. For example: - >>> maximal_repetition_free_prefix([]) + >>> maximal_repetition_free_prefix([],0) [] - >>> maximal_repetition_free_prefix([5]) + >>> maximal_repetition_free_prefix([5],0) [5] - >>> maximal_repetition_free_prefix([5, 4]) + >>> maximal_repetition_free_prefix([5, 4],0) [5, 4] - >>> maximal_repetition_free_prefix([5, 5]) + >>> maximal_repetition_free_prefix([5, 5],0) [5] - >>> maximal_repetition_free_prefix([5, 4, 5]) + >>> maximal_repetition_free_prefix([5, 4, 5],0) [5, 4] - >>> maximal_repetition_free_prefix([5, 4, 5, 3]) + >>> maximal_repetition_free_prefix([5, 4, 5, 3],0) [5, 4] - >>> maximal_repetition_free_prefix([3, 2, 1, 2, 4]) + >>> maximal_repetition_free_prefix([3, 2, 1, 2, 4],0) [3, 2, 1] """ - return [] # stub + if n == len(sequence): + return sequence + if sequence[n] in sequence[:n]: + return sequence[:n] + return maximal_repetition_free_prefix(sequence,n+1) + # n^2 -def maximal_repetition_free_subsequence(sequence): +def maximal_repetition_free_subsequence(sequence,n): """ Given a sequence, return the last of its longest repetition-free subsequences. For example: - >>> maximal_repetition_free_subsequence([]) + >>> maximal_repetition_free_subsequence([],-1) [] - >>> maximal_repetition_free_subsequence([5]) + >>> maximal_repetition_free_subsequence([5],0) [5] - >>> maximal_repetition_free_subsequence([5, 4]) + >>> maximal_repetition_free_subsequence([5, 4],1) [5, 4] - >>> maximal_repetition_free_subsequence([5, 4, 5]) + >>> maximal_repetition_free_subsequence([5, 4, 5],2) [4, 5] - >>> maximal_repetition_free_subsequence([5, 4, 5, 3]) + >>> maximal_repetition_free_subsequence([5, 4, 5, 3],3) [4, 5, 3] - >>> maximal_repetition_free_subsequence([3, 2, 1, 2, 4]) + >>> maximal_repetition_free_subsequence([3, 2, 1, 2, 4],4) [1, 2, 4] - >>> maximal_repetition_free_subsequence([1, 2, 1, 2, 1, 2, 1]) + >>> maximal_repetition_free_subsequence([1, 2, 1, 2, 1, 2, 1],6) [2, 1] """ - return [] # stub + if n < 0: + return sequence + if sequence[n-1] in sequence[n:]: + return sequence[n:] + return maximal_repetition_free_subsequence(sequence,n-1) def maximal_repetition_free_subsequence_version_2(sequence): @@ -119,23 +138,27 @@ def maximal_repetition_free_subsequence_version_2(sequence): return result -def maximal_repetition_free_subsequence_version_3(sequence): +def maximal_repetition_free_subsequence_version_3(sequence, n): """ Given a sequence, return the last of its longest repetition-free subsequences. For example: - >>> maximal_repetition_free_subsequence_version_3([]) + >>> maximal_repetition_free_subsequence_version_3([], -1) [] - >>> maximal_repetition_free_subsequence_version_3([5]) + >>> maximal_repetition_free_subsequence_version_3([5], 0) [5] - >>> maximal_repetition_free_subsequence_version_3([5, 4]) + >>> maximal_repetition_free_subsequence_version_3([5, 4], 1) [5, 4] - >>> maximal_repetition_free_subsequence_version_3([5, 4, 5]) + >>> maximal_repetition_free_subsequence_version_3([5, 4, 5], 2) [4, 5] - >>> maximal_repetition_free_subsequence_version_3([5, 4, 5, 3]) + >>> maximal_repetition_free_subsequence_version_3([5, 4, 5, 3], 3) [4, 5, 3] - >>> maximal_repetition_free_subsequence_version_3([3, 2, 1, 2, 4]) + >>> maximal_repetition_free_subsequence_version_3([3, 2, 1, 2, 4], 4) [1, 2, 4] - >>> maximal_repetition_free_subsequence_version_3([1, 2, 1, 2, 1, 2, 1]) + >>> maximal_repetition_free_subsequence_version_3([1, 2, 1, 2, 1, 2, 1], 6) [2, 1] """ - return [] # stub + if n < 0: + return sequence + if sequence[n-1] in sequence[n:]: + return sequence[n:] + return maximal_repetition_free_subsequence_version_3(sequence,n-1)