int main() { int sum = 0; for(int i = 1; i < 1000000; i++) { int curr_chain = chain_length(i); if(curr_chain == 60) { sum++; //printf("%d\n", i); } } printf("\nSum: %d\n", sum); return 0; }
/* * Version: 12.07.24 (Generic Smart Readable) * Uses chain_length() to find solution. */ unsigned int solution(const unsigned int THRESHOLD) { int i; int largest = 0; int current; int return_value; for(i=1; i <= THRESHOLD; i++) { current = chain_length(i); if(current > largest) { largest = current; return_value = i; } } return return_value; }
static gsize chain_length(ByteChain *chain) { gsize len = 0; while(chain) { if (chain->len) { len += chain->len; } else { if (chain->data.sub_chain) { len += chain_length(chain->data.sub_chain); } } chain = chain->next; } return len; }
static gboolean pcapng_write_block(GOutputStream *out, guint type, ByteChain *body, GError **err) { static const guint8 pad[] = {0,0,0}; ByteChain chain[4]; guint32 header[2]; gsize body_len = chain_length(body); header[0] = type; header[1] = body_len + 12; chain[0].len = sizeof(header); chain[0].data.bytes = (guint8*)header; chain[0].next = &chain[1]; chain[1].len = 0; chain[1].data.sub_chain = body; chain[1].next = &chain[2]; chain[2].len = PADLEN(body_len, 4); chain[2].data.bytes = chain[2].len == 0 ? (guint8*)NULL : pad; chain[2].next = &chain[3]; chain[3].len = sizeof(header[1]); chain[3].data.bytes = (guint8*)&header[1]; chain[3].next = NULL; return pcapng_write_chain(out, chain, err); }