void Program::addWord(std::string word)
{
    if(wordExist(word) == false)
    {
        hashTable[checkSum(word)].words.push_back(word);
    }
}
Example #2
0
/*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;
}
Example #4
0
/*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();
    }
}
Example #6
0
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;
}