Files
Le-Compte-est-Bon/lceb.h

113 lines
3.2 KiB
C

#define MAXINPUT 6 /* max numbers as input */
#define ALLOCSIZE 1024 /* # of elements to alloc when needed */
#define EMPTY -1
typedef enum {
Nop='N',
Add='+',
Sub='-',
Mul='*',
Div='/',
End='\0' /* Only for "printf" */
} OPER;
typedef struct stack {
char name[80];
int size;
int last;
struct stack *next;
int stack[MAXINPUT+1];
} STACK;
#define TREE_UNDEF (-1) /* should not happen */
#define TREE_LEAF 0
#define TREE_NODE 1
#define TREE_LEFT 'L'
#define TREE_RIGHT 'R'
#define TREE_TOP 'T'
#define EMPTY -1
typedef struct node {
int type; /* TREE_LEAF or TREE_NODE */
int op;
int val;
int eval;
struct node *left;
struct node *right;
struct node *next; /* for transversal walk and free nodes */
} NODE;
typedef struct tree {
char name[80];
NODE *head;
struct tree *next;
int nodes; /* number of nodes */
int leaves; /* number of leaves */
int depth; /* max depth */
} TREE;
typedef struct best {
int res;
int diff;
int nops;
char *oper;
NODE *root;
int *values;
} BEST;
/* tree.c */
extern NODE *get_node();
extern void free_node(NODE *node);
extern void print_node(NODE *node, char side, int depth, int details);
extern void print_tree(TREE *tree, int details);
extern void print_trees(int details);
extern TREE *new_tree(char *name);
extern NODE *dup_node(NODE *src);
extern NODE *build_tree(int *desc, int size);
extern void gen_tree(int *seq, int n, int nb1, int nb0);
extern TREE *nth_tree(int n);
extern int n_trees();
/* stack.c */
extern void print_stack(STACK *stack, int details);
extern void print_stacks();
extern int keep_stack(STACK *stack);
//extern STACK *new_stack(int size, char *name, int keep);
extern STACK *new_stack(int size, char *name, int keep);
extern int *push_stack(STACK *stack, int val);
extern int *pop_stack(STACK *stack);
extern STACK *dup_stack(STACK *stack, char *name);
extern void swap_stack(int *elts, int i, int j);
extern int permute_stack(int *array, int n);
extern int gen_stacks(STACK *stack);
extern void mergesort_stack(int *array, int left, int right);
extern STACK *nth_stack(int n);
extern int n_stacks();
// extern STACKELT *set_op_stack(STACK *stack, int pos, OPER op);
// extern STACKELT *set_ops_stack(STACK *stack, char *ops);
/* oper.c */
extern void print_comb(int n);
extern void print_combs();
//extern unsigned n_combine(int nops, int len);
//extern char *combine(char *ops, int len, int n);
extern void gen_combinations(int nops);
extern int n_combs();
extern char *nth_comb(int n);
/* eval.c */
/* stack version */
//extern int eval_cell(STACKELT *pos);
//extern int eval_stack(STACK *stack);
/* tree version */
extern int eval_node(NODE *node, int depth, int *pvals, char *pops, int *ncalcs);
/* best.c */
extern int stopped();
extern void set_target (int n);
extern int check_best(int res, int nops, NODE *node, int *values, char *ops);
extern void print_best(NODE *node, int *values, char *pops, int depth);
extern void print_bests();