-
Notifications
You must be signed in to change notification settings - Fork 0
/
beardfondle.ts
77 lines (73 loc) · 2.38 KB
/
beardfondle.ts
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
76
77
declare global {
interface String {
/**
* Converts string into string representation of beardfondle 'encoding'
*/
beard: () => string;
/**
* Converts 'encoded' symbols back to a string
*/
fondle: () => string;
}
}
String.prototype.beard = function (): string {
let builder: string = '';
for (let i = 0, len = this.length; i < len; i++) {
if (symbols[this[i]]) {
builder += symbols[this[i]];
if (i !== len - 1) {
builder += '+';
}
} else {
throw 'Bad character somewhere';
}
}
return builder;
};
String.prototype.fondle = function (): string {
const acceptable = '!+({[:]})';
for (let i = 0, len = this.length; i < len; i++) {
if (acceptable.indexOf(this[i]) < 0) {
throw 'Bad character somewhere';
}
}
// tslint:disable-next-line:no-eval
return eval('(' + this + ')');
};
/**
* Representation of characters supported by beardfondle
*/
export const symbols: { [s: string]: string; } = {
'a': '(![]+[])[+!+[]]',
'b': '({}+[])[!+[]+!+[]]',
'c': '({}+[])[!+[]+!+[]+!+[]+!+[]+!+[]]',
'd': '([][[]]+[])[+!+[]+!+[]]',
'e': '(!![]+[])[!+[]+!+[]+!+[]]',
'f': '(![]+[])[+[]]',
'i': '([][[]]+[])[+!+[]+!+[]+!+[]+!+[]+!+[]]',
'I': '(+([+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+[+!+[]]+[+[]]+[+[]]+[+[]])+![]+[])[+[]]',
'j': '({}+[])[!+[]+!+[]+!+[]]',
'l': '(![]+[])[!+[]+!+[]]',
'n': '([][[]]+[])[+!+[]]',
'N': '(+{}+[])[+[]]',
'o': '({}+[])[+!+[]]',
'O': '({}+[])[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]',
'r': '(!![]+[])[+!+[]]',
's': '(![]+[])[!+[]+!+[]+!+[]]',
't': '(!![]+[])[+[]]',
'u': '(!![]+[])[!+[]+!+[]]',
'y': '(+([+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+[+!+[]]+[+[]]+[+[]]+[+[]])+![]+[])[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]',
'0': '[+[]]',
'1': '[+!+[]]',
'2': '[+!+[]+!+[]]',
'3': '[+!+[]+!+[]+!+[]]',
'4': '[+!+[]+!+[]+!+[]+!+[]]',
'5': '[+!+[]+!+[]+!+[]+!+[]+!+[]]',
'6': '[+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]',
'7': '[+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]',
'8': '[+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]',
'9': '[+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]',
' ': '({}+[])[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]',
'[': '({}+[])[+[]]',
']': '({}+[])[+!+[]+[+!+[]+!+[]+!+[]+!+[]]]'
};