void Program::addWord(std::string word) { if(wordExist(word) == false) { hashTable[checkSum(word)].words.push_back(word); } }
/*parses text word by word given a string*/ void parseText(char *str, int numberWords ) { #ifdef DEBUG printf("IN PARSETEXT\n"); #endif bool exist= false, cases=false; char * word, *rest; word = strtok_r(str, " *<>,.-;:\n+\t#`~!$%=_+^{(?[@',&])}.:;\\-\"/|", &rest); Head=NULL; while (word != NULL) { if(word[0] == ' ' || word[0] == '\n' || word[0] == '\t'){ continue; } exist = wordExist(word); cases = wordCase(word); if(exist== false){ addNode(word); } word = strtok_r(NULL, " *<>,.-;:\n+\t#`~!$%=_+^{(?[@',&])}.:;\\-\"/|", &rest); } #ifdef DEBUG printf("OUT OF PARSETEXT\n"); #endif }
std::string Program::encrypt(std::string message, int key) { std::stringstream ss(message); std::string in; int track; int start; std::string change = ""; int collidecheck = 0; std::string encrypted = ""; while(getline(ss,in,' ')) { //::cout<<"in is: "<<in<<std::endl; track = 0; collidecheck = 0; start = checkSum(in); change = ""; if(wordExist(in) == false) { addWord(in); //std::cout<<"FAILED FAILED FAILED"<<std::endl; } while(hashTable[start].words[collidecheck] != in) { collidecheck++; } while(change == "") { if(start == tableSize) { start = 0; } for(int i = collidecheck; i < hashTable[start].words.size(); i++) { if(track == key) { change = hashTable[start].words[i]; break; } //std::cout<<"ON THE MOVE: "<< hashTable[start].words[i]; track++; } start++; } //std::cout<<"change is: "<<change<<std::endl; encrypted = encrypted +" "+ change; } return encrypted; }
/*parses text word by word given a string*/ void parseText(char *str) { bool exist= false; char * word; #ifdef DEBUG printf("IN PARSETEXT\n"); #endif word = strtok(str, " *<>,.-;:\n+\t#`~!$%=_+^{(?[@',&])}.:;\\-\"/|"); while (word != NULL) { exist = wordExist(word); if(exist== false){ addNode(word); } word = strtok(NULL, " *<>,.-;:\n+\t#`~!$%=_+^{(?[@',&])}.:;\\-\"/|"); } #ifdef DEBUG printf("OUT OF PARSETEXT\n"); #endif }
/* void delWord(word) this is a function added to meet number requirements, it deletes words from the hashtable if you wanted to do that for some reason. Pre-Condition word exist in existing hashtable Post-condition word is no longer in hashtable */ void Program::delWord(std::string word) { if(wordExist(word) == true) { int hsh = checkSum(word); bool found = false; int i = 0; while(i < hashTable[hsh].words.size() && !found) { if(hashTable[hsh].words[i] == word) { found = true; } i++; } while(i < hashTable[hsh].words.size() - 1) { std::string temp = hashTable[hsh].words[i+1]; hashTable[hsh].words[i+1] = hashTable[hsh].words[i]; hashTable[hsh].words[i] = temp; } hashTable[hsh].words.pop_back(); } }
int valueOfWord(struct wordScrabble Word, struct box Grille[15][15]){ int score=0; int multi=1; int posX=0; int posY=0; int valueLetter; int bonusPoints=0; int nbPosed=0; for(int i=0;i<Word.l;i++){ valueLetter = findValue(Word.letters[i]); if(valueLetter==-1) valueLetter=0; if(Word.position){ posY=i; } else{ posX=i; } //calcul du mot lui-même if(Grille[Word.x + posX][Word.y + posY].tok.value == 0){ nbPosed++; switch (Grille[Word.x + posX][Word.y + posY].bonus) { case 1: multi*=2; break; case 2: multi*=3; break; case 3: valueLetter*=2; break; case 4: valueLetter*=3; break; } } score +=valueLetter; if(Grille[Word.x+ posX][Word.y + posY].tok.value == 0){ //calcul des mots autour int j=0,k=0; char w[15]; int l=0; int s=0; int mul=1; //horizontale if(Word.position){ while(Word.x -(j+1) >= 0 && Grille[Word.x - (j+1)][Word.y + posY].tok.value != 0){ valueLetter = findValue(Grille[Word.x - (j+1)][Word.y + posY].tok.letter); if(valueLetter==-1) valueLetter=0; if(Grille[Word.x - (j+1)][Word.y + posY].tok.value == 0) { switch (Grille[Word.x - (j+1)][Word.y + posY].bonus) { case 1: mul*=2; break; case 2: mul*=3; break; case 3: valueLetter*=2; break; case 4: valueLetter*=3; break; } } s +=valueLetter; j++; } while(Word.x + (k+1) < 15 && Grille[Word.x + k+1][Word.y + posY].tok.value != 0){ valueLetter = findValue(Grille[Word.x + k+1][Word.y + posY].tok.letter); if(valueLetter==-1) valueLetter=0; if(Grille[Word.x + k+1][Word.y + posY].tok.value ==0) { switch (Grille[Word.x + k+1][Word.y + posY].bonus) { case 1: mul*=2; break; case 2: mul*=3; break; case 3: valueLetter*=2; break; case 4: valueLetter*=3; break; } } s +=valueLetter; k++; } int f=j; for(f;f>0;f--){ w[l] = toupper(Grille[Word.x - f][Word.y + posY].tok.letter); l++; } w[l] = toupper(Word.letters[i]); l++; for(int m=1;m<=k;m++){ w[l] = toupper(Grille[Word.x + m][Word.y + posY].tok.letter); l++; } if(wordExist(w,l) && l != 1){ score+=findValue(Word.letters[i]); score+=s; multi*=mul; } else if(l != 1) return -1; } //vertical else{ while(Word.y -(j+1) >= 0 && Grille[Word.x + posX][Word.y -(j+1)].tok.value != 0){ valueLetter = findValue(Grille[Word.x + posX][Word.y -(j+1)].tok.letter); if(valueLetter==-1) valueLetter=0; if(Grille[Word.x + posX][Word.y -(j+1)].tok.value == 0){ switch (Grille[Word.x + posX][Word.y -(j+1)].bonus) { case 1: mul*=2; break; case 2: mul*=3; break; case 3: valueLetter*=2; break; case 4: valueLetter*=3; break; } } s +=valueLetter; j++; } while(Word.y + (k+1) < 15 && Grille[Word.x + posX][Word.y + k+1].tok.value != 0){ valueLetter = findValue(Grille[Word.x + posX][Word.y + k+1].tok.letter); if(valueLetter==-1) valueLetter=0; if(Grille[Word.x + posX][Word.y + k+1].tok.value == 0){ switch (Grille[Word.x + posX][Word.y + k+1].bonus) { case 1: mul*=2; break; case 2: mul*=3; break; case 3: valueLetter*=2; break; case 4: valueLetter*=3; break; } } s+=valueLetter; k++; } for(j;j>0;j--){ w[l] = Grille[Word.x +posX][Word.y - j].tok.letter; l++; } w[l] = Word.letters[i]; l++; for(int m=1;m<=k;m++){ w[l] = Grille[Word.x + posX][Word.y + m].tok.letter; l++; } if(wordExist(w,l) && l != 1){ if(w[0]=='E' && w[1] == 'Z' && w[2] == 'E' && l==3 && wordExist(w,3)) printf("ok"); score+=s; multi*=mul; } else if(l != 1) return -1; } } } if(nbPosed==7) bonusPoints=50; return score *multi + bonusPoints; }