aboutsummaryrefslogtreecommitdiff
path: root/entries
diff options
context:
space:
mode:
Diffstat (limited to 'entries')
-rw-r--r--entries/alexanderjsummers/scala/Fib.scala7
-rwxr-xr-xentries/zgrannan/fib.py44
2 files changed, 51 insertions, 0 deletions
diff --git a/entries/alexanderjsummers/scala/Fib.scala b/entries/alexanderjsummers/scala/Fib.scala
new file mode 100644
index 0000000..bc25902
--- /dev/null
+++ b/entries/alexanderjsummers/scala/Fib.scala
@@ -0,0 +1,7 @@
+object Fib {
+ private val golden = (1 + Math.sqrt(5)) / 2;
+
+ def next(i:Long) : Long = {
+ Math.round(i.toDouble * golden)
+ }
+} \ No newline at end of file
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}")