78 lines
1.7 KiB
C
78 lines
1.7 KiB
C
#include "_.h"
|
|
|
|
void display(char **numbers) {
|
|
for (int i = 0; numbers[i] != NULL; i++) {
|
|
for (int j = 0; numbers[i][j] != '\0'; j++)
|
|
printf("%c", numbers[i][j]);
|
|
printf(" ");
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
char **first_line(char *input) {
|
|
|
|
char **numbers = calloc(pow(strlen(input), 2) + 1, sizeof(char*));
|
|
int count = 0;
|
|
int id = 0;
|
|
for (int i = 0; input[i] != '\0'; i++) {
|
|
int nbr = atoi(strndup(&input[i], 1));
|
|
char *add = calloc(11, 1);
|
|
add[0] = '.';
|
|
if (i % 2 == 0)
|
|
sprintf(add, "%d", id++);
|
|
|
|
for (int j = 0; j < nbr; j++)
|
|
numbers[count++] = strdup(add);
|
|
}
|
|
|
|
//display(numbers);
|
|
|
|
return numbers;
|
|
}
|
|
|
|
char **finish(char **numbers) {
|
|
long i = 1;
|
|
long lens = strslen(numbers);
|
|
for (; i < lens; i++) {
|
|
char *to_place;
|
|
long j = lens - 1;
|
|
for (;numbers[j][0] == '.'; j--);
|
|
to_place = numbers[j];
|
|
|
|
for (long k = 0; k < lens; k++) {
|
|
if (numbers[k][0] == '.') {
|
|
for (int w = 0; w < strlen(numbers[j]); w++)
|
|
numbers[k][w] = to_place[w];
|
|
break;
|
|
}
|
|
}
|
|
for (int k = 0; numbers[j][k] != '\0'; k++)
|
|
numbers[j][k] = '.';
|
|
}
|
|
//display(numbers);
|
|
|
|
return numbers;
|
|
}
|
|
|
|
long cal(char **numbers) {
|
|
long calc = 0;
|
|
int i = 0;
|
|
for (; numbers[i] != NULL && numbers[i][0] != '.'; i++)
|
|
calc += i * atol(numbers[i]);
|
|
return calc;
|
|
}
|
|
|
|
int main(int argc, char **argv) {
|
|
|
|
if (argc != 2)
|
|
return 1;
|
|
|
|
char *input = argv[1];
|
|
char **numbers = first_line(input);
|
|
long result = cal(finish(numbers));
|
|
//display(numbers);
|
|
|
|
printf("result: %ld\n", result);
|
|
return 0;
|
|
}
|