aboutsummaryrefslogtreecommitdiff
path: root/eight_hash.py
diff options
context:
space:
mode:
Diffstat (limited to 'eight_hash.py')
-rwxr-xr-xeight_hash.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/eight_hash.py b/eight_hash.py
new file mode 100755
index 0000000..7211d5a
--- /dev/null
+++ b/eight_hash.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python3
+import sys
+import random
+
+# Source: https://en.wikipedia.org/wiki/Magic_8-ball#Possible_answers
+committal_responses = [
+ # Affirmative
+ "It is certain.",
+ "It is decidedly so.",
+ "Without a doubt.",
+ "Yes definitely.",
+ "You may rely on it.",
+ "As I see it, yes.",
+ "Most likely.",
+ "Outlook good.",
+ "Yes.",
+ "Signs point to yes.",
+ # Negative
+ "Don't count on it.",
+ "My reply is no.",
+ "My sources say no.",
+ "Outlook not so good.",
+ "Very doubtful.",
+]
+
+non_committal_responses = [
+ "Reply hazy, try again.",
+ "Ask again later.",
+ "Better not tell you now.",
+ "Cannot predict now.",
+ "Concentrate and ask again.",
+]
+
+
+def djb2_hash(text):
+ res = 5381
+ for c in text:
+ res = res * 33 + ord(c)
+ return res
+
+def get_committal_response(question):
+ return committal_responses[djb2_hash(question) % len(committal_responses)]
+
+def get_response(question):
+ if random.random() < len(non_committal_responses) / len(committal_responses):
+ return random.choice(non_committal_responses)
+ else:
+ return get_committal_response(question)
+
+if __name__ == "__main__":
+ try:
+ while True:
+ print(get_response(input("> ")))
+ except (KeyboardInterrupt, EOFError):
+ sys.exit(0)