Пример #1
0
void printStrings(int* num, char* res, int pos)
{
    int i;

    if(pos == LEN)
    {
        printf("%s\n", res);
        return;
    }
    else
    {
        if (num[pos] == 7 || num[pos] == 9)
        {
            for(i=1; i<=4; i++)
            {
                res[pos] = getCharKey(num[pos], i);
                printStrings(num, res, pos+1);

                if(num[pos] == 0 || num[pos] == 1)
                    return;
            }
        }
        else
        {
            for(i=1; i<=3; i++)
            {
                res[pos] = getCharKey(num[pos], i);
                printStrings(num, res, pos+1);

                if(num[pos] == 0 || num[pos] == 1)
                    return;
            }
        }
    }
}
Пример #2
0
void iterativeFind(int *sequence, int length, char *string) {
  int i;

  for (i=0; i<length; i++) {
    if (sequence[i] >= 2)
      string[i] = getCharKey(sequence[i], 1);
    else
      string[i] = '0' + sequence[i];
  }

  while(1) {
    printf("%s\n", string);

    for (i=0; i<length; i++) {
      if (string[i] == getCharKey(sequence[i], 3)) {
        string[i] = getCharKey(sequence[i], 1);
      } else if (string[i] == getCharKey(sequence[i], 2)) {
        string[i] = getCharKey(sequence[i], 3);
        break;
      } else if (string[i] == getCharKey(sequence[i], 1)) {
        string[i] = getCharKey(sequence[i], 2);
        break;
      }
    }

    if (i == length)
      return;
  }
}
Пример #3
0
// Non-recursion based
void printTelephoneWords2(int phoneNum[]){
	
	char result[PHONE_NUMBER_LENGTH + 1];
	int i;
	
	// Initialize the final result
	for(i=0; i<PHONE_NUMBER_LENGTH; i++){
		result[i] = getCharKey(phoneNum[i], 1);
	}
	
	// Tack on the NUL character at the end
	result[PHONE_NUMBER_LENGTH] = '\0';
	
	// Main loop begins
	while(1){
		printf("%s\n", result);
		
		// Start at the end and try to increment from right to left
		for(i=PHONE_NUMBER_LENGTH-1; i>=-1; i--){
			// Done, because you tried to carry the leftmost digit
			if(i == -1){
				return;
			}
			
			// Otherwise, we're not done and must continue
			if(result[i]==getCharKey(phoneNum[i], 3) || phoneNum[i]==0 || phoneNum[i]==1){
				// Reset current digit and continue!
				// Because carry movement involves 2 steps
				// 1) Reset current digit
				// 2) Increment next digit
				result[i] = getCharKey(phoneNum[i], 1);
			}
			else if(result[i] == getCharKey(phoneNum[i], 1)){
				// Increment and break to print
				result[i] = getCharKey(phoneNum[i], 2);
				break;
			}
			else if(result[i] == getCharKey(phoneNum[i], 2)){
				// Increment and break to print
				result[i] = getCharKey(phoneNum[i], 3);
				break;
			}
			
		}
	}
	
}
Пример #4
0
void recursiveFind(int *sequence, int length, int counter, char *string) {
  int i;

  if (counter == length) {
    printf("%s\n", string);
    return;
  }

  if (sequence[counter] >= 2) {
    for (i=1; i<=3; i++) {
      string[counter] = getCharKey(sequence[counter], i);
      recursiveFind(sequence, length, counter+1, string);
    }
  } else {
    string[counter] = '0' + sequence[counter];
    recursiveFind(sequence, length, counter+1, string);
  }
}
Пример #5
0
void doPrintTelephoneWords(int phoneNum[], int curDigit, char result[]){
	
	int i;
	
	// Base case
	if(curDigit == PHONE_NUMBER_LENGTH){
		printf("%s\n", result);
		return;
	}
	
	for(i=1; i<=3; i++){
		result[curDigit] = getCharKey(phoneNum[curDigit], i);
		doPrintTelephoneWords(phoneNum, curDigit+1, result);
		
		// Special case, to prevent from printing any word 3 times
		if(phoneNum[curDigit]==0 || phoneNum[curDigit]==1){
			return;
		}
	}
}
Пример #6
0
void _printwords(char * number, char * wptr) {
	if (!(*wptr)) {
		printf("%s\n", number);
		return;
	}
	
	int key = getCharInt(*wptr);
	if (key > 1) {
		for (int i = 0; i < 3; ++i) {
			char r = getCharKey(key,i);
			*wptr = r;
			_printwords(number,wptr+1);
		}
		//because the recursion traverses the entire depth 
		//of the phone number, then iterates, then does the *same*
		//thing... so it should be in the *same* state.
		*wptr = key+0x30;
	} else {
		_printwords(number,wptr+1);
	}
}
Пример #7
0
/**
 * Crypte les statistiques de l'unité pour 
 * la sauvegarde
 * @param unitSaved Unité sauvegardée
 */
void crypt(unit * unitSaved){
	long size = (strlen(key) * 15) + key[0] - key[1] / key[2]; // Récupère la taille du nom de l'unité
	int pos = 0;
	char * dynamicKey;

	dynamicKey = getKey(unitSaved->name); // Récupère une clé dynamique

	unitSaved->name *= size;
	unitSaved->stat.ARMOR *= (float)(-size * getCharKey(dynamicKey, &pos));
	unitSaved->stat.POWER *= -size * getCharKey(dynamicKey, &pos);
	unitSaved->stat.HP *= -size * getCharKey(dynamicKey, &pos);
	unitSaved->stat.RECOVERY *= -size * getCharKey(dynamicKey, &pos);
	unitSaved->stat.MOVE_RANGE *= -size * getCharKey(dynamicKey, &pos);
	unitSaved->stat.BLOCK[0] *= (float)(-size * getCharKey(dynamicKey, &pos));
	unitSaved->stat.BLOCK[1] *= (float)(-size * getCharKey(dynamicKey, &pos));
	unitSaved->stat.BLOCK[2] *= (float)(-size * getCharKey(dynamicKey, &pos));
	unitSaved->unitColor *= -size * getCharKey(dynamicKey, &pos);
	unitSaved->noPlayer *= -size * getCharKey(dynamicKey, &pos);

	for(int k = 0; k <NB_MAX_EFFECT; k++) { // Effets de status liés à l'unité actuelle
		unitSaved->effect[k] /= -size - getCharKey(dynamicKey, &pos);
	}

	free(dynamicKey); // Libère la mémoire de la clé
}