linux
authorNils Forssén <forssennils@gmail.com>
Wed, 16 Feb 2022 16:30:07 +0000 (17:30 +0100)
committerNils Forssén <forssennils@gmail.com>
Wed, 16 Feb 2022 16:30:07 +0000 (17:30 +0100)
laboration3/uppgift_3.py [new file with mode: 0644]

diff --git a/laboration3/uppgift_3.py b/laboration3/uppgift_3.py
new file mode 100644 (file)
index 0000000..dd442b7
--- /dev/null
@@ -0,0 +1,131 @@
+# Uppgift 3
+
+def fac_rec(n):
+    if n == 0:
+        return 1
+    else:
+        return fac_rec(n-1)
+
+
+def fib(n):
+    if n == 0:
+        return 0
+    elif n == 1:
+        return 1
+    else:
+        return fib(n-1) + fib(n-2)
+
+
+def pascal(row, col):
+    if col < 1 or col > row:
+        return 0
+    elif row == 1:
+        return 1
+    else:
+        return pascal(row-1, col) + pascal(row-1, col - 1)
+
+
+def keep_if_even(lst):
+    if not lst:
+        return list()
+    if not lst[0] % 2:
+        return [lst[0], *keep_if_even(lst[1:])]
+    else:
+        return keep_if_even(lst[1:])
+
+
+def reverse_rec(lst):
+    if not lst:
+        return []
+    return [lst[-1], *reverse_rec(lst[:-1])]
+
+
+def keep_if_even_all(lst):
+    if not lst:
+        return list()
+    even_inner = list()
+    if isinstance(lst[0], list):
+        even_inner = keep_if_even_all(lst[0])
+    elif not lst[0] % 2:
+        return [lst[0], *keep_if_even_all(lst[1:])]
+
+    return [*even_inner, *keep_if_even_all(lst[1:])]
+
+
+def reverse_rec_all(lst):
+    if not lst:
+        return []
+    reverse_inner = list()
+    if isinstance(lst[-1], list):
+        reverse_inner = reverse_rec_all(lst[-1])
+    else:
+        reverse_inner = [lst[-1]]
+
+    return [*reverse_inner, *reverse_rec(lst[:-1])]
+
+
+def is_in_list(lst, elm):
+    if not lst:
+        return False
+    if isinstance(lst[0], list):
+        in_inner = is_in_list(lst[0], elm)
+    else:
+        in_inner = elm is lst[0]
+
+    return in_inner or is_in_list(lst[1:], elm)
+
+
+def count_all(lst):
+    if not lst:
+        return 0
+    if isinstance(lst[0], list):
+        elements = count_all(lst[0])
+    else:
+        elements = 1
+
+    return elements + count_all(lst[1:])
+
+
+def subst_all(lst, elm, new_value):
+    if not lst:
+        return list()
+
+    if isinstance(lst[0], list):
+        inner = subst_all([0], elm, new_value)
+    elif lst[0] == elm:
+        inner = [new_value]
+
+    return [*inner, *subst_all(lst[1:], elm, new_value)]
+
+
+def linear_search(key, seq):
+    if not seq:
+        return False
+    return seq[0] == key or linear_search(key, seq[1:]) or -1
+
+
+def binary_search(key, seq):
+    if len(seq) == 1:
+        if seq[0] != key:
+            return -1
+        return 0
+    print(seq, key)
+
+    mid = len(seq) // 2
+
+    if key == seq[mid]:
+        return mid
+
+    elif key > seq[mid]:
+        res = binary_search(key, seq[mid:])
+        if res == -1:
+            return res
+        return mid + res
+    else:
+        res = binary_search(key, seq[:mid])
+        if res == -1:
+            return res
+        return res
+
+
+print(binary_search(12, [1, 2, 3, 4, 5, 6, 6.5, 7, 9, 10, 11, 12]))