Page MenuHomec4science

Sane_Granma.cc
No OneTemporary

File Metadata

Created
Sun, May 12, 19:19

Sane_Granma.cc

// Sane_Granma.cc
// Auteur : Quentin Berling
// Version : 1.0
#include <array>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct StringPlus{
string str;
unsigned nbT;
unsigned nbD=0;
string alpha;
unsigned alphabétique;
};
const string NOT_IN_CAPITAL_LETTERS("The word is not purely in capital letters");
const string DOUBLE_WORD("Each word can be present only once");
const string EMPTY_DICO("The dictionnary cannot be empty");
const string NO_ANAGRAM("There is no anagram for this message and this dictionary");
const vector<StringPlus> operator+(vector<StringPlus> u, vector<StringPlus> const &v);
void operator+=(vector<StringPlus> &u, vector<StringPlus> const &v);
void read_input(vector<StringPlus> &dico, vector<vector<string>> &allwords);
StringPlus str_to_StrPlus(const string &str);
void sort1234(vector<StringPlus> &dico);
void sort234(vector<StringPlus> &dico);
void sort34(vector<StringPlus> &dico);
void sort4(vector<StringPlus> &dico);
const vector<StringPlus> operator+(vector<StringPlus> u, vector<StringPlus> const &v) {
vector<StringPlus> w;
for (auto& wordplus : u) {
w.push_back(wordplus);
}
for (auto& wordplus : v) {
w.push_back(wordplus);
}
return w;
}
void operator+=(vector<StringPlus> &u, vector<StringPlus> const &v) {
u=u+v;
}
int main() {
vector<StringPlus> dico;
vector<vector<string>> allwords;
read_input(dico, allwords);
for (auto& wordplus : dico) {
cout << wordplus.str << endl;
}
sort1234(dico);
for (auto& wordplus : dico) {
cout << wordplus.str << endl;
}
return 0;
}
void read_input(vector<StringPlus> &dico, vector<vector<string>> &allwords) {
string str;
StringPlus strplus;
string mode="dico_read";
vector<string> words;
while(cin >> str) {
if (mode == "dico_read" && str != ".") {
strplus=str_to_StrPlus(str);
dico.push_back(strplus);
} else if (str != "." && str != "*") {
words.push_back(str);
}
if (str == ".") {
if (mode != "word_read") {
mode="word_read";
} else if (str != "*") {
allwords.push_back(words);
words.clear();
}
}
}
}
StringPlus str_to_StrPlus(const string &str) {
StringPlus strplus;
array<unsigned, 26> alphabet={0};
unsigned iter;
strplus.str=str;
strplus.nbT=str.size();
for (auto& c : str) {
iter=c-'A';
alphabet[iter]+=1;
}
for (int n=0; n < 26; n++) {
if (alphabet[n] > 0) {
strplus.nbD++;
iter=alphabet[n];
while (iter > 0) {
strplus.alpha+='a'+n;
iter--;
}
}
}
for (auto& letterbool : alphabet) {
strplus.nbD+=letterbool;
}
return strplus;
}
void sort1234(vector<StringPlus> &dico) {
unsigned nbTmax(0);
vector<StringPlus> sorted_dico, nbt_sorted_dico;
for (auto& wordplus : dico) {
if (wordplus.str.size() > nbTmax) {
nbTmax=wordplus.str.size();
}
}
for (unsigned i=1; i <= nbTmax; i++) {
for (auto& wordplus : dico) {
if (wordplus.str.size() == i) {
nbt_sorted_dico.push_back(wordplus);
}
}
// sort234(nbt_sorted_dico);
// sorted_dico.insert(sorted_dico.end(), nbt_sorted_dico.begin(), nbt_sorted_dico.end() );
sorted_dico+=nbt_sorted_dico;
nbt_sorted_dico.clear();
}
dico=sorted_dico;
}
// void sort234(vector<string> &dico) {
// }

Event Timeline