diff --git a/Makefile b/Makefile index 6ad58cb..39fc223 100644 --- a/Makefile +++ b/Makefile @@ -15,6 +15,7 @@ p% : p%.c $(STRIP) $(BUILDDIR)/$@ p7 : p7.c $(LIBDIR)/prime.o +p8 : p8.c $(LIBDIR)/io.o p10 : p10.c $(LIBDIR)/prime.o p12 : p12.c $(LIBDIR)/prime.o diff --git a/data/8 b/data/8 new file mode 100644 index 0000000..dfd9153 --- /dev/null +++ b/data/8 @@ -0,0 +1,20 @@ +73167176531330624919225119674426574742355349194934 +96983520312774506326239578318016984801869478851843 +85861560789112949495459501737958331952853208805511 +12540698747158523863050715693290963295227443043557 +66896648950445244523161731856403098711121722383113 +62229893423380308135336276614282806444486645238749 +30358907296290491560440772390713810515859307960866 +70172427121883998797908792274921901699720888093776 +65727333001053367881220235421809751254540594752243 +52584907711670556013604839586446706324415722155397 +53697817977846174064955149290862569321978468622482 +83972241375657056057490261407972968652414535100474 +82166370484403199890008895243450658541227588666881 +16427171479924442928230863465674813919123162824586 +17866458359124566529476545682848912883142607690042 +24219022671055626321111109370544217506941658960408 +07198403850962455444362981230987879927244284909188 +84580156166097919133875499200524063689912560717606 +05886116467109405077541002256983155200055935729725 +71636269561882670428252483600823257530420752963450 diff --git a/lib/io.c b/lib/io.c new file mode 100644 index 0000000..b03c3f6 --- /dev/null +++ b/lib/io.c @@ -0,0 +1,24 @@ + +#include "io.h" + +int readnum(FILE *fd, char *buf, size_t len) { + + int i = 0; + + for(;;) { + int c = getc(fd); + + if (c == EOF) + break; + if (c < '0' || c > '9') + continue; + + buf[i] = c; + + if (i+1 > len) + break; + i++; + } + + return i; +} diff --git a/lib/io.h b/lib/io.h new file mode 100644 index 0000000..dc9faf7 --- /dev/null +++ b/lib/io.h @@ -0,0 +1,9 @@ + +#ifndef __IO_H +#define __IO_H + +#include + +int readnum(FILE *fd, char *buf, size_t len); + +#endif /* __IO_H */ diff --git a/p8.c b/p8.c index 0aefdf7..589b954 100644 --- a/p8.c +++ b/p8.c @@ -9,31 +9,12 @@ * No comment! */ -#include +#include +#include "lib/io.h" #define N_CHARS 1000 -#define BIGWALLOFTEXT \ -"73167176531330624919225119674426574742355349194934\ -96983520312774506326239578318016984801869478851843\ -85861560789112949495459501737958331952853208805511\ -12540698747158523863050715693290963295227443043557\ -66896648950445244523161731856403098711121722383113\ -62229893423380308135336276614282806444486645238749\ -30358907296290491560440772390713810515859307960866\ -70172427121883998797908792274921901699720888093776\ -65727333001053367881220235421809751254540594752243\ -52584907711670556013604839586446706324415722155397\ -53697817977846174064955149290862569321978468622482\ -83972241375657056057490261407972968652414535100474\ -82166370484403199890008895243450658541227588666881\ -16427171479924442928230863465674813919123162824586\ -17866458359124566529476545682848912883142607690042\ -24219022671055626321111109370544217506941658960408\ -07198403850962455444362981230987879927244284909188\ -84580156166097919133875499200524063689912560717606\ -05886116467109405077541002256983155200055935729725\ -71636269561882670428252483600823257530420752963450" +#define DATA "./data/8" int product(char *ptr, int n) { @@ -48,11 +29,24 @@ int product(char *ptr, int n) { int main() { int i; - char str[] = BIGWALLOFTEXT; + char *str = malloc(N_CHARS); + FILE *fd = fopen(DATA, "r"); int tmp, r = 0; - + + if (str == NULL) { + fprintf(stderr, "memory error\n"); + return 1; + } + + if (fd == NULL) { + fprintf(stderr, "can't open file '%s'\n", DATA); + return 1; + } + + readnum(fd, str, N_CHARS); + for(i=0; i < N_CHARS-5; i++) { - + tmp = product(&str[i], 5); if (tmp > r)