This commit is contained in:
Timo Schmidt 2023-04-02 23:36:35 +02:00
parent e9bd8c3e6a
commit 25f76c076a
1 changed files with 49 additions and 44 deletions

View File

@ -6,7 +6,7 @@
/* By: tischmid <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/04/02 20:26:44 by tischmid #+# #+# */
/* Updated: 2023/04/02 23:34:29 by tischmid ### ########.fr */
/* Updated: 2023/04/02 23:36:20 by tischmid ### ########.fr */
/* */
/* ************************************************************************** */
@ -28,9 +28,8 @@ int num_to_words_free(char **triplets, char **parts, char *thousands_power)
return (0);
}
char *triplet_to_word(char *triplet, t_map_entry *map)
char *triplet_to_word(char *triplet, char *triplet_word, t_map_entry *map)
{
char *triplet_word;
int triplet_len;
char *map_value;
int idx;
@ -39,6 +38,51 @@ char *triplet_to_word(char *triplet, t_map_entry *map)
char *digit_str;
char *lookup_num;
triplet_len = ft_strlen(triplet);
idx = 0;
while (triplet_len--)
{
lookup_num = malloc(sizeof(char) * MAX_DIGITS);
digit = triplet[idx] - '0';
positional_value = power(10, triplet_len) * digit;
ft_itoa(lookup_num, positional_value);
digit_str = malloc(sizeof(char) * 2);
ft_itoa(digit_str, digit);
map_value = ll_map_get_value(map, digit_str);
free(digit_str);
if (map_value == NULL)
{
free(lookup_num);
return (ft_strcpy(triplet_word, "MISSING_KEY"));
}
if (triplet_len == 2)
map_value = ll_map_get_value(map, "100");
else
map_value = ll_map_get_value(map, lookup_num);
free(lookup_num);
if (map_value == NULL)
return (ft_strcpy(triplet_word, "MISSING_KEY"));
if (triplet_len == 2)
{
digit_str = malloc(sizeof(char) * 2);
ft_itoa(digit_str, digit);
ft_strcat(triplet_word, ll_map_get_value(map, digit_str));
ft_strcat(triplet_word, " ");
free(digit_str);
}
ft_strcat(triplet_word, map_value);
if (triplet_len != 0)
ft_strcat(triplet_word, " ");
++idx;
}
return (triplet_word);
}
char *t_to_w_wrapper(char *triplet, t_map_entry *map)
{
char *map_value;
char *triplet_word;
triplet_word = malloc(sizeof(char) * MAX_LINE_LENGTH * 5);
ft_strcpy(triplet_word, "");
if (ft_atoi(triplet) < 20)
@ -50,46 +94,7 @@ char *triplet_to_word(char *triplet, t_map_entry *map)
return (triplet_word);
}
else
{
triplet_len = ft_strlen(triplet);
idx = 0;
while (triplet_len--)
{
lookup_num = malloc(sizeof(char) * MAX_DIGITS);
digit = triplet[idx] - '0';
positional_value = power(10, triplet_len) * digit;
ft_itoa(lookup_num, positional_value);
digit_str = malloc(sizeof(char) * 2);
ft_itoa(digit_str, digit);
map_value = ll_map_get_value(map, digit_str);
free(digit_str);
if (map_value == NULL)
{
free(lookup_num);
return (ft_strcpy(triplet_word, "MISSING_KEY"));
}
if (triplet_len == 2)
map_value = ll_map_get_value(map, "100");
else
map_value = ll_map_get_value(map, lookup_num);
free(lookup_num);
if (map_value == NULL)
return (ft_strcpy(triplet_word, "MISSING_KEY"));
if (triplet_len == 2)
{
digit_str = malloc(sizeof(char) * 2);
ft_itoa(digit_str, digit);
ft_strcat(triplet_word, ll_map_get_value(map, digit_str));
ft_strcat(triplet_word, " ");
free(digit_str);
}
ft_strcat(triplet_word, map_value);
if (triplet_len != 0)
ft_strcat(triplet_word, " ");
++idx;
}
}
return (triplet_word);
return (triplet_to_word(triplet, triplet_word, map));
}
int set_parts(char **parts, char **triplets, char *k_power, t_map_entry *map)
@ -107,7 +112,7 @@ int set_parts(char **parts, char **triplets, char *k_power, t_map_entry *map)
thousands_power_word = ll_map_get_value(map, k_power);
if (!thousands_power_word)
return (num_to_words_free(triplets, parts, k_power));
triplet_word = triplet_to_word(triplets[idx], map);
triplet_word = t_to_w_wrapper(triplets[idx], map);
if (!ft_strcmp(triplet_word, "MISSING_KEY"))
return (num_to_words_free(triplets, parts, k_power));
parts[idx] = malloc(sizeof(char) * MAX_LINE_LENGTH * 6);