ghost - annna - Annna the nice friendly bot. | |
git clone git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws6… | |
Log | |
Files | |
Refs | |
Tags | |
README | |
--- | |
ghost (1385B) | |
--- | |
1 #!/usr/bin/env python | |
2 # coding=utf-8 | |
3 # | |
4 # Copy me if you can. | |
5 # by 20h | |
6 # | |
7 # Idea from: https://github.com/xdpirate/ghost-translator/blob/main/ghos… | |
8 | |
9 import os | |
10 import sys | |
11 import getopt | |
12 | |
13 def human2ghost(s): | |
14 r = "" | |
15 for c in s: | |
16 binc = bin(ord(c)^96)[2:] | |
17 for j in binc: | |
18 if j == "1": | |
19 r += "O" | |
20 else: | |
21 r += "o" | |
22 r += " " | |
23 return r | |
24 | |
25 def ghost2human(s): | |
26 r = "" | |
27 if len(s) == 0: | |
28 return r | |
29 | |
30 for c in s.split(" "): | |
31 if len(c) == 0: | |
32 continue | |
33 b = "" | |
34 for j in c: | |
35 if j == "O": | |
36 b += "1" | |
37 elif j == "o": | |
38 b += "0" | |
39 r += str(chr(int(b, 2)^96)) | |
40 return r | |
41 | |
42 def usage(app): | |
43 app = os.path.basename(app) | |
44 print("usage: %s [-h] [-e|-d]" % (app), file=sys.stderr) | |
45 sys.exit(1) | |
46 | |
47 def main(args): | |
48 try: | |
49 opts, largs = getopt.getopt(args[1:], "hed") | |
50 except getopt.GetoptError as err: | |
51 print(str(err)) | |
52 usage(args[0]) | |
53 | |
54 dodecode=0 | |
55 doencode=0 | |
56 | |
57 for o, a in opts: | |
58 if o == "-h": | |
59 usage(args[0]) | |
60 elif o == "-d": | |
61 dodecode=1 | |
62 elif o == "-e": | |
63 doencode=1 | |
64 else: | |
65 assert False, "unhandled option" | |
66 | |
67 ins = sys.stdin.read() | |
68 rs = None | |
69 if doencode: | |
70 words = ins.split(" ") | |
71 rs = " ".join([human2ghost(w) for w in words]) | |
72 if dodecode: | |
73 words = ins.split(" ") | |
74 rs = " ".join([ghost2human(w) for w in words]) | |
75 if rs != None: | |
76 print("%s" % (rs), end='') | |
77 else: | |
78 usage(args[0]) | |
79 | |
80 return 0 | |
81 | |
82 if __name__ == "__main__": | |
83 sys.exit(main(sys.argv)) | |
84 |