Voila un bout de code pondu par un pote et qui doit bien avoir 20/25 ans... (le code, pas lui :-)
A l'époque, on arrivait tout juste à rester sous les 45 secondes... Avec les machines actuelles c'est évidemment instantané !
Bon, allez, on va dire que c'est du Gpl 2+ :-)
# Une version texte en C "pur"
Posté par zx81 . En réponse à la dépêche Kitsune 2.0 : jeu de lettres et de chiffres. Évalué à 2.
/* contebon.c */ #include "math.h" /* #include "process.h" */ #include "stdio.h" #include "string.h" unsigned _stklen = 60000U ; #define MAXNB 6 typedef struct { long val; char text[80]; } elt_rech; long obj,best_delta; int cherche(elt_rech jeu[]) { int i; for(i=0;jeu[i].val;i++) { int j; if(labs(jeu[i].val-obj)<best_delta) { best_delta=labs(jeu[i].val-obj); printf("%s=%ld\n",jeu[i].text,jeu[i].val); if(jeu[i].val==obj)return(1); } for(j=i+1;jeu[j].val;j++) { elt_rech jeulocal[MAXNB+1]; long big,small; char tbig[80],tsmall[80]; int k,nbout=1; for(k=0;jeu[k].val;k++) if(k!=i&&k!=j) { jeulocal[nbout].val=jeu[k].val; strcpy(jeulocal[nbout].text,jeu[k].text); nbout++; } jeulocal[nbout].val=0; if(jeu[i].val>jeu[j].val) { big=jeu[i].val; small=jeu[j].val; strcpy(tbig,jeu[i].text); strcpy(tsmall,jeu[j].text); } else { big=jeu[j].val; small=jeu[i].val; strcpy(tbig,jeu[j].text); strcpy(tsmall,jeu[i].text); } jeulocal[0].val=big+small; sprintf(jeulocal[0].text,"(%s+%s)",tbig,tsmall); if(cherche(jeulocal))return(1); if(big!=small) { jeulocal[0].val=big-small; sprintf(jeulocal[0].text,"(%s-%s)",tbig,tsmall); if(cherche(jeulocal))return(1); } jeulocal[0].val=big*small; sprintf(jeulocal[0].text,"%sx%s",tbig,tsmall); if(cherche(jeulocal))return(1); if(!(big%small)) { jeulocal[0].val=big/small; sprintf(jeulocal[0].text,"(%s/%s)",tbig,tsmall); if(cherche(jeulocal))return(1); } } } return(0); } int main() { short nbnb,i; elt_rech jeu[MAXNB+1]; printf("Combien de nombres "); scanf("%d",&nbnb); if(nbnb>MAXNB) { printf("Pas plus que 6.\n"); exit(0); } for(i=0;i<nbnb;i++) { printf("Nombre %d ",i+1); scanf("%ld",&jeu[i].val); sprintf(jeu[i].text,"%ld",jeu[i].val); } jeu[nbnb].val=0; printf("Tri des valeurs ...."); for(i=0;i<nbnb;i++) { int j; for(j=i+1;j<nbnb;j++)if(jeu[i].val<jeu[j].val) { elt_rech swap; swap=jeu[i]; jeu[i]=jeu[j]; jeu[j]=swap; } } for(i=0;i<nbnb;i++)printf(" %ld",jeu[i].val); printf("\nObjectif "); scanf("%ld",&obj); best_delta=labs(obj-jeu[0].val); if(cherche(jeu))printf("Solution exacte trouvee\n"); else printf("Solution approchee trouvee\n"); }