num_coder 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/num_coder.rb +61 -14
- metadata +1 -1
data/lib/num_coder.rb
CHANGED
@@ -1,37 +1,68 @@
|
|
1
1
|
class NumCoder
|
2
2
|
class << self
|
3
3
|
|
4
|
-
def
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
def fixed_encode(cs, i, l)
|
5
|
+
if i.is_a? Array
|
6
|
+
r = ""
|
7
|
+
i.each { |e| r << fixed_encode(cs, e, l) }
|
8
|
+
return r
|
9
|
+
else
|
10
|
+
raise "Won't fit" unless i < cs.size ** l
|
11
|
+
s = cs[0] * l
|
12
|
+
l.times do |p|
|
13
|
+
s[-1-p] = cs[i / cs.size ** p % cs.size]
|
14
|
+
end
|
15
|
+
return s
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def fixed_decode(cs, s, l)
|
20
|
+
raise "Can't split" unless s.size % l == 0
|
21
|
+
r = []
|
22
|
+
(s.size / l).times do |p|
|
23
|
+
i = 0
|
24
|
+
s[p*l..p*l+l-1].each_char { |c| i = cs.size * i + cs.index(c) }
|
25
|
+
r << i
|
26
|
+
end
|
27
|
+
|
28
|
+
if r.size == 1
|
29
|
+
return r[0]
|
30
|
+
else
|
31
|
+
return r
|
10
32
|
end
|
11
|
-
|
33
|
+
end
|
34
|
+
|
35
|
+
def encode(cs, i)
|
36
|
+
fixed_encode(cs, i, Math.log(i, cs.size).ceil)
|
12
37
|
end
|
13
38
|
|
14
39
|
def decode(cs, s)
|
15
|
-
|
16
|
-
s.each_char { |c| i = cs.size * i + cs.index(c) }
|
17
|
-
return i
|
40
|
+
fixed_decode(cs, s, s.size)
|
18
41
|
end
|
19
42
|
|
20
43
|
def cs95
|
21
|
-
cs = ""
|
22
|
-
32.upto(126) { |c| cs << c }
|
23
|
-
return cs
|
24
|
-
|
44
|
+
# cs = ""
|
45
|
+
# 32.upto(126) { |c| cs << c }
|
46
|
+
# return cs
|
47
|
+
" !\"#\$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
|
25
48
|
end
|
26
49
|
|
27
50
|
def encode95(i)
|
28
51
|
encode(cs95, i)
|
29
52
|
end
|
30
53
|
|
54
|
+
def fixed_encode95(i, l)
|
55
|
+
fixed_encode(cs95, i, l)
|
56
|
+
end
|
57
|
+
|
31
58
|
def decode95(s)
|
32
59
|
decode(cs95, s)
|
33
60
|
end
|
34
61
|
|
62
|
+
def fixed_decode95(s, l)
|
63
|
+
fixed_decode(cs95, s, l)
|
64
|
+
end
|
65
|
+
|
35
66
|
def cs64
|
36
67
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
|
37
68
|
end
|
@@ -40,10 +71,18 @@ class NumCoder
|
|
40
71
|
encode(cs64, i)
|
41
72
|
end
|
42
73
|
|
74
|
+
def fixed_encode64(i, l)
|
75
|
+
fixed_encode(cs64, i, l)
|
76
|
+
end
|
77
|
+
|
43
78
|
def decode64(s)
|
44
79
|
decode(cs64, s)
|
45
80
|
end
|
46
81
|
|
82
|
+
def fixed_decode64(s, l)
|
83
|
+
fixed_decode(cs64, s, l)
|
84
|
+
end
|
85
|
+
|
47
86
|
def cs16
|
48
87
|
"0123456789abcdef"
|
49
88
|
end
|
@@ -52,9 +91,17 @@ class NumCoder
|
|
52
91
|
encode(cs16, i)
|
53
92
|
end
|
54
93
|
|
94
|
+
def fixed_encode16(i, l)
|
95
|
+
fixed_encode(cs16, i, l)
|
96
|
+
end
|
97
|
+
|
55
98
|
def decode16(s)
|
56
99
|
decode(cs16, s)
|
57
100
|
end
|
58
101
|
|
102
|
+
def fixed_decode16(s, l)
|
103
|
+
fixed_decode(cs16, s, l)
|
104
|
+
end
|
105
|
+
|
59
106
|
end
|
60
107
|
end
|