Addition de saison

Problème



Résoudre SABLE+SOLEIL=BIKINI . Dans cette équation chaque lettre peut etre remplacée par un chiffre. Deux lettres ne peuvent pas avoir la même valeur.

ca marche aussi pour :
SEND+MORE=MONEY
TWENTY+TWENTY+TWENTY+TEN+TEN=EIGHTY
RIEN+RIEN=ZERO
UNE+DEUX=TROIS
BALLE+FOOT=COUPE


Analyse



C'est facile ? On prend toutes les lettres et on les mets dans un tableau, ensuite on crée toutes les combinaisons de n (nombre de lettre) chiffres dans l'ensemble {0..9}. Ensuite il ne reste plus qu'à faire le calcul en remplacant chaque lettre par son chiffre correspondant

Programme

Voir le code dans une autre fenetre


#define ADD "UNE+DEUX=TROIS"
//#define ADD "BALLE+FOOT=COUPE"
//#define ADD "SOLEIL+SABLE=BIKINI"
// #define ADD "SEND+MORE=MONEY"
// #define ADD "TWENTY+TWENTY+TWENTY+TEN+TEN=EIGHTY"

char t[10], r[10], ind=0, add[] = ADD ".";

int compute( char *s, unsigned long d ) {
  if ( *s == '.' ) return d;
  if ( *s == '+' ) return d + compute(s+1, 0L);
  if ( *s == '=' ) return d - compute(s+1, 0L);
  return compute(s+1, d*10 + r[*s]);
}

void next(int c, int u, int j) {
  if ( c < ind ) {
    if ( !(u & (1<<j))) r[c] = j, next(c+1, u| (1<<j), 0);
    if ( j != 9 )  next(c, u, j+1);
  } else {
    if ( !compute(add, 0L) ) {
      char *p = add-1;
      printf("\n" ADD " <-> ");
      while ( *++p != '.' ) printf("%c",(*p<10?r[*p]+'0':*p));
    }
  }
}

void parse(char *c) {
char i;
  if ( *c == '.') { next(0,0,0) ; return ; }
  if ( *c >= 'A' && *c <='Z' ) {
    i=ind;
    while (--i >= 0 && t[i] != *c );
    if ( i != -1 ) *c = i ;
    else t[ind] = *c, *c = ind++ ;
  }
  parse(c+1);
}

int main ( void ) {
  parse(add);
}


Conclusion



Pour chaque saison
il y a une équation
mais de toutes facons
il faut des recursions.



codingfun_nospam_@salemioche.com
Dernière mise à jour: 26 Feb 2008 - Réalisé avec youhp3
A voir : Site Bébé - Glaces.org - Sorbets.org - IP relax - creer son site / forum
v1.0 - © Nicolas JEAN :CV - NiKoZEN : Création site internet 2002-2008
Hébergement web - appareils musculation - Lingerie - rencontre
saut en parachute - shopping en ligne - referencement site web