/* SWERC'98 - Optimal Programs */ /* 10/05/98 - Matthias Ruhl */ #include #define MAXLEN 10 #define MAXPTS 10 #define MAXVALUE 30000 FILE *inp; int n,a[MAXPTS],b[MAXPTS],cmd[MAXLEN],bestcmd[MAXLEN]; int caseno=1,bestlen; char *cmdstr[5] = { "ADD", "DIV", "DUP", "MUL", "SUB" }; int read_data() { int i; fscanf(inp,"%d",&n); for(i=0;i= bestlen) return; for(i=0;i MAXLEN-1-step) continue; cmd[step] = c; switch(c) { case 0: /* ADD */ for(i=0;i MAXVALUE) goto skip; tmp = s[stack-1]; s[stack-1] = sn; try(step+1,stack-1,s); s[stack-1] = tmp; skip: ; } } void process_data() { int *s[MAXPTS],i; s[0] = a; bestlen = MAXLEN + 1; try(0,0,s); printf("Program %d\n",caseno++); if(bestlen > MAXLEN) printf("Impossible"); else if(bestlen == 0) printf("Empty sequence"); else for(i=0;i