Example #1
0
File: quine.c Project: kahrs/cda
void
doimpq(long *start, long *end, long mask, long lvl)
{
	long v, l, msk;
	long *p, *a, *b;
	int f;

/*	pimp(start, end, msk, lvl, end-start); /* */
	for(msk = mask; msk;  msk &= ~l) {
		l = msk & -msk;
		f = 0;
		if(l < lvl) {
			for(a=start; a<end; a++) {
				v = *a;
				if(v & l)
					continue;
				v &= mask;
				b = bsrch(v|l, a+1, end, mask);
				if(b == 0)
					continue;
				*a |= MARK;
				*b |= MARK;
			}
			continue;
		}
		p = end;
		for(a=start; a<end; a++) {
			v = *a;
			if(v & l)
				continue;
			v &= mask;
			b = bsrch(v|l, a+1, end, mask);
			if(b == 0)
				continue;
			if((*a & MARK) && (*b & MARK)) {
				*p++ = v|MARK;
				continue;
			}
			f = 1;
			if(p < &itmp[NTMP]) *p++ = v;
			else {
				fprintf(stderr, "NTMP to small\n");
#ifdef PLAN9
				exits("quine: NTMP too small");
#else
				exit(1);
#endif
			}
			*a |= MARK;
			*b |= MARK;
		}
		if(f)
			doimpq(end, p, mask & ~l, l<<1);
	}
	for(a=start; a<end; a++)
		if(!(*a & MARK))
			oterm(*a, mask & ~msk, (ndc==-1)? '%': ':');
}
Example #2
0
int
main(int argc, char **argv)
{
        int i = 0;

        /* initialize
         */
        count[1] = 1;
        for (i = 2; i < COUNT_SZ; i++)
                count[i] = i + count[i - 1];

        while (1) {
                int num = 0;

                if (scanf("%d", &num) == EOF)
                        break;
                i = bsrch(num);

                int j = num - count[i - 1];

                if (i % 2 == 0)
                        printf("TERM %d IS %d/%d\n", num, j, i - j + 1);
                else
                        printf("TERM %d IS %d/%d\n", num, i - j + 1, j);
        }

        return 0;
}
int main(){
	int arr[], arr_size, elem;
	int index = bsrch(arr, arr_size, elem);
	return 0;
}