#include #include #include #include #include #include double min = 90000; double max = 3000000; int parse_double(const char *str, double *res) { char *ptr; *res = strtod(str, &ptr); if (*ptr) return 0; return 1; } void print(double diff, double val) { int lvl = (int)round((val - min + 1) / diff * 7); if (lvl < 0) lvl = 0; else if (lvl > 7) lvl = 7; putchar('\xe2'); putchar('\x96'); putchar('\x81' + lvl); } int main(int argc, char **argv) { argv++; argc--; if (argc == 0) { fprintf(stderr, "spark: missing operands\n"); return 1; } size_t as = argc / 2; double *a = malloc((as + 1) * sizeof(double)); if (a == NULL) return 1; size_t j = 0; for (size_t i = 0; i < as; i++) { double val = 0; if (!parse_double(argv[j], &val)) { j++; continue; } double val2 = 0; if (!parse_double(argv[j + 1], &val)) { j++; continue; } a[i] = (val + val2) / 2; j++; } double diff = max - min + 1; if (diff < 1) diff = 1; for (size_t i = 0; i < as; i++) print(diff, a[i]); putchar('\r'); free(a); return 0; }