-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaffine.cpp
More file actions
executable file
·77 lines (62 loc) · 2.03 KB
/
affine.cpp
File metadata and controls
executable file
·77 lines (62 loc) · 2.03 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
73
74
75
76
77
#include <wx/wx.h>
#include <cstdlib>
#include "affine.h"
#include "ids.h"
#include "english.h"
BEGIN_EVENT_TABLE(WA_Affine, wxPanel)
EVT_TEXT(affine_txt, WA_Affine::on_txt_changed)
END_EVENT_TABLE()
WA_Affine::WA_Affine(wxWindow * parent) : wxPanel(parent, wxID_ANY){
txt = new wxTextCtrl(this, affine_txt, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE);
result = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY);
num_a = new wxTextCtrl(this, wxID_ANY, wxT("1"), wxDefaultPosition, wxDefaultSize, wxTE_READONLY);
num_b = new wxTextCtrl(this, wxID_ANY, wxT("0"), wxDefaultPosition, wxDefaultSize, wxTE_READONLY);
num_sizer = new wxBoxSizer(wxHORIZONTAL);
num_sizer->Add(num_a, 1, wxEXPAND);
num_sizer->Add(num_b, 1, wxEXPAND);
main_sizer = new wxBoxSizer(wxVERTICAL);
main_sizer->Add(txt, 1, wxEXPAND | wxALL, 5);
main_sizer->Add(num_sizer, 0, wxEXPAND);
main_sizer->Add(result, 1, wxEXPAND | wxALL, 5);
SetAutoLayout(TRUE);
SetSizer(main_sizer);
}
static int divide(int a, int b){
while(a < 0 || (a % b) != 0){
a += 26;
}
return a / b;
}
void WA_Affine::on_txt_changed(wxCommandEvent& event){
wxString data = txt->GetValue();
wxString ndata(data);
double lowest_freq = 0.0f;
double fval;
wxString lowest_data;
for(int a = 1; a < 26; a += 2){
if(a == 13){
a = 15;
continue;
}
for(int b = 0; b < 26; b++){
for(unsigned int i = 0; i < data.Len(); i++){
if(data[i] >= 'A' && data[i] <= 'Z'){
ndata[i] = 'A' + divide(data[i] - 'A' - b, a);
}else if(data[i] >= 'a' && data[i] <= 'z'){
ndata[i] = 'a' + divide(data[i] - 'a' - b, a);
}
}
//fval = english_frequency(ndata);
fval = english_score(ndata);
if(fval > lowest_freq){
num_a->SetValue(wxString::Format(wxT("%u"), a));
num_b->SetValue(wxString::Format(wxT("%u"), b));
lowest_freq = fval;
lowest_data = ndata;
}
}
}
result->SetValue(lowest_data);
}
WA_Affine::~WA_Affine(){
}