This repository has been archived by the owner on Jul 1, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.py
75 lines (56 loc) · 1.69 KB
/
index.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from sys import exit, argv
OFFSET = 33
BASE = 94
SPC = " "
NL = "\n"
ALPHA = list(
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!"
"\"#$%&'()*+,-./:;<=>?@[\]^_`|~") + [SPC, NL]
def read_file(fn):
with open(fn) as fp:
return fp.read()
def encode_num(n):
out = []
while n:
n, r = divmod(n, BASE)
out.append(chr(OFFSET + r))
return ''.join(out[::-1])
def decode_num(body):
assert body != ''
down = (ord(c) - OFFSET for c in body[::-1])
s = 0
for p, x in enumerate(down):
s += x * (BASE ** p)
return s
def decode_str(s):
chars = [c for c in list(s)]
return "".join([ALPHA[(ord(c) - OFFSET)] for c in chars])
def encode_str(s):
chars = [c for c in list(s)]
return "".join([chr(ALPHA.index(c) + OFFSET) for c in chars])
def decode_bin(c):
if c == '.': return 'concat'
if c == 'T': return 'take'
if c == 'D': return 'drop'
if c == '$': return 'B$'
return c
def decode_lambda(l):
return f'v{decode_num(l)}'
def decode_tokens(s):
tokens = s.split(' ')
if [t for t in tokens if t[0] not in 'TF?SBLvI']:
print('original:\n' + s)
print(f'yellow tokens not translated')
return " ".join([
'true' if t[0] == 'T' else
'false' if t[0] == 'F' else
'if' if t[0] == '?' else
decode_str(t[1:]) if t[0] == 'S' else
decode_bin(t[1:]) if t[0] == 'B' else
decode_lambda(t[1:]) if t[0] in ('L', 'v') else
str(decode_num(t[1:])) if t[0] == 'I'
else f'\033[93m{t}\033[0m'
for t in tokens if t])
# if __name__ == '__main__':
# # print(parse(read_file(argv[1])))
# print(encode_str(read_file(argv[1])))