#include #include #include #include size_t rtk_resi (/* const */ char * s, struct rtk_kos * p) { size_t i = 0; size_t j = 0; size_t k = 0; size_t l = strlen(s); size_t p_sizeof = RTK_RAM_KOS; size_t pzi = 0; /* pieces za izdelavo */ size_t pjev = 0; size_t psd = 0; /* pieces sigma dolžin */; /* struct rtk_kos * */ p = malloc(sizeof(struct rtk_kos)*p_sizeof); /* začnemo s preprosto rešitvijo: en kos, celoten niz */ p[0].o = 0; p[0].l = l; p[0].p = 1; pjev++; psd = l; pzi = 1; /* iščemo ponovitve za izboljšavo, začnemo z dolžino 2 */ /* kosov, velikih 1, še ne potrebujemo */ /* POMNI: izračun točk: psd+pzi */ for (i = 2; i < l; i++) { /* za vsako možno dolžino kosa */ for (j = 0; j < l-i; j++) { /* za vsako lokacijo, kjer bi se začel kos */ // fprintf(stderr, "%.*s\n", i, s+j); } } return pjev; } int main (int argc, char ** argv) { char ** n = malloc(sizeof(char *) * 1); size_t * v = malloc(sizeof(size_t) * 1); size_t nalog = 0; int returnstatus = 0; char c = getchar(); int vrs = 0; size_t pjev; char fn[69]; FILE * fd; struct rtk_kos * p; n[0] = NULL; v[0] = 0; while (!feof(stdin)) { n[nalog] = realloc(n[nalog], sizeof(char)*v[nalog]+2); n[nalog][v[nalog]++] = c; n[nalog][v[nalog]] = '\0'; if (c == RTK_EOL) { if (vrs == 0 && strncmp("Stiskanje", n[0], strlen("Stiskanje") != 0)) { fprintf(stderr, "vhodna datoteka se ne začne s \"Stiskanje\"\n"); returnstatus = 1; goto returncleanly; } if ((vrs - 2) % 3 == 2) { /* če je bila to naloga */ fprintf(stderr, "prepisal nalogo %lu\r", nalog); nalog++; n = realloc(n, sizeof(char*)*(nalog+1)); n[nalog] = NULL; v = realloc(v, sizeof(size_t)*(nalog+1)); } v[nalog] = 0; /* gremo na začetek prostora za nalogo */ vrs++; } c = getchar(); } fprintf(stderr, "zapisal naloge v spomin. \n"); for (vrs = 0; vrs < nalog; vrs++) { fprintf(stderr, "rešujem nalogo %d\n", vrs); pjev = rtk_resi(n[vrs], p); free(p); p = NULL; } returncleanly: while (nalog > 0) { nalog--; free(n[nalog]); n[nalog] = NULL; } free(n); n = NULL; free(v); v = NULL; return returnstatus; }