aboutsummaryrefslogtreecommitdiff
path: root/tools/ackermann.py
diff options
context:
space:
mode:
authorjack <[email protected]>2024-04-01 20:07:06 -0600
committerjack <[email protected]>2024-04-01 20:07:06 -0600
commit907a432ce4b3bac3874d104c7981a8a5d90f399f (patch)
tree579024a4e3c5bbfd43904068e3888c919481d881 /tools/ackermann.py
parentf63cbd900b2e67a2d7fa82c2983d71921e5d1e30 (diff)
downloadsynacor_challenge-907a432ce4b3bac3874d104c7981a8a5d90f399f.tar.gz
synacor_challenge-907a432ce4b3bac3874d104c7981a8a5d90f399f.zip
add python tools
Diffstat (limited to 'tools/ackermann.py')
-rwxr-xr-xtools/ackermann.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/tools/ackermann.py b/tools/ackermann.py
new file mode 100755
index 0000000..01c90fa
--- /dev/null
+++ b/tools/ackermann.py
@@ -0,0 +1,34 @@
+#!/usr/bin/env python
+
+
+def ackermann(a, b, c):
+ stack = [(a, b)]
+ res = 0
+ while stack:
+ a, b = stack.pop()
+ if a == 0:
+ res = b + 1
+ elif a == 1:
+ res = b + c + 1
+ elif a == 2:
+ res = (b + 2) * c + (b + 1)
+ elif b == 0:
+ stack.append((a - 1, c))
+ else:
+ stack.append((a, b - 1))
+ stack.append((a - 1, b))
+ return res
+
+
+def check_ack():
+ for i in range(32768):
+ print("checking:", i)
+ res = ackermann(4, 1, i) % 32768
+ if res == 6:
+ return i
+ return -1
+
+
+if __name__ == "__main__":
+ res = check_ack()
+ print("magic number:", res)