-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcaesar.js
More file actions
72 lines (58 loc) · 1.37 KB
/
caesar.js
File metadata and controls
72 lines (58 loc) · 1.37 KB
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
class caesarCipher {
constructor(alphabet, a, b) {
this.alphabet = alphabet;
this.a = Number(a);
this.b = Number(b);
this.n = this.alphabet.length;
this.text = [];
this.result = [];
}
encrypt(text) {
let lowerText = text.toLowerCase();
this.text = lowerText.split("");
this.text.forEach((element) => {
if (element == " ") {
this.result.push(element);
} else {
let index = this.alphabet.indexOf(element);
let newIndex = this.a * index;
newIndex = newIndex + this.b;
newIndex = newIndex % this.n;
this.result.push(this.alphabet[newIndex]);
}
});
return this.result.join("");
}
decrypt(text) {
let lowerText = text.toLowerCase();
this.text = lowerText.split("");
this.text.forEach((element) => {
if (element == " ") {
this.result.push(element);
} else {
let index = this.alphabet.indexOf(element);
let newIndex = ((index - this.b) / this.a) % this.n;
if (newIndex < 0) {
newIndex = this.alphabet.length - Math.abs(newIndex);
this.result.push(this.alphabet[newIndex]);
} else {
this.result.push(this.alphabet[newIndex]);
}
}
});
return this.result.join("");
}
validate() {
let rtn = false;
if (
this.a < this.alphabet.length &&
this.a > 0 &&
this.b < this.alphabet.length &&
this.b > 0
) {
rtn = true;
}
return rtn;
}
}
export default caesarCipher;