first commit
This commit is contained in:
46
finish/rush02/ex00/Makefile
Normal file
46
finish/rush02/ex00/Makefile
Normal file
@ -0,0 +1,46 @@
|
||||
# **************************************************************************** #
|
||||
# #
|
||||
# ::: :::::::: #
|
||||
# Makefile :+: :+: :+: #
|
||||
# +:+ +:+ +:+ #
|
||||
# By: tomoron <marvin@42.fr> +#+ +:+ +#+ #
|
||||
# +#+#+#+#+#+ +#+ #
|
||||
# Created: 2023/07/28 00:35:01 by tomoron #+# #+# #
|
||||
# Updated: 2023/07/30 22:41:49 by tomoron ### ########.fr #
|
||||
# #
|
||||
# **************************************************************************** #
|
||||
|
||||
NAME = rush-02
|
||||
|
||||
CC = gcc
|
||||
|
||||
SRCS = algo.c \
|
||||
algo2.c \
|
||||
lib2.c \
|
||||
lib.c \
|
||||
main.c \
|
||||
parse2.c \
|
||||
parse.c \
|
||||
special_tens.c
|
||||
|
||||
OBJS = $(SRCS:.c=.o)
|
||||
|
||||
FLAGS = -Wall -Wextra -Werror
|
||||
|
||||
$(NAME): $(OBJS)
|
||||
$(CC) $(FLAGS) -o $(NAME) $(OBJS)
|
||||
|
||||
.c.o:
|
||||
$(CC) $(FLAGS) -c $< -o $@
|
||||
|
||||
all: $(NAME)
|
||||
|
||||
clean:
|
||||
rm -f $(OBJS)
|
||||
|
||||
fclean: clean
|
||||
rm -f $(NAME)
|
||||
|
||||
re: fclean all
|
||||
|
||||
.PHONY: clean all re fclean
|
127
finish/rush02/ex00/algo.c
Normal file
127
finish/rush02/ex00/algo.c
Normal file
@ -0,0 +1,127 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* 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");
|
||||
}
|
27
finish/rush02/ex00/algo2.c
Normal file
27
finish/rush02/ex00/algo2.c
Normal file
@ -0,0 +1,27 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* algo2.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: ttrave <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/07/30 20:14:14 by ttrave #+# #+# */
|
||||
/* Updated: 2023/07/30 20:28:15 by ttrave ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "header.h"
|
||||
|
||||
void ft_print_next(char *str, char **dict)
|
||||
{
|
||||
while (*dict != NULL)
|
||||
{
|
||||
if (ft_strcmp(str, *dict) == 0)
|
||||
{
|
||||
dict++;
|
||||
ft_putstr(*dict);
|
||||
return ;
|
||||
}
|
||||
dict += 2;
|
||||
}
|
||||
}
|
29
finish/rush02/ex00/be.dict
Normal file
29
finish/rush02/ex00/be.dict
Normal file
@ -0,0 +1,29 @@
|
||||
0: zéro
|
||||
1: un
|
||||
2: deux
|
||||
3: trois
|
||||
4: quatre
|
||||
5: cinq
|
||||
6: six
|
||||
7: sept
|
||||
8: huit
|
||||
9: neuf
|
||||
10: dix
|
||||
11: onze
|
||||
12: douze
|
||||
13: treize
|
||||
14: quatorze
|
||||
15: quinze
|
||||
16: seize
|
||||
20: vingt
|
||||
30: trente
|
||||
40: quarante
|
||||
50: cinquante
|
||||
60: soixante
|
||||
70: septante
|
||||
80: huitante
|
||||
90: nonante
|
||||
100: cent
|
||||
1000: mille
|
||||
1000000: million
|
||||
1000000000: milliard
|
32
finish/rush02/ex00/en.dict
Normal file
32
finish/rush02/ex00/en.dict
Normal file
@ -0,0 +1,32 @@
|
||||
19: nineteen
|
||||
0: zero
|
||||
1: one
|
||||
2: two
|
||||
3: three
|
||||
18: eighteen
|
||||
4: four
|
||||
5: five
|
||||
6: six
|
||||
7: seven
|
||||
8: eight
|
||||
9: nine
|
||||
10: ten
|
||||
11: eleven
|
||||
12: twelve
|
||||
13: thirteen
|
||||
14: fourteen
|
||||
15: fifteen
|
||||
16: sixteen
|
||||
20: twenty
|
||||
30: thirty
|
||||
40: forty
|
||||
50: fifty
|
||||
60: sixty
|
||||
70: seventy
|
||||
80: eighty
|
||||
90: ninety
|
||||
100: hundred
|
||||
1000: thousand
|
||||
1000000: million
|
||||
1000000000: billion
|
||||
17: seventeen
|
59
finish/rush02/ex00/header.h
Normal file
59
finish/rush02/ex00/header.h
Normal file
@ -0,0 +1,59 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* header.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: adjoly <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/07/30 16:51:35 by adjoly #+# #+# */
|
||||
/* Updated: 2023/07/30 22:36:51 by tomoron ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#ifndef HEADER_H
|
||||
# define HEADER_H
|
||||
|
||||
# include <stdlib.h>
|
||||
# include <fcntl.h>
|
||||
# include <unistd.h>
|
||||
|
||||
typedef unsigned long long int t_ulli;
|
||||
|
||||
void ft_prep_algo(char **dict, char *nbr);
|
||||
void ft_nbr_to_letters(char **dict, char *nbr, char **spec_tens, t_ulli l);
|
||||
void ft_print_units(char **dict, char unit, t_ulli *len);
|
||||
void ft_print_hundreds(char **dict, char *nbr, t_ulli *i, t_ulli len);
|
||||
void ft_print_tens(char **dict, char **spec_tens, char *nb, t_ulli *i);
|
||||
char *ft_print_group_marker(char **dict, t_ulli *i);
|
||||
int ft_marker_and_comma(char **dict, t_ulli i, t_ulli group);
|
||||
|
||||
void ft_print_next(char *str, char **dict);
|
||||
|
||||
char *ft_parse_nbr(char *nbr);
|
||||
|
||||
int ft_calc_part_len(char *str, int mode);
|
||||
int ft_copy_nb(char *res, char *file, int k);
|
||||
int ft_copy_value(char *res, char *file, int k);
|
||||
int ft_fill_dict(char **res, char *file, int i, int k);
|
||||
char **ft_parse_dict(char *filename);
|
||||
|
||||
char *ft_read_file(char *filename);
|
||||
int ft_count_parts(char *file);
|
||||
int ft_error(char **res, char *file, int i);
|
||||
|
||||
char **ft_malloc_spec_tens(char **dict);
|
||||
char **ft_fill_spec_tens(char **dict);
|
||||
int ft_is_spec_ten(char **spec_tens, char *nb);
|
||||
|
||||
t_ulli ft_strlen(char *str);
|
||||
void ft_putchar(char charac);
|
||||
void ft_putstr(char *str);
|
||||
int ft_strcmp(char *s1, char *s2);
|
||||
char *ft_strndup(char *src, t_ulli n);
|
||||
|
||||
void ft_free_n_arr_arr(char **arr, t_ulli n);
|
||||
void ft_free_arr_arr(char **arr);
|
||||
int ft_number_is_printable(char *number, char **dict);
|
||||
char *ft_cat(char ten, char unit);
|
||||
|
||||
#endif
|
75
finish/rush02/ex00/lib.c
Normal file
75
finish/rush02/ex00/lib.c
Normal file
@ -0,0 +1,75 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* lib.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: adjoly <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/07/29 12:52:50 by adjoly #+# #+# */
|
||||
/* Updated: 2023/07/30 20:02:25 by tomoron ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "header.h"
|
||||
|
||||
t_ulli ft_strlen(char *str)
|
||||
{
|
||||
t_ulli i;
|
||||
|
||||
i = 0;
|
||||
while (str[i])
|
||||
i++;
|
||||
return (i);
|
||||
}
|
||||
|
||||
void ft_putchar(char charac)
|
||||
{
|
||||
write(1, &charac, 1);
|
||||
}
|
||||
|
||||
void ft_putstr(char *str)
|
||||
{
|
||||
t_ulli i;
|
||||
|
||||
i = 0;
|
||||
while (str[i])
|
||||
{
|
||||
ft_putchar(str[i]);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
int ft_strcmp(char *s1, char *s2)
|
||||
{
|
||||
t_ulli i;
|
||||
|
||||
i = 0;
|
||||
while (s1[i] || s2[i])
|
||||
{
|
||||
if (s1[i] != s2[i])
|
||||
return (s1[i] - s2[i]);
|
||||
i++;
|
||||
}
|
||||
return (s1[i] - s2[i]);
|
||||
}
|
||||
|
||||
char *ft_strndup(char *src, t_ulli n)
|
||||
{
|
||||
char *res;
|
||||
t_ulli len;
|
||||
t_ulli i;
|
||||
|
||||
len = ft_strlen(src);
|
||||
i = 0;
|
||||
res = malloc((len + 1) + sizeof(char));
|
||||
if (res)
|
||||
{
|
||||
while (src[i] && i < n)
|
||||
{
|
||||
res[i] = src[i];
|
||||
i++;
|
||||
}
|
||||
res[i] = 0;
|
||||
}
|
||||
return (res);
|
||||
}
|
70
finish/rush02/ex00/lib2.c
Normal file
70
finish/rush02/ex00/lib2.c
Normal file
@ -0,0 +1,70 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* lib2.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: ttrave <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/07/30 16:46:55 by ttrave #+# #+# */
|
||||
/* Updated: 2023/07/30 20:41:52 by tomoron ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "header.h"
|
||||
|
||||
void ft_free_n_arr_arr(char **arr, t_ulli n)
|
||||
{
|
||||
t_ulli i;
|
||||
|
||||
i = 0;
|
||||
while (i < n)
|
||||
{
|
||||
free(arr[i]);
|
||||
i++;
|
||||
}
|
||||
free(arr);
|
||||
}
|
||||
|
||||
void ft_free_arr_arr(char **arr)
|
||||
{
|
||||
t_ulli i;
|
||||
|
||||
i = 0;
|
||||
while (arr[i])
|
||||
{
|
||||
free(arr[i]);
|
||||
i++;
|
||||
}
|
||||
free(arr);
|
||||
}
|
||||
|
||||
int ft_number_is_printable(char *number, char **dict)
|
||||
{
|
||||
t_ulli i;
|
||||
t_ulli len;
|
||||
|
||||
len = 0;
|
||||
i = 0;
|
||||
while (dict[i])
|
||||
{
|
||||
if (len < ft_strlen(dict[i]))
|
||||
len = ft_strlen(dict[i]);
|
||||
i += 2;
|
||||
}
|
||||
if (ft_strlen(number) > len + 2)
|
||||
return (0);
|
||||
return (1);
|
||||
}
|
||||
|
||||
char *ft_cat(char ten, char unit)
|
||||
{
|
||||
char *res;
|
||||
|
||||
res = malloc(3 * sizeof(int));
|
||||
if (!res)
|
||||
return (0);
|
||||
res[0] = ten;
|
||||
res[1] = unit;
|
||||
res[2] = 0;
|
||||
return (res);
|
||||
}
|
62
finish/rush02/ex00/lol.dict
Normal file
62
finish/rush02/ex00/lol.dict
Normal file
@ -0,0 +1,62 @@
|
||||
0: zero
|
||||
1: one
|
||||
2: two
|
||||
3: three
|
||||
4: four
|
||||
5: five
|
||||
6: six
|
||||
7: seven
|
||||
8: eight
|
||||
9: nine
|
||||
10: ten
|
||||
11: eleven
|
||||
12: twelve
|
||||
13: thirteen
|
||||
14: fourteen
|
||||
15: fifteen
|
||||
16: sixteen
|
||||
17: seventeen
|
||||
18: eighteen
|
||||
19: nineteen
|
||||
20: twenty
|
||||
30: thirty
|
||||
40: forty
|
||||
50: fifty
|
||||
60: sixty
|
||||
70: seventy
|
||||
80: eighty
|
||||
90: ninety
|
||||
100: hundred
|
||||
1000: thousand
|
||||
1000000: million
|
||||
1000000000: billion
|
||||
1000000000000: quadrillion
|
||||
1000000000000000: quintrillion
|
||||
1000000000000000000: sextillion
|
||||
1000000000000000000000: septillion
|
||||
1000000000000000000000000: octillion
|
||||
1000000000000000000000000000: nonillion
|
||||
1000000000000000000000000000000: decillion
|
||||
1000000000000000000000000000000000: undecillion
|
||||
1000000000000000000000000000000000000: duodecillion
|
||||
1000000000000000000000000000000000000000: tredecillion
|
||||
1000000000000000000000000000000000000000000: quatuordecillion
|
||||
1000000000000000000000000000000000000000000000: quindecillion
|
||||
1000000000000000000000000000000000000000000000000: sexdecillion
|
||||
1000000000000000000000000000000000000000000000000000: septemdecillion
|
||||
1000000000000000000000000000000000000000000000000000000: octodecillion
|
||||
1000000000000000000000000000000000000000000000000000000000: novemdecillion
|
||||
1000000000000000000000000000000000000000000000000000000000000: vigintillion
|
||||
1000000000000000000000000000000000000000000000000000000000000000: unvigintillion
|
||||
1000000000000000000000000000000000000000000000000000000000000000000: duovigintillion
|
||||
1000000000000000000000000000000000000000000000000000000000000000000000: trevigintillion
|
||||
1000000000000000000000000000000000000000000000000000000000000000000000000: quatuorvigintillion
|
||||
1000000000000000000000000000000000000000000000000000000000000000000000000000: quinvigintillion
|
||||
1000000000000000000000000000000000000000000000000000000000000000000000000000000: sexvigintillion
|
||||
1000000000000000000000000000000000000000000000000000000000000000000000000000000000: septvigintillion
|
||||
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000: octovigintillion
|
||||
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000: nonvigintillion
|
||||
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000: trigintillion
|
||||
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000: untrigintillion
|
||||
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000: duotrigintillion
|
||||
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000: googol
|
118
finish/rush02/ex00/main.c
Normal file
118
finish/rush02/ex00/main.c
Normal file
@ -0,0 +1,118 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* main.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: tomoron <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/07/30 12:35:34 by tomoron #+# #+# */
|
||||
/* Updated: 2023/07/30 22:40:03 by tomoron ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "header.h"
|
||||
|
||||
char *ft_parse_nbr(char *nbr)
|
||||
{
|
||||
char *res;
|
||||
int i;
|
||||
int j;
|
||||
int len;
|
||||
int sign;
|
||||
|
||||
i = 0;
|
||||
sign = 1;
|
||||
while (nbr[i] == '-' || nbr[i] == '+')
|
||||
{
|
||||
if (nbr[i] == '-')
|
||||
sign *= -1;
|
||||
nbr++;
|
||||
}
|
||||
len = 0;
|
||||
while (nbr[i + len] >= '0' && nbr[i + len] <= '9')
|
||||
len ++;
|
||||
res = malloc((len + 1) * sizeof(char));
|
||||
j = 0;
|
||||
while (res && nbr[i] >= '0' && nbr[i] <= '9')
|
||||
res[j++] = nbr[i++];
|
||||
if (res)
|
||||
res[j] = 0;
|
||||
return (res);
|
||||
}
|
||||
|
||||
void ft_pre_prep_algo(char *filename, char *nbr)
|
||||
{
|
||||
char **dict;
|
||||
char *number;
|
||||
|
||||
dict = ft_parse_dict(filename);
|
||||
if (!dict)
|
||||
{
|
||||
ft_putstr("Dict Error\n");
|
||||
return ;
|
||||
}
|
||||
number = ft_parse_nbr(nbr);
|
||||
if (number && !ft_number_is_printable(number, dict))
|
||||
{
|
||||
ft_free_arr_arr(dict);
|
||||
if (number)
|
||||
free(number);
|
||||
return ;
|
||||
}
|
||||
ft_prep_algo(dict, number);
|
||||
ft_free_arr_arr(dict);
|
||||
free(number);
|
||||
}
|
||||
|
||||
char *ft_realloc(char c, char *str)
|
||||
{
|
||||
t_ulli len;
|
||||
t_ulli i;
|
||||
char *new_str;
|
||||
|
||||
len = ft_strlen(str);
|
||||
i = 0;
|
||||
new_str = malloc((len + 2) * sizeof(char));
|
||||
while (i < len)
|
||||
{
|
||||
new_str[i] = str[i];
|
||||
i++;
|
||||
}
|
||||
new_str[i] = c;
|
||||
new_str[i + 1] = 0;
|
||||
free(str);
|
||||
return (new_str);
|
||||
}
|
||||
|
||||
void stdin_mode(char *filename)
|
||||
{
|
||||
char c;
|
||||
char *str;
|
||||
|
||||
str = malloc(1 * sizeof(char));
|
||||
str[0] = 0;
|
||||
while (read(0, &c, 1))
|
||||
{
|
||||
if (c != '\n')
|
||||
str = ft_realloc(c, str);
|
||||
else
|
||||
{
|
||||
ft_pre_prep_algo(filename, str);
|
||||
free(str);
|
||||
str = malloc(1 * sizeof(char));
|
||||
str[0] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
char *filename;
|
||||
|
||||
filename = "en.dict";
|
||||
if (argc <= 1)
|
||||
stdin_mode(filename);
|
||||
else if (argc == 2)
|
||||
ft_pre_prep_algo(filename, argv[1]);
|
||||
else if (argc == 3)
|
||||
ft_pre_prep_algo(argv[1], argv[2]);
|
||||
}
|
153
finish/rush02/ex00/parse.c
Normal file
153
finish/rush02/ex00/parse.c
Normal file
@ -0,0 +1,153 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* parse.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: tomoron <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/07/29 11:14:01 by tomoron #+# #+# */
|
||||
/* Updated: 2023/07/30 20:22:03 by tomoron ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "header.h"
|
||||
|
||||
int ft_calc_part_len(char *str, int mode)
|
||||
{
|
||||
int res;
|
||||
|
||||
res = 0;
|
||||
if (mode == 1)
|
||||
{
|
||||
while (*str >= '0' && *str <= '9')
|
||||
{
|
||||
res++;
|
||||
str++;
|
||||
}
|
||||
}
|
||||
if (mode == 2)
|
||||
{
|
||||
while (*str >= 32 && *str <= 126)
|
||||
{
|
||||
res++;
|
||||
while (*str == ' ')
|
||||
str++;
|
||||
str++;
|
||||
}
|
||||
}
|
||||
return (res + 1);
|
||||
}
|
||||
|
||||
int ft_copy_nb(char *res, char *file, int k)
|
||||
{
|
||||
int j;
|
||||
|
||||
j = 0;
|
||||
while (file[k] >= '0' && file[k] <= '9')
|
||||
{
|
||||
res[j] = file[k];
|
||||
k++;
|
||||
j++;
|
||||
}
|
||||
res[j] = 0;
|
||||
while (file[k] == ' ')
|
||||
k++;
|
||||
if (file[k] != ':' || j == 0)
|
||||
return (0);
|
||||
k++;
|
||||
while (file[k] == ' ')
|
||||
k++;
|
||||
return (k);
|
||||
}
|
||||
|
||||
int ft_copy_value(char *res, char *file, int k)
|
||||
{
|
||||
int j;
|
||||
|
||||
j = 0;
|
||||
while (file[k] >= 32 && file[k] <= 126)
|
||||
{
|
||||
res[j] = file[k];
|
||||
if (file[k] == ' ')
|
||||
{
|
||||
while (file[k] == ' ')
|
||||
k++;
|
||||
if (file[k] == '\0' || file[k] == '\n')
|
||||
j--;
|
||||
k--;
|
||||
}
|
||||
k++;
|
||||
j++;
|
||||
}
|
||||
res[j] = 0;
|
||||
if ((file[k] != '\n' && file[k] != '\0') || j == 0)
|
||||
return (0);
|
||||
while (file[k] == '\n')
|
||||
k++;
|
||||
return (k);
|
||||
}
|
||||
|
||||
int ft_fill_dict(char **res, char *file, int i, int k)
|
||||
{
|
||||
while (file[k] == ' ')
|
||||
k++;
|
||||
res[i] = malloc(ft_calc_part_len(file + k, 1) * sizeof(char));
|
||||
if (!res[i])
|
||||
return (ft_error(res, file, i - 1));
|
||||
k = ft_copy_nb(res[i], file, k);
|
||||
if (!k)
|
||||
return (ft_error(res, file, i));
|
||||
i++;
|
||||
res[i] = malloc(ft_calc_part_len(file + k, 2) * sizeof(char));
|
||||
if (!res[i])
|
||||
return (ft_error(res, file, i - 1));
|
||||
k = ft_copy_value(res[i], file, k);
|
||||
if (!k)
|
||||
return (ft_error(res, file, i));
|
||||
return (k);
|
||||
}
|
||||
|
||||
char **ft_parse_dict(char *filename)
|
||||
{
|
||||
char **res;
|
||||
char *file;
|
||||
int i;
|
||||
int k;
|
||||
|
||||
file = ft_read_file(filename);
|
||||
if (!file)
|
||||
return (0);
|
||||
res = malloc(ft_count_parts(file) * sizeof(char *));
|
||||
if (!res)
|
||||
return (0);
|
||||
k = 0;
|
||||
while (file[k] == '\n')
|
||||
k++;
|
||||
i = 0;
|
||||
while (file[k])
|
||||
{
|
||||
k = ft_fill_dict(res, file, i, k);
|
||||
if (!k)
|
||||
return (0);
|
||||
i += 2;
|
||||
}
|
||||
res[i] = 0;
|
||||
free(file);
|
||||
return (res);
|
||||
}
|
||||
|
||||
/*int main(void)
|
||||
{
|
||||
char **test;
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
test = ft_parse_dict("lol.dict");
|
||||
while (test && test[i])
|
||||
{
|
||||
printf("%s, ", test[i]);
|
||||
fflush(stdout);
|
||||
i++;
|
||||
}
|
||||
return (0);
|
||||
}*/
|
79
finish/rush02/ex00/parse2.c
Normal file
79
finish/rush02/ex00/parse2.c
Normal file
@ -0,0 +1,79 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* parse2.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: tomoron <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/07/29 17:38:13 by tomoron #+# #+# */
|
||||
/* Updated: 2023/07/30 22:09:51 by tomoron ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "header.h"
|
||||
|
||||
char *ft_read_file(char *filename)
|
||||
{
|
||||
char c;
|
||||
int file;
|
||||
int len;
|
||||
char *res;
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
file = open(filename, O_RDONLY);
|
||||
len = 0;
|
||||
if (file == -1)
|
||||
return (0);
|
||||
while (read(file, &c, 1))
|
||||
len++;
|
||||
close(file);
|
||||
res = malloc((len + 1) * sizeof(char));
|
||||
file = open(filename, O_RDONLY);
|
||||
if (file == -1 || !res)
|
||||
return (0);
|
||||
while (read(file, &c, 1))
|
||||
res[i++] = c;
|
||||
res[i] = 0;
|
||||
close(file);
|
||||
return (res);
|
||||
}
|
||||
|
||||
int ft_count_parts(char *file)
|
||||
{
|
||||
int res;
|
||||
int sem_found;
|
||||
|
||||
res = 0;
|
||||
while (*file == '\n')
|
||||
file++;
|
||||
while (*file)
|
||||
{
|
||||
sem_found = 0;
|
||||
while (*file != '\n' && *file)
|
||||
{
|
||||
file++;
|
||||
if (!sem_found && *file == ':')
|
||||
{
|
||||
sem_found = 1;
|
||||
res++;
|
||||
}
|
||||
}
|
||||
res++;
|
||||
while (*file == '\n')
|
||||
file++;
|
||||
}
|
||||
return (res + 1);
|
||||
}
|
||||
|
||||
int ft_error(char **res, char *file, int i)
|
||||
{
|
||||
while (i >= 0)
|
||||
{
|
||||
free(res[i]);
|
||||
i--;
|
||||
}
|
||||
free(res);
|
||||
free(file);
|
||||
return (0);
|
||||
}
|
77
finish/rush02/ex00/special_tens.c
Normal file
77
finish/rush02/ex00/special_tens.c
Normal file
@ -0,0 +1,77 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* special_tens.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: ttrave <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/07/29 12:29:42 by ttrave #+# #+# */
|
||||
/* Updated: 2023/07/30 21:52:07 by ttrave ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "header.h"
|
||||
|
||||
char **ft_malloc_spec_tens(char **dict)
|
||||
{
|
||||
char **spec_tens;
|
||||
t_ulli i;
|
||||
t_ulli size;
|
||||
|
||||
size = 0;
|
||||
i = 0;
|
||||
while (dict[i])
|
||||
{
|
||||
if (dict[i][0] == '1' && dict[i][1] >= '0' && dict[i][1] <= '9'
|
||||
&& ft_strlen(dict[i]) == 2)
|
||||
size++;
|
||||
i++;
|
||||
}
|
||||
spec_tens = malloc((size + 1) * sizeof(char *));
|
||||
if (spec_tens != NULL)
|
||||
spec_tens[size] = NULL;
|
||||
return (spec_tens);
|
||||
}
|
||||
|
||||
char **ft_fill_spec_tens(char **dict)
|
||||
{
|
||||
char **spec_tens;
|
||||
t_ulli i;
|
||||
t_ulli j;
|
||||
|
||||
i = -1;
|
||||
j = 0;
|
||||
spec_tens = ft_malloc_spec_tens(dict);
|
||||
if (spec_tens == NULL)
|
||||
return (spec_tens);
|
||||
while (dict[++i])
|
||||
{
|
||||
if (dict[i][0] == '1' && dict[i][1] >= '0' && dict[i][1] <= '9'
|
||||
&& ft_strlen(dict[i]) == 2)
|
||||
{
|
||||
spec_tens[j] = malloc(2 * sizeof(char));
|
||||
if (spec_tens[j] == NULL)
|
||||
{
|
||||
ft_free_n_arr_arr(spec_tens, j + 1);
|
||||
return (NULL);
|
||||
}
|
||||
spec_tens[j] = dict[i];
|
||||
j++;
|
||||
}
|
||||
}
|
||||
return (spec_tens);
|
||||
}
|
||||
|
||||
int ft_is_spec_ten(char **spec_tens, char *nb)
|
||||
{
|
||||
t_ulli i;
|
||||
|
||||
i = 0;
|
||||
while (spec_tens[i])
|
||||
{
|
||||
if (ft_strcmp(spec_tens[i], nb) == 0)
|
||||
return (0);
|
||||
i++;
|
||||
}
|
||||
return (1);
|
||||
}
|
Reference in New Issue
Block a user