Solução: Alien Numbers - Codejam (Daniel Rodrigues, Fernando Nunes e Luis Bernardo)

From AdonaiMedrado.Pro.Br
Jump to: navigation, search
# include <stdio.h>
# include <string.h>
 
int potencia(int x, int y){
   int pot=1;
   for (int i=0;i<y;i++)
      pot *= x;
   return pot;
}
int position(char letter,char language[]){
    char *pont;
    pont = strchr(language, letter) ;
    if (pont)
       return (pont-language);
    else
       return (-1);
}
 
int convertAlienSystemToDecimal(char alienNumber[],char languageSource[]){
    int lenghtOfNumber = strlen(alienNumber);
    int lenghtOfLanguage = strlen(languageSource);    
    int pos;
    int decimal=0;
    char letter;
 
    for (int i=0;i<lenghtOfNumber;i++){
       letter = alienNumber[i];
       pos = position(letter,languageSource);
       decimal += pos*(potencia(lenghtOfLanguage,(lenghtOfNumber-1-i)));
    }
   return decimal;
}
 
void convertDecimalToAlienSystem(int decimal,char languageTarget[],int numberTarget[],int *l){
   int lenght = strlen(languageTarget);
   int quociente=decimal;
   int resto;
   char res[2];
   int i=0;
   while(quociente){
      resto = decimal%lenght;
      numberTarget[i] = resto;
      quociente = decimal/lenght;
      decimal = quociente;
      i++;
   }
   *l = i;
}
void imprimeResultado(int numberTarget[],char languageTarget[],int lenghtNumber){
   for (int k=lenghtNumber-1;k>=0;k--)
       printf("%c",languageTarget[numberTarget[k]]);
   printf("\n");
}
 
int main(){
    int N;
    int numberTarget[1000];
    char alienNumber[94];
    char languageTarget[94];
    char languageSource[94];
 
    scanf("%d",&N);
    for (int i=1;i<=N;i++){
       scanf("%s",&alienNumber);
       scanf("%s",&languageSource);
       scanf("%s",&languageTarget);       
       int decimal = convertAlienSystemToDecimal(alienNumber,languageSource);
       int lenghtNumber;
       convertDecimalToAlienSystem(decimal,languageTarget,numberTarget,&lenghtNumber);
       printf("Case #%d: ",i);
       imprimeResultado(numberTarget,languageTarget,lenghtNumber);
    }
    return (0);
}