rendered paste body#include <stdio.h>#include <gc/gc.h>#define FACTORS_MAX 30int *factor(int v){ int i, onf; int *factors = GC_MALLOC_ATOMIC((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); /* add it in or subtract it out */ if (diff < 0) { printf("[<->-]"); } else { printf("[<+>-]"); } /* then print it */ printf("<.>"); prev = cur; } printf("\n"); return 0;}