All pastes #1411342 Raw Edit

simpletextgen.c

public c v1 · immutable
#1411342 ·published 2009-05-03 17:39 UTC
rendered paste body
#include <stdio.h>#include <stdlib.h>#define FACTORS_MAX 30int *factor(int v){    int i, onf;    int *factors = malloc((FACTORS_MAX + 2) * sizeof(int));    onf = 0;    /* special cases */    if (v == 1) {        factors[0] = 1;        factors[1] = 0;        return factors;    } else if (v == 0) {        factors[0] = 0;        return factors;    }    for (i = 4; i <= v;) {        if ((v % i) == 0) {            v /= i;            factors[onf++] = i;            if (onf == FACTORS_MAX) break;        } else {            i++;        }    }    if (v != 1)        factors[onf++] = v;    factors[onf] = 0;    return factors;}void factorsAsBF(int *factors){    int i, j;    /* special cases */    if (factors[0] == 1 && factors[1] == 0) {        printf("+");        return;    } else if (factors[0] == 0) {        return;    }    printf("+");    for (i = 0; factors[i]; i++) {        printf("[->");        for (j = 0; j < factors[i]; j++) {            printf("+");        }        printf("<]>[<+>-]<");    }}int main(){    int prev, cur, diff, pdiff;    int *factors;    int counter = 0;    printf(">");    prev = 0;    while ((cur = getchar()) != EOF) {        fprintf(stderr, "%d\r", ++counter);        /* get the difference */        diff = cur - prev;        if (diff < 0) {            pdiff = -diff;        } else {            pdiff = diff;        }        /* factor it */        factors = factor(pdiff);        /* generate the value */        factorsAsBF(factors);        free(factors);        /* add it in or subtract it out */        if (diff < 0) {            printf("[<->-]");        } else {            printf("[<+>-]");        }        /* then print it */        printf("<.>");        prev = cur;    }    printf("\n");    return 0;}