diff --git a/best.c b/best.c index d8489f0..d781f42 100644 --- a/best.c +++ b/best.c @@ -61,7 +61,7 @@ int check_best(res, nops, node, values, ops) nbests=0; found=1; //return 1; - }/* else if (diff == bestdiff && nops == bestops) { + } /*else if (diff == bestdiff && nops == bestops) { # ifdef DEBUG_BEST printf("NEW BEST SOLUTION (%d): res=%d diff=%d nops=%d\n", nbests+1, res, diff, nops); print_node(node, TREE_TOP, 0, 0); diff --git a/eval.c b/eval.c index fe6ca49..0939a60 100644 --- a/eval.c +++ b/eval.c @@ -66,34 +66,33 @@ int eval_node(node, depth, pvals, pops, ncalcs) res=val1*val2; break; case Sub: - if (val1 != val2) { - if (val1 > val2) { - res=val1-val2; - } else { -# ifdef DEBUG_EVAL2 - printf("eval: Sub: swapping val1=%d val2=%d\n", val1, val2); -# endif - res=val2-val1; - } - if (res == val2) /* already found in subtree */ - res=-1; + if (val1left; +# ifdef DEBUG_EVAL2 + printf("eval: Sub: swapping val1=%d val2=%d\n", val1, val2); +# endif + node->left=node->right; + node->right=tmp; } + if (val1 != val2) { + res=val1-val2; + } + if (res == val2) /* already found in subtree */ + res=-1; break; case Div: - if (val1 >= val2) { - if (val2 != 1 && (val1 % val2 == 0)) - res=val1/val2; - if (res == val2) /* already found in subtree */ - res=-1; - } else { + if (val1left; # ifdef DEBUG_EVAL2 - printf("eval: Div: swapping val1=%d val2=%d\n", val1, val2); + printf("eval: Sub: swapping val1=%d val2=%d\n", val1, val2); # endif - if (val1 != 1 && (val2 % val1 == 0)) - res=val2/val1; - if (res == val1) /* already found in subtree */ - res=-1; + node->left=node->right; + node->right=tmp; } + if (val2 != 1 && (val1 % val2 == 0)) + res=val1/val2; + if (res == val2) /* already found in subtree */ + res=-1; break; case Nop: case End: diff --git a/lceb.c b/lceb.c index f8027d6..60993ae 100644 --- a/lceb.c +++ b/lceb.c @@ -36,14 +36,14 @@ void help() fprintf(stderr, " -d TYPE: Solutions display type. TYPE can be:\n"); fprintf(stderr, " r: RPN (default)\n"); fprintf(stderr, " p: Polish\n"); - fprintf(stderr, " l: Lisp\n"); + fprintf(stderr, " l: Lisp (binary operators)\n"); fprintf(stderr, " i: Infix (full parentheses)\n"); fprintf(stderr, " d: Suitable for dc(1) input\n"); fprintf(stderr, " t: Tree\n"); fprintf(stderr, " -i: Show intermediate solutions\n"); fprintf(stderr, " -s: Do not show summary (time, nodes evaluated)\n"); fprintf(stderr, " -t: Use less trees (Wedderburn–Etherington instead of Catalan)\n"); - fprintf(stderr, " -h: this help:\n"); + fprintf(stderr, " -h: This help\n"); } int main(ac, av) diff --git a/tree.c b/tree.c index 27aafdd..6339409 100644 --- a/tree.c +++ b/tree.c @@ -66,19 +66,19 @@ void print_node(node, side, depth, details) return; switch (details) { - case 1: + case 1: /* prefix */ if (node->type==TREE_NODE) { printf("%c ", node->op); } else { printf("%d ", node->val); } - print_node(node->left, TREE_LEFT, depth+1, details); print_node(node->right, TREE_RIGHT, depth+1, details); + print_node(node->left, TREE_LEFT, depth+1, details); break; - case 0: - case 5: - print_node(node->left, TREE_LEFT, depth+1, details); + case 0: /* postfix */ + case 5: /* dc suitable */ print_node(node->right, TREE_RIGHT, depth+1, details); + print_node(node->left, TREE_LEFT, depth+1, details); if (node->type==TREE_NODE) { printf("%c ", node->op); } else { @@ -87,7 +87,7 @@ void print_node(node, side, depth, details) if (details==5 && depth==0) printf("p"); break; - case 3: + case 3: /* lisp */ if (node->type==TREE_NODE) { if (!depth) { printf("(%c", node->op); @@ -105,17 +105,17 @@ void print_node(node, side, depth, details) printf(")"); } break; - case 4: + case 4: /* infix */ if (node->type==TREE_NODE) { printf("("); } - print_node(node->left, TREE_LEFT, depth+1, details); + print_node(node->right, TREE_RIGHT, depth+1, details); if (node->type==TREE_NODE) { printf(" %c ", node->op); } else { printf("%d", node->val); } - print_node(node->right, TREE_RIGHT, depth+1, details); + print_node(node->left, TREE_LEFT, depth+1, details); if (node->type==TREE_NODE) { printf(")"); }