ASCII字元隨機混淆字典的生成
阿新 • • 發佈:2019-02-01
有些時候出於不可告人的目的,我們可能希望把某些字元1對1地對映到另一個字元。比如'0'用'1'代替,'1'用'2'代替……。這個一般用混淆字典和其對偶字典就可以很高效(都是O(1))的搞定。不過我下午發現構造混淆字典很容易,構造其對偶字典則很痛苦,腦筋糾結,於是一咬牙一跺腳寫了個程式來幹這件事情。寫完後發現不知道該把程式碼放哪,於是乾脆貼在blog上備忘。
========================程式碼的分割線============================
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
// gene dicts to map [min-max] to [min-max] and against
void geneDict(int min, int max)
{
int cnt = max - min + 1;
if (cnt <= 0)
{
return;
}
// initial
int* dict = new int[cnt];
int* agDict = new int[cnt];
for (int i = 0; i < cnt; i++)
{
dict[i] = min + i;
}
// random arrange algo
srand((unsigned)time(NULL));
for (int i = 0; i < cnt; i++)
{
int swap_pos = rand() % cnt;
if (i != swap_pos)
{
int tmp = dict[i];
dict[i] = dict[swap_pos];
dict[swap_pos] = tmp;
}
}
// get against dict
for (int i = 0; i < cnt; i++)
{
agDict[dict[i] - min] = i + min;
}
// print
cout << "char FUZZY_DICT[] = {";
for (int i = 0; i < cnt; i++)
{
if (i != 0)
{
cout << ", ";
}
cout << "'" << ((char)dict[i]) << "'";
}
cout << "};" << endl;
cout << "char DEFUZZY_DICT[] = {";
for (int i = 0; i < cnt; i++)
{
if (i != 0)
{
cout << ", ";
}
cout << "'" << ((char)agDict[i]) << "'";
}
========================程式碼的分割線============================
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
// gene dicts to map [min-max] to [min-max] and against
void geneDict(int min, int max)
{
int cnt = max - min + 1;
if (cnt <= 0)
{
return;
}
// initial
int* dict = new int[cnt];
int* agDict = new int[cnt];
for (int i = 0; i < cnt; i++)
{
dict[i] = min + i;
}
// random arrange algo
srand((unsigned)time(NULL));
for (int i = 0; i < cnt; i++)
{
int swap_pos = rand() % cnt;
if (i != swap_pos)
{
int tmp = dict[i];
dict[i] = dict[swap_pos];
dict[swap_pos] = tmp;
}
}
// get against dict
for (int i = 0; i < cnt; i++)
{
agDict[dict[i] - min] = i + min;
}
cout << "char FUZZY_DICT[] = {";
for (int i = 0; i < cnt; i++)
{
if (i != 0)
{
cout << ", ";
}
cout << "'" << ((char)dict[i]) << "'";
}
cout << "};" << endl;
cout << "char DEFUZZY_DICT[] = {";
for (int i = 0; i < cnt; i++)
{
if (i != 0)
{
cout << ", ";
}
cout << "'" << ((char)agDict[i]) << "'";
}