Another first-attempt! w00t again! This one is done differently then their analysis.
C++ allows you to use std::string, so you can check length. The length of the serial must be equal to the name.
Then I "serialize" or "hash" every name that has the same length, and check if it matches the number.
This is better than doing a binary search of each possible number upon the dictionary.
/*
ID: victor4
PROG: namenum
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
string serializeName(const string &in){
string ret = "";
for(int i = 0; i < in.length(); ++i){
if(in[i] == 'Q' || in[i] == 'Z')
return "1";
if(in[i] < 'Q')
ret += ((in[i] - 'A') / 3) + '2';
else
ret += ((in[i] - 'Q') / 3) + '7';
}
return ret;
}
int main() {
ofstream fout ("namenum.out");
ifstream fin ("namenum.in"), fdict ("dict.txt");
string serial;
fin >> serial;
bool found = false;
string entry;
while(fdict >> entry)
if(entry.length() == serial.length() && serializeName(entry) == serial){
found = true;
fout << entry << endl;
}
if(!found)
fout << "NONE" << endl;
// fout
return 0;
}
Could you pls explain "serializeName()" function?
ReplyDeleteThe serializeName() converts a name (like AAAA) to a number string (like 2222)
Delete