| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #include <stdio.h>
- #include <stdint.h>
- #include <string.h>
- #include <stdlib.h>
- #include "da.h"
- DA_DEF_STRUCT(char, str);
- DA_DEF_STRUCT(uint64_t, prods);
- void str_append(struct str *str, const char *cstr);
- uint8_t char_to_u8(char c);
- int
- main(int argc, const char **argv)
- {
- uint64_t res = 0;
- uint64_t i = 0, j = 0;
- uint64_t window_size = 13;
- struct str str = {NULL, 0, 1024};
- struct prods prods = {0};
- DA_CREATE(prods, sizeof(*prods.items));
- str.items = calloc(str.cap, sizeof(*str.items));
- str_append(&str, "73167176531330624919225119674426574742355349194934");
- str_append(&str, "96983520312774506326239578318016984801869478851843");
- str_append(&str, "85861560789112949495459501737958331952853208805511");
- str_append(&str, "12540698747158523863050715693290963295227443043557");
- str_append(&str, "66896648950445244523161731856403098711121722383113");
- str_append(&str, "62229893423380308135336276614282806444486645238749");
- str_append(&str, "30358907296290491560440772390713810515859307960866");
- str_append(&str, "70172427121883998797908792274921901699720888093776");
- str_append(&str, "65727333001053367881220235421809751254540594752243");
- str_append(&str, "52584907711670556013604839586446706324415722155397");
- str_append(&str, "53697817977846174064955149290862569321978468622482");
- str_append(&str, "83972241375657056057490261407972968652414535100474");
- str_append(&str, "82166370484403199890008895243450658541227588666881");
- str_append(&str, "16427171479924442928230863465674813919123162824586");
- str_append(&str, "17866458359124566529476545682848912883142607690042");
- str_append(&str, "24219022671055626321111109370544217506941658960408");
- str_append(&str, "07198403850962455444362981230987879927244284909188");
- str_append(&str, "84580156166097919133875499200524063689912560717606");
- str_append(&str, "05886116467109405077541002256983155200055935729725");
- str_append(&str, "71636269561882670428252483600823257530420752963450");
- for ( i = 0; i < str.size - window_size; ++i ) {
- uint64_t t = 1;
- for ( j = 0; j < window_size; ++j ) {
- t *= (uint64_t) char_to_u8(*(str.items + i + j));
- }
- DA_APPEND(prods, t);
- }
- for ( i = 0; i < prods.size; ++i ) {
- if ( prods.items[i] > res ) {
- res = prods.items[i];
- }
- }
- printf("Result = %ld!\n", res);
- free(str.items);
- free(prods.items);
- (void) argc; (void) argv;
- return 0;
- }
- void
- str_append(struct str *str, const char *cstr)
- {
- uint64_t cstr_lenght = strlen(cstr);
- if ( (str->size + cstr_lenght) >= str->cap ) {
- str->cap *= 2;
- str->items = realloc(str->items, str->cap);
- }
- while ( *cstr != '\0' ) {
- str->items[str->size++] = *cstr;
- ++cstr;
- }
- }
- uint8_t
- char_to_u8(char c)
- {
- return (uint8_t)(c - '0');
- }
|