1
0
This repository has been archived on 2024-10-25. You can view files and clone it, but cannot push or open issues or pull requests.
2023-08-03 23:16:27 +02:00

128 lines
3.0 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* algo.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: ttrave <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/07/29 17:23:56 by ttrave #+# #+# */
/* Updated: 2023/07/30 22:35:56 by tomoron ### ########.fr */
/* */
/* ************************************************************************** */
#include "header.h"
void ft_prep_algo(char **dict, char *nbr)
{
t_ulli len;
char **spec_tens;
len = ft_strlen(nbr);
spec_tens = ft_fill_spec_tens(dict);
if (spec_tens == NULL)
{
ft_putstr("Error\n");
return ;
}
ft_nbr_to_letters(dict, nbr, spec_tens, len);
}
void ft_nbr_to_letters(char **dict, char *nbr, char **spec_tens, t_ulli l)
{
t_ulli v;
t_ulli *i;
t_ulli group;
char *last_group_marker;
char *nb;
group = l / 3;
i = &v;
*i = l;
while (*i > 0)
{
if (*i % 3 == 0)
ft_print_hundreds(dict, nbr, i, l);
else if (*i % 3 == 2)
{
nb = ft_cat(nbr[l - *i], nbr[l - *i + 1]);
if (nb == NULL)
return ;
ft_print_tens(dict, spec_tens, nb, i);
}
else if (*i % 3 == 1)
ft_print_units(dict, nbr[l - *i], i);
last_group_marker = ft_print_group_marker(dict, i);
if (last_group_marker == NULL)
{
ft_free_arr_arr(spec_tens);
ft_putstr("Error\n");
return ;
}
if (*i % 3 == 1 && *i > 1)
{
ft_putchar(',');
group--;
}
}
ft_putchar('\n');
free(spec_tens);
}
void ft_print_units(char **dict, char unit, t_ulli *i)
{
ft_print_next(ft_strndup(&unit, 1), dict);
if (*i > 0)
ft_putchar(' ');
(*i)--;
}
void ft_print_hundreds(char **dict, char *nbr, t_ulli *i, t_ulli len)
{
ft_print_next(ft_strndup(&nbr[len - *i], 1), dict);
ft_putchar(' ');
ft_print_next("100", dict);
if (nbr[len - *i + 1] != '0' || nbr[len - *i + 2] != '0')
ft_putstr(" and ");
(*i)--;
}
void ft_print_tens(char **dict, char **spec_tens, char *nb, t_ulli *i)
{
if (ft_is_spec_ten(spec_tens, nb) == 0)
{
ft_print_next(nb, dict);
(*i) -= 2;
if (*i > 2)
ft_putchar(' ');
}
else
{
ft_print_next(nb, dict);
ft_putchar('-');
(*i)--;
}
}
char *ft_print_group_marker(char **dict, t_ulli *len)
{
char *group_marker;
t_ulli i;
i = 1;
if (*len % 3 != 1 || *len < 4)
return ("1");
group_marker = malloc((*len + 1) * sizeof(char));
if (group_marker == NULL)
return (group_marker);
group_marker[*len] = '\0';
group_marker[0] = '1';
while (group_marker[i])
{
group_marker[i] = '0';
i++;
}
ft_print_next(group_marker, dict);
free(group_marker);
return ("1");
}