···11+#include <math.h>
22+#include <stdio.h>
33+#include <stdlib.h>
44+#include <string.h>
55+66+77+int count_digit(unsigned long long num){
88+ int len = 0;
99+ while (num!=0) {
1010+ num /= 10;
1111+ len++;
1212+1313+ }
1414+ return len;
1515+}
1616+1717+int part_one_invalid(unsigned long long num) {
1818+ int answer = 0;
1919+2020+ int len = count_digit(num);
2121+ if (len%2) {
2222+ answer = 0;
2323+ }
2424+2525+ //it gonna be pair so no worry
2626+ unsigned long long halfer = pow(10, len/2);
2727+2828+ if (num/halfer == num%halfer) {
2929+ answer = 1;
3030+ }
3131+ return answer;
3232+3333+}
3434+3535+3636+int part_two_invalid(unsigned long long num) {
3737+ int answer = 0;
3838+ int len = count_digit(num);
3939+ int j;
4040+4141+ for (int i =1; i<=len/2; i++) {
4242+ if (!((len%i)==0)) {
4343+ continue;
4444+ }
4545+ int chunk_num = len/i;
4646+ // use / and % to isolate chunks, with powers of 10 to the i
4747+ long long first = num % (long long)pow(10, i);
4848+4949+ for (j = 1; j< chunk_num; j++) {
5050+ long long chunk = num % (long long)pow(10,i*(j+1))/ (long long)pow(10,i*j);
5151+ if (chunk != first) {
5252+ break;
5353+5454+ }
5555+ }
5656+ if (j == chunk_num) {
5757+ answer=1;
5858+ }
5959+6060+6161+ }
6262+6363+6464+6565+ return answer;
6666+}
6767+6868+int main (int argc, char* argv[]) {
6969+7070+ FILE* f = NULL;
7171+ char* line = NULL;
7272+7373+ unsigned long long start = 0;
7474+ unsigned long long end = 0;
7575+ long long front_part = 0;
7676+ long long end_part = 0;
7777+ unsigned long long invalid_sum = 0;
7878+ ssize_t nlength;
7979+ size_t size = 0;
8080+8181+ f = fopen(argv[1],"r");
8282+8383+ while ((nlength = getdelim(&line, &size, ',', f) != -1)) {
8484+ start = atoll(strsep(&line, "-"));
8585+ end = atoll(strsep(&line, "-"));
8686+8787+ printf("start: %llu ",start);
8888+ printf("end: %llu\n",end);
8989+9090+9191+9292+9393+ for (unsigned long long i = start; i<=end; i++) {
9494+9595+9696+9797+ if (part_two_invalid(i)) {
9898+ invalid_sum += i;
9999+ printf("invalid number found: %llu\n",i);
100100+101101+ }
102102+103103+104104+105105+106106+107107+ }
108108+109109+110110+111111+ }
112112+113113+114114+ printf("invalid sum: %llu", invalid_sum);
115115+116116+117117+ free(line);
118118+ free(f);
119119+ return 0;
120120+}