aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xentries/zgrannan/fib.py44
-rw-r--r--people.json4
2 files changed, 48 insertions, 0 deletions
diff --git a/entries/zgrannan/fib.py b/entries/zgrannan/fib.py
new file mode 100755
index 0000000..ee5c678
--- /dev/null
+++ b/entries/zgrannan/fib.py
@@ -0,0 +1,44 @@
+# Human in the loop fibonacci
+
+from functools import cache
+import sys
+
+req = 0
+cur = 0
+
+def compute(query, check):
+ global cur, req
+ while True:
+ try:
+ result = int(input(f"Please compute {query}: "))
+ if check(result):
+ break
+ except ValueError:
+ pass
+ print("Hmm, that didn't seem right...")
+ cur += 1
+ print(f"Computation {cur / req:2.2%} complete.")
+ return result
+
+@cache
+def add(x, y):
+ return compute(f"{x} + {y}", lambda r : r - x == y)
+
+@cache
+def sub(x, y):
+ return compute(f"{x} - {y}", lambda r : r + y == x)
+
+def fib(n):
+ if n <= 1:
+ return n
+ else:
+ return add(fib(sub(n, 1)), fib(sub(n, 2)))
+
+try:
+ n = int(sys.argv[-1])
+except ValueError:
+ n = 10
+
+req = 3 * (n - 1)
+result = fib(n)
+print(f"fib({n}) = {result}")
diff --git a/people.json b/people.json
index 5532504..e8c43e4 100644
--- a/people.json
+++ b/people.json
@@ -392,6 +392,10 @@
{
"name": "haskell",
"link": "./entries/zgrannan/Fib.hs"
+ },
+ {
+ "name": "human in the loop",
+ "link": "./entries/zgrannan/fib.py"
}
]
},