-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathenigma.cpp
110 lines (85 loc) · 3.1 KB
/
enigma.cpp
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <iostream>
#include <fstream>
#include <memory>
#include <string>
#include "classes.h"
// usinng namespace std;
int main(int argc, char* argv[]) {
int asize;
// read alphabet
cin >> asize;
Alphabet alphabet(asize);
// read number of rotors
int numRotors;
cin >> numRotors;
Rotor* rotors = new Rotor[numRotors]; // make empty rotors
// make alphabet
string temp;
for (int i = 0; i < asize; i++) {
string str = to_string(i+1);
temp = str;
alphabet.init(temp, i);
}
//alphabet.print();
// read rotors
for (int i = 0; i < numRotors; i++) {
// initialize ith rotor
rotors[i].init(/*s, t,*/ alphabet);
//rotors[i].print(alphabet);
}
// read number of reflectors
int numReflectors;
cin >> numReflectors;
Reflector* reflectors = new Reflector[numReflectors]; // make empty reflectors
// read reflectors
for (int i = 0; i < numReflectors; i++) {
reflectors[i].init(/*s,*/ alphabet);
//reflectors[i].print(alphabet);
}
// read number of enigmas
int numEnigmas;
cin >> numEnigmas;
Enigma* enigmas = new Enigma[numEnigmas]; // make empty enigmas
// read enigmas
for (int i = 0; i < numEnigmas; i++) {
// read number of rotors installed
int rotorsInstalled;
int k;
cin >> rotorsInstalled;
// set rotor count
enigmas[i].init(rotorsInstalled, alphabet);
// install rotors
for (int j = 0; j < rotorsInstalled; j++) {
// read jth rotor info
int rotorIndex;
string rotorStart;
cin >> rotorIndex;
cin >> rotorStart;
// install jth rotor
enigmas[i].rotors[j] = rotors[rotorIndex];
// enigmas[i].rotors[j].print(alphabet);
int rStart = stoi(rotorStart);
//enigmas[i].rotors[j].setIndex(rotorStart, alphabet);
enigmas[i].rotors[j].setIndex(rStart);
}
// read reflector
int reflectorIndex;
cin >> reflectorIndex;
// install reflector
enigmas[i].setReflector(reflectors[reflectorIndex]);
// read task
string temp;
string txt = "";
do {
cin >> temp;
txt += temp;
} while (txt.find('0') == -1);
// set task
enigmas[i].setString(txt);
}
for (int i = 0; i < numEnigmas; i++) {
enigmas->print();
cout << enigmas[i].encrypt() << endl;
}
//system("pause");
}