From 786310898d8ee582179d913b3e4d9c9bc66c98fb Mon Sep 17 00:00:00 2001 From: tomoron Date: Wed, 3 Dec 2025 17:04:21 +0100 Subject: [PATCH] change Makefile and add day 2 --- 2025/2/Makefile | 69 ++++++++++ 2025/2/a.out | Bin 0 -> 23896 bytes 2025/2/libft/Makefile | 100 +++++++++++++++ 2025/2/libft/ft_atoi.c | 35 ++++++ 2025/2/libft/ft_atoi.o | Bin 0 -> 3224 bytes 2025/2/libft/ft_bzero.c | 26 ++++ 2025/2/libft/ft_bzero.o | Bin 0 -> 3192 bytes 2025/2/libft/ft_calloc.c | 31 +++++ 2025/2/libft/ft_calloc.o | Bin 0 -> 3592 bytes 2025/2/libft/ft_free_str_arr.c | 27 ++++ 2025/2/libft/ft_free_str_arr.o | Bin 0 -> 3080 bytes 2025/2/libft/ft_isalnum.c | 19 +++ 2025/2/libft/ft_isalnum.o | Bin 0 -> 2784 bytes 2025/2/libft/ft_isalpha.c | 18 +++ 2025/2/libft/ft_isalpha.o | Bin 0 -> 2760 bytes 2025/2/libft/ft_isascii.c | 18 +++ 2025/2/libft/ft_isascii.o | Bin 0 -> 2736 bytes 2025/2/libft/ft_isdigit.c | 18 +++ 2025/2/libft/ft_isdigit.o | Bin 0 -> 2736 bytes 2025/2/libft/ft_isprint.c | 18 +++ 2025/2/libft/ft_isprint.o | Bin 0 -> 2736 bytes 2025/2/libft/ft_itoa.c | 60 +++++++++ 2025/2/libft/ft_itoa.o | Bin 0 -> 3824 bytes 2025/2/libft/ft_lstadd_back.c | 27 ++++ 2025/2/libft/ft_lstadd_front.c | 19 +++ 2025/2/libft/ft_lstclear.c | 27 ++++ 2025/2/libft/ft_lstdelone.c | 20 +++ 2025/2/libft/ft_lstiter.c | 21 ++++ 2025/2/libft/ft_lstlast.c | 19 +++ 2025/2/libft/ft_lstmap.c | 41 ++++++ 2025/2/libft/ft_lstnew.c | 25 ++++ 2025/2/libft/ft_lstsize.c | 26 ++++ 2025/2/libft/ft_memchr.c | 28 +++++ 2025/2/libft/ft_memchr.o | Bin 0 -> 3400 bytes 2025/2/libft/ft_memcmp.c | 28 +++++ 2025/2/libft/ft_memcmp.o | Bin 0 -> 3536 bytes 2025/2/libft/ft_memcpy.c | 29 +++++ 2025/2/libft/ft_memcpy.o | Bin 0 -> 3424 bytes 2025/2/libft/ft_memmove.c | 32 +++++ 2025/2/libft/ft_memmove.o | Bin 0 -> 3560 bytes 2025/2/libft/ft_memset.c | 27 ++++ 2025/2/libft/ft_memset.o | Bin 0 -> 3336 bytes 2025/2/libft/ft_printf/Makefile | 52 ++++++++ 2025/2/libft/ft_printf/ft_convert.c | 85 +++++++++++++ 2025/2/libft/ft_printf/ft_convert.o | Bin 0 -> 3968 bytes 2025/2/libft/ft_printf/ft_isdigit.c | 18 +++ 2025/2/libft/ft_printf/ft_isdigit.o | Bin 0 -> 984 bytes 2025/2/libft/ft_printf/ft_parse_arg.c | 89 +++++++++++++ 2025/2/libft/ft_printf/ft_parse_arg.o | Bin 0 -> 3160 bytes 2025/2/libft/ft_printf/ft_print_hex_ptr.c | 97 ++++++++++++++ 2025/2/libft/ft_printf/ft_print_hex_ptr.o | Bin 0 -> 3520 bytes 2025/2/libft/ft_printf/ft_print_int.c | 99 +++++++++++++++ 2025/2/libft/ft_printf/ft_print_int.o | Bin 0 -> 3000 bytes .../2/libft/ft_printf/ft_print_unsigned_int.c | 55 ++++++++ .../2/libft/ft_printf/ft_print_unsigned_int.o | Bin 0 -> 1840 bytes 2025/2/libft/ft_printf/ft_printf.c | 67 ++++++++++ 2025/2/libft/ft_printf/ft_printf.h | 46 +++++++ 2025/2/libft/ft_printf/ft_printf.o | Bin 0 -> 2104 bytes 2025/2/libft/ft_printf/ft_protected_atoi.c | 37 ++++++ 2025/2/libft/ft_printf/ft_protected_atoi.o | Bin 0 -> 1240 bytes 2025/2/libft/ft_printf/ft_putchar.c | 18 +++ 2025/2/libft/ft_printf/ft_putchar.o | Bin 0 -> 1120 bytes 2025/2/libft/ft_printf/ft_putstr.c | 19 +++ 2025/2/libft/ft_printf/ft_putstr.o | Bin 0 -> 1224 bytes 2025/2/libft/ft_printf/ft_strlen.c | 22 ++++ 2025/2/libft/ft_printf/ft_strlen.o | Bin 0 -> 992 bytes 2025/2/libft/ft_printf/ft_write_str_part.c | 26 ++++ 2025/2/libft/ft_printf/ft_write_str_part.o | Bin 0 -> 1224 bytes 2025/2/libft/ft_printf/libftprintf.a | Bin 0 -> 25874 bytes 2025/2/libft/ft_putchar_fd.c | 17 +++ 2025/2/libft/ft_putchar_fd.o | Bin 0 -> 2936 bytes 2025/2/libft/ft_putendl_fd.c | 21 ++++ 2025/2/libft/ft_putendl_fd.o | Bin 0 -> 3392 bytes 2025/2/libft/ft_putnbr_fd.c | 33 +++++ 2025/2/libft/ft_putnbr_fd.o | Bin 0 -> 3632 bytes 2025/2/libft/ft_putstr_fd.c | 18 +++ 2025/2/libft/ft_putstr_fd.o | Bin 0 -> 3032 bytes 2025/2/libft/ft_set_color.c | 23 ++++ 2025/2/libft/ft_set_color.o | Bin 0 -> 3680 bytes 2025/2/libft/ft_split.c | 73 +++++++++++ 2025/2/libft/ft_split.o | Bin 0 -> 4872 bytes 2025/2/libft/ft_split_set.c | 84 +++++++++++++ 2025/2/libft/ft_split_set.o | Bin 0 -> 5512 bytes 2025/2/libft/ft_strchr.c | 30 +++++ 2025/2/libft/ft_strchr.o | Bin 0 -> 3136 bytes 2025/2/libft/ft_strcmp.c | 34 +++++ 2025/2/libft/ft_strcmp.o | Bin 0 -> 3896 bytes 2025/2/libft/ft_strdup.c | 36 ++++++ 2025/2/libft/ft_strdup.o | Bin 0 -> 3304 bytes 2025/2/libft/ft_striteri.c | 23 ++++ 2025/2/libft/ft_striteri.o | Bin 0 -> 3048 bytes 2025/2/libft/ft_strjoin.c | 63 ++++++++++ 2025/2/libft/ft_strjoin.o | Bin 0 -> 3960 bytes 2025/2/libft/ft_strlcat.c | 38 ++++++ 2025/2/libft/ft_strlcat.o | Bin 0 -> 3904 bytes 2025/2/libft/ft_strlcpy.c | 32 +++++ 2025/2/libft/ft_strlcpy.o | Bin 0 -> 3616 bytes 2025/2/libft/ft_strlen.c | 22 ++++ 2025/2/libft/ft_strlen.o | Bin 0 -> 3136 bytes 2025/2/libft/ft_strmapi.c | 33 +++++ 2025/2/libft/ft_strmapi.o | Bin 0 -> 3424 bytes 2025/2/libft/ft_strnstr.c | 39 ++++++ 2025/2/libft/ft_strnstr.o | Bin 0 -> 3840 bytes 2025/2/libft/ft_strrchr.c | 30 +++++ 2025/2/libft/ft_strrchr.o | Bin 0 -> 3104 bytes 2025/2/libft/ft_strtrim.c | 78 ++++++++++++ 2025/2/libft/ft_strtrim.o | Bin 0 -> 4416 bytes 2025/2/libft/ft_substr.c | 37 ++++++ 2025/2/libft/ft_substr.o | Bin 0 -> 3848 bytes 2025/2/libft/ft_swap.c | 20 +++ 2025/2/libft/ft_swap.o | Bin 0 -> 2848 bytes 2025/2/libft/ft_tolower.c | 18 +++ 2025/2/libft/ft_tolower.o | Bin 0 -> 2728 bytes 2025/2/libft/ft_toupper.c | 18 +++ 2025/2/libft/ft_toupper.o | Bin 0 -> 2728 bytes 2025/2/libft/gnl/Makefile | 42 +++++++ 2025/2/libft/gnl/get_next_line_bonus.c | 113 +++++++++++++++++ 2025/2/libft/gnl/get_next_line_bonus.h | 46 +++++++ 2025/2/libft/gnl/get_next_line_bonus.o | Bin 0 -> 2976 bytes 2025/2/libft/gnl/get_next_line_utils_bonus.c | 119 ++++++++++++++++++ 2025/2/libft/gnl/get_next_line_utils_bonus.o | Bin 0 -> 2680 bytes 2025/2/libft/gnl/gnl.a | Bin 0 -> 31868 bytes 2025/2/libft/libft.a | Bin 0 -> 162604 bytes 2025/2/libft/libft.h | 77 ++++++++++++ 2025/2/main.c | 67 ++++++++++ 2025/2/main.o | Bin 0 -> 5808 bytes 2025/2/part1.c | 71 +++++++++++ 2025/2/part1.o | Bin 0 -> 4392 bytes 2025/2/part2.c | 79 ++++++++++++ 2025/2/part2.o | Bin 0 -> 5024 bytes 2025/2/test | 1 + 2025/Makefile | 10 +- Makefile | 10 +- 133 files changed, 2983 insertions(+), 10 deletions(-) create mode 100644 2025/2/Makefile create mode 100755 2025/2/a.out create mode 100755 2025/2/libft/Makefile create mode 100755 2025/2/libft/ft_atoi.c create mode 100644 2025/2/libft/ft_atoi.o create mode 100755 2025/2/libft/ft_bzero.c create mode 100644 2025/2/libft/ft_bzero.o create mode 100755 2025/2/libft/ft_calloc.c create mode 100644 2025/2/libft/ft_calloc.o create mode 100755 2025/2/libft/ft_free_str_arr.c create mode 100644 2025/2/libft/ft_free_str_arr.o create mode 100755 2025/2/libft/ft_isalnum.c create mode 100644 2025/2/libft/ft_isalnum.o create mode 100755 2025/2/libft/ft_isalpha.c create mode 100644 2025/2/libft/ft_isalpha.o create mode 100755 2025/2/libft/ft_isascii.c create mode 100644 2025/2/libft/ft_isascii.o create mode 100755 2025/2/libft/ft_isdigit.c create mode 100644 2025/2/libft/ft_isdigit.o create mode 100755 2025/2/libft/ft_isprint.c create mode 100644 2025/2/libft/ft_isprint.o create mode 100755 2025/2/libft/ft_itoa.c create mode 100644 2025/2/libft/ft_itoa.o create mode 100755 2025/2/libft/ft_lstadd_back.c create mode 100755 2025/2/libft/ft_lstadd_front.c create mode 100755 2025/2/libft/ft_lstclear.c create mode 100755 2025/2/libft/ft_lstdelone.c create mode 100755 2025/2/libft/ft_lstiter.c create mode 100755 2025/2/libft/ft_lstlast.c create mode 100755 2025/2/libft/ft_lstmap.c create mode 100755 2025/2/libft/ft_lstnew.c create mode 100755 2025/2/libft/ft_lstsize.c create mode 100755 2025/2/libft/ft_memchr.c create mode 100644 2025/2/libft/ft_memchr.o create mode 100755 2025/2/libft/ft_memcmp.c create mode 100644 2025/2/libft/ft_memcmp.o create mode 100755 2025/2/libft/ft_memcpy.c create mode 100644 2025/2/libft/ft_memcpy.o create mode 100755 2025/2/libft/ft_memmove.c create mode 100644 2025/2/libft/ft_memmove.o create mode 100755 2025/2/libft/ft_memset.c create mode 100644 2025/2/libft/ft_memset.o create mode 100755 2025/2/libft/ft_printf/Makefile create mode 100755 2025/2/libft/ft_printf/ft_convert.c create mode 100644 2025/2/libft/ft_printf/ft_convert.o create mode 100755 2025/2/libft/ft_printf/ft_isdigit.c create mode 100644 2025/2/libft/ft_printf/ft_isdigit.o create mode 100755 2025/2/libft/ft_printf/ft_parse_arg.c create mode 100644 2025/2/libft/ft_printf/ft_parse_arg.o create mode 100755 2025/2/libft/ft_printf/ft_print_hex_ptr.c create mode 100644 2025/2/libft/ft_printf/ft_print_hex_ptr.o create mode 100755 2025/2/libft/ft_printf/ft_print_int.c create mode 100644 2025/2/libft/ft_printf/ft_print_int.o create mode 100755 2025/2/libft/ft_printf/ft_print_unsigned_int.c create mode 100644 2025/2/libft/ft_printf/ft_print_unsigned_int.o create mode 100755 2025/2/libft/ft_printf/ft_printf.c create mode 100755 2025/2/libft/ft_printf/ft_printf.h create mode 100644 2025/2/libft/ft_printf/ft_printf.o create mode 100755 2025/2/libft/ft_printf/ft_protected_atoi.c create mode 100644 2025/2/libft/ft_printf/ft_protected_atoi.o create mode 100755 2025/2/libft/ft_printf/ft_putchar.c create mode 100644 2025/2/libft/ft_printf/ft_putchar.o create mode 100755 2025/2/libft/ft_printf/ft_putstr.c create mode 100644 2025/2/libft/ft_printf/ft_putstr.o create mode 100755 2025/2/libft/ft_printf/ft_strlen.c create mode 100644 2025/2/libft/ft_printf/ft_strlen.o create mode 100755 2025/2/libft/ft_printf/ft_write_str_part.c create mode 100644 2025/2/libft/ft_printf/ft_write_str_part.o create mode 100644 2025/2/libft/ft_printf/libftprintf.a create mode 100755 2025/2/libft/ft_putchar_fd.c create mode 100644 2025/2/libft/ft_putchar_fd.o create mode 100755 2025/2/libft/ft_putendl_fd.c create mode 100644 2025/2/libft/ft_putendl_fd.o create mode 100755 2025/2/libft/ft_putnbr_fd.c create mode 100644 2025/2/libft/ft_putnbr_fd.o create mode 100755 2025/2/libft/ft_putstr_fd.c create mode 100644 2025/2/libft/ft_putstr_fd.o create mode 100755 2025/2/libft/ft_set_color.c create mode 100644 2025/2/libft/ft_set_color.o create mode 100755 2025/2/libft/ft_split.c create mode 100644 2025/2/libft/ft_split.o create mode 100755 2025/2/libft/ft_split_set.c create mode 100644 2025/2/libft/ft_split_set.o create mode 100755 2025/2/libft/ft_strchr.c create mode 100644 2025/2/libft/ft_strchr.o create mode 100755 2025/2/libft/ft_strcmp.c create mode 100644 2025/2/libft/ft_strcmp.o create mode 100755 2025/2/libft/ft_strdup.c create mode 100644 2025/2/libft/ft_strdup.o create mode 100755 2025/2/libft/ft_striteri.c create mode 100644 2025/2/libft/ft_striteri.o create mode 100755 2025/2/libft/ft_strjoin.c create mode 100644 2025/2/libft/ft_strjoin.o create mode 100755 2025/2/libft/ft_strlcat.c create mode 100644 2025/2/libft/ft_strlcat.o create mode 100755 2025/2/libft/ft_strlcpy.c create mode 100644 2025/2/libft/ft_strlcpy.o create mode 100755 2025/2/libft/ft_strlen.c create mode 100644 2025/2/libft/ft_strlen.o create mode 100755 2025/2/libft/ft_strmapi.c create mode 100644 2025/2/libft/ft_strmapi.o create mode 100755 2025/2/libft/ft_strnstr.c create mode 100644 2025/2/libft/ft_strnstr.o create mode 100755 2025/2/libft/ft_strrchr.c create mode 100644 2025/2/libft/ft_strrchr.o create mode 100755 2025/2/libft/ft_strtrim.c create mode 100644 2025/2/libft/ft_strtrim.o create mode 100755 2025/2/libft/ft_substr.c create mode 100644 2025/2/libft/ft_substr.o create mode 100755 2025/2/libft/ft_swap.c create mode 100644 2025/2/libft/ft_swap.o create mode 100755 2025/2/libft/ft_tolower.c create mode 100644 2025/2/libft/ft_tolower.o create mode 100755 2025/2/libft/ft_toupper.c create mode 100644 2025/2/libft/ft_toupper.o create mode 100755 2025/2/libft/gnl/Makefile create mode 100755 2025/2/libft/gnl/get_next_line_bonus.c create mode 100755 2025/2/libft/gnl/get_next_line_bonus.h create mode 100644 2025/2/libft/gnl/get_next_line_bonus.o create mode 100755 2025/2/libft/gnl/get_next_line_utils_bonus.c create mode 100644 2025/2/libft/gnl/get_next_line_utils_bonus.o create mode 100644 2025/2/libft/gnl/gnl.a create mode 100644 2025/2/libft/libft.a create mode 100755 2025/2/libft/libft.h create mode 100644 2025/2/main.c create mode 100644 2025/2/main.o create mode 100644 2025/2/part1.c create mode 100644 2025/2/part1.o create mode 100644 2025/2/part2.c create mode 100644 2025/2/part2.o create mode 100644 2025/2/test diff --git a/2025/2/Makefile b/2025/2/Makefile new file mode 100644 index 0000000..09799e4 --- /dev/null +++ b/2025/2/Makefile @@ -0,0 +1,69 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: tomoron +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2024/07/17 15:48:36 by tomoron #+# #+# # +# Updated: 2025/12/02 14:50:12 by tomoron ### ########.fr # +# # +# **************************************************************************** # + +SRCS = main.c\ + part1.c\ + part2.c + +OBJS = $(SRCS:.c=.o) + +FLAGS = -Wextra -Werror -Wall -g + +LIB = libft/libft.a + +all: $(LIB) a.out test + cp test cur_input + ./a.out + +f: $(LIB) a.out input + cp input cur_input + ./a.out + +test: + touch test + +input: + touch input + +cp: + cp part1.c part2.c + sed -i 's/resolve_part1/resolve_part2/g' part2.c + +$(LIB): libft + make -C libft + +libft: + cp -r ../../libft . + +main.c: + cp ../../main.c . + +part1.c: + cp ../../part1.c . + +part2.c: + cp ../../part2.c . + +a.out: main.c $(OBJS) $(LIB) + clang $(FLAGS) $(OBJS) $(LIB) -lm + +clean: + rm -rf $(OBJS) + rm -rf libft + +fclean: clean + rm -rf a.out + +.c.o: + clang $(FLAGS) -c $< -o $@ + +.PHONY: t all clean fclean cp diff --git a/2025/2/a.out b/2025/2/a.out new file mode 100755 index 0000000000000000000000000000000000000000..425d1c1add3692f5f2cd434be8d021c4a7cdfe67 GIT binary patch literal 23896 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 literal 0 HcmV?d00001 diff --git a/2025/2/libft/Makefile b/2025/2/libft/Makefile new file mode 100755 index 0000000..142018a --- /dev/null +++ b/2025/2/libft/Makefile @@ -0,0 +1,100 @@ +# **************************************************************************** # +# # ::: :::::::: # Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: tomoron +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2023/07/28 00:35:01 by tomoron #+# #+# # +# Updated: 2024/07/17 23:19:01 by tomoron ### ########.fr # +# # +# **************************************************************************** # + +NAME = libft.a + +CC = cc + +SRCS = ft_atoi.c\ + ft_bzero.c\ + ft_calloc.c\ + ft_swap.c\ + ft_isalnum.c\ + ft_isalpha.c\ + ft_isascii.c\ + ft_isdigit.c\ + ft_isprint.c\ + ft_itoa.c\ + ft_memchr.c\ + ft_memcmp.c\ + ft_memcpy.c\ + ft_memmove.c\ + ft_memset.c\ + ft_putchar_fd.c\ + ft_putendl_fd.c\ + ft_putnbr_fd.c\ + ft_putstr_fd.c\ + ft_split.c\ + ft_strchr.c\ + ft_strdup.c\ + ft_striteri.c\ + ft_strjoin.c\ + ft_strlcat.c\ + ft_strlcpy.c\ + ft_strlen.c\ + ft_strmapi.c\ + ft_strcmp.c\ + ft_strnstr.c\ + ft_strrchr.c\ + ft_strtrim.c\ + ft_substr.c\ + ft_tolower.c\ + ft_toupper.c\ + ft_split_set.c\ + ft_free_str_arr.c\ + ft_set_color.c + +SRCS_BONUS = ft_lstnew.c\ + ft_lstadd_front.c\ + ft_lstsize.c\ + ft_lstlast.c\ + ft_lstadd_back.c\ + ft_lstdelone.c\ + ft_lstclear.c\ + ft_lstiter.c\ + ft_lstmap.c\ + +OBJS = $(SRCS:.c=.o) +OBJS_BONUS = $(SRCS_BONUS:.c=.o) + +FLAGS = -Wall -Wextra -Werror -g + +all: $(NAME) + + +$(NAME): ft_printf $(OBJS) + make --no-print-directory -C ./ft_printf + cp ./ft_printf/libftprintf.a ./gnl/gnl.a + make --no-print-directory -C ./gnl + cp ./gnl/gnl.a ./$(NAME) + ar rcs $(NAME) $(OBJS) + +.c.o: + $(CC) $(FLAGS) -c $< -o $@ + +bonus: $(OBJS) $(OBJS_BONUS) + ar rcs $(NAME) $(OBJS) $(OBJS_BONUS) + +clean: + rm -f $(OBJS) $(OBJS_BONUS) + make --no-print-directory -C ./ft_printf fclean + make --no-print-directory -C ./gnl fclean + +fclean: clean + rm -f $(NAME) + +re: fclean all + +so: + $(CC) -nostartfiles -fPIC $(FLAGS) $(SRCS) + gcc -nostartfiles -shared -o libft.so $(OBJS) $(OBJS_BONUS) + + +.PHONY: bonus so clean all re fclean diff --git a/2025/2/libft/ft_atoi.c b/2025/2/libft/ft_atoi.c new file mode 100755 index 0000000..3b0badd --- /dev/null +++ b/2025/2/libft/ft_atoi.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_atoi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/07/17 13:41:15 by tomoron #+# #+# */ +/* Updated: 2023/10/31 15:35:21 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int ft_atoi(const char *str) +{ + int res; + int inv; + + res = 0; + inv = 1; + while (*str == ' ' || (*str >= '\t' && *str <= '\r')) + str++; + if (*str == '+' || *str == '-') + { + if (*str == '-') + inv *= -1; + str++; + } + while (*str >= '0' && *str <= '9') + { + res *= 10; + res += *str - '0'; + str++; + } + return (res * inv); +} diff --git a/2025/2/libft/ft_atoi.o b/2025/2/libft/ft_atoi.o new file mode 100644 index 0000000000000000000000000000000000000000..41b8d567ed4f6b1dc556648705183fc3822315d5 GIT binary patch literal 3224 zcmb_dOK%%h6h1TKJ9gqYc9Nz^nzpf^PRpZX#|q_Tl~icJu?iB1R6JB%+ZiWT{D|yv z6c8^pQkBOh*@1*Au|sSEETBaQMe3pp7A#=FA3#D>X-KeYQF#+3p3icCcpF4h4!nsBC1_+?C2c*(kfaZtgY;h8E0v_nKK3 z8GnsvW}W-(J~qs{f7`5GzNPdjq0j)+Lgk^r&}gV{v|q0b0jP#T=G3qjddmB>_w>m0 zz%wHN8UvL>(*ppm$wMwX1zPC5*Xsq){Xhiwctb%3cankPp^a7GMEkp_@H=5BO-s3? zf$tS`HFay5f$vo`UFw$Y20x)_E_xt9CNLLs>6g)Pr^(ZG1jdaXjeY z&v5^g1Am?SXB_yO+!yafBO`zPAYUg;#vkA~^&?^lG936g_v2hU^Mf&KrK@wvR61R@ zmcX#BWgCo4sZg-+b}`CUKE)Y$(>@Z`TSBLNimh&+@UZ^&H-yanJuRZmWaYBGq9|kN~3B}? zTbM;Yzar@lAGIF^z;*MgYlAdNggGa3ic`eAa2Lcm6+Xo}bJE&54rT?BYbSROaVJL9 zk2y%|vN*Z4jWnlIG70SfAG#|X$G_V{^DO4)LByRoDMVB07vRyRYW+I7Cvl}y{Y75? zXC6uQX^+JWi2COcqnr_ZWC`>7^nS94`a)mAMPbXlEgs+Ld&xYyA3F6P=LbUcN&VAp z?ChWJuTK4c!s{Q!by-BOLRWB6*fQ^H9xr2LJGt9UY|%--!GR|n2}J(_{tS&y?|-Gk z`}>e9;>EsPN6gt1<*xDif084Kllu{_b*jJ2>&JO4?LW<`v;GCdD5vxM?D9*&iHrI| sZ(yu;@t}n21AJN{?hgS_eG(DZ^Z>p`!@2jg7NnO#sWnw2uG9JX3uXFNZvX%Q literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_bzero.c b/2025/2/libft/ft_bzero.c new file mode 100755 index 0000000..8e328c6 --- /dev/null +++ b/2025/2/libft/ft_bzero.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_bzero.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/10/30 12:39:29 by tomoron #+# #+# */ +/* Updated: 2023/11/02 10:41:24 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_bzero(void *s, size_t n) +{ + unsigned long int i; + char *ptr; + + ptr = (char *)s; + i = 0; + while (i < n) + { + ptr[i] = 0; + i++; + } +} diff --git a/2025/2/libft/ft_bzero.o b/2025/2/libft/ft_bzero.o new file mode 100644 index 0000000000000000000000000000000000000000..a2989681bc12ba9115cabb8483b08a46b950a40e GIT binary patch literal 3192 zcmb_ePiP!v6n`_bGrP$)$tJB$+thZojYeo@(`}Ll3pI_VUE5kzZ1E!7+1=UflHHkQ zW)io-V6`BIdT0+)6r{zgm-Zy|AO%rD@uuKGq##1TOL{Bx5Z~MR-saoM9u#~q``-J# zzw^!a9{c|M`O~VR0FweIVM}8apc&tiXItVd>_X3rxwXG?YpaiQYfBrs>+{IxALf3T zUndvT*K;T4H~f7lJeIPj9`f3Uh=Zsblz~X@(MOLCU2V^y}))rVjljw4m59px;K(P;XXxAXN{= z%e^po2t|k|2uUbIT0EYB36yn${{t0kma~vvwmrY3y;8$1d zd;nEw1Rm_b_H<~SOW0`F9(IYBP*&aqrI}JjcEl4m@WSjzoF1aqIiBiIeWbqJXRM+F zVxQqd*A0Bf4chTgL@xr-umsw3%|TT9?Fqd z)}Q(E-lzNjFz-Gw?aD$7pl2(*U(r*&-{^*MR*xCy^qy;a5=Hf_t{D@09L3(ypnk0@ z$z!UD)&JdTW}Ip>;|H#1XBM;mbhBKvrm{|U>PlgzFkPOSsm>f<^j8|k>c-5?vhuu$352#GF7KoTPoS@?}J}8pZ9}O$u8%^4`Wus6Y2JQAHf(r z+U#c2pnV!0W(~9sofQoX7CX2m-v-H|L64+ui5k$jZ6^%|w}AyjhNM2{ga_ZhUex7o zIRoMNz1y8VCE^H|RumkRaC$q=%bfh>p`_bS#5m_og>V~B3!UeH{Z9*gPsIP6(0Ml4 z|1E*1BmS3!emH`^E%dPnUKaY12u=%#h?Wl#*L6d+eI7J{@@+{AJ7F^ZtiUM`pCLid zMR3-$5qwqXXCnB=Lbn8u_5)_gE-WqNtwO=Gm%$9|W&mca*m z*p+v&Ltl_0QPlTyv~{aLCh9ju zES*2iYP9|-#3*O<{B^MuD8EcxpZOY_ui1 literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_calloc.c b/2025/2/libft/ft_calloc.c new file mode 100755 index 0000000..9314306 --- /dev/null +++ b/2025/2/libft/ft_calloc.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_calloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/10/31 02:38:46 by tomoron #+# #+# */ +/* Updated: 2023/10/31 18:15:42 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void *ft_calloc(size_t nb, size_t size) +{ + char *res; + unsigned long int i; + + if (nb == 0 || size == 0) + return (malloc(1)); + if ((long long)nb < 0 || (long long) size < 0) + return (0); + res = malloc(nb * size); + i = 0; + while (i < (nb * size) && res) + { + res[i] = 0; + i++; + } + return ((void *)res); +} diff --git a/2025/2/libft/ft_calloc.o b/2025/2/libft/ft_calloc.o new file mode 100644 index 0000000000000000000000000000000000000000..e1475d5fb444f0ad505e2be39d4d7cb1601ad362 GIT binary patch literal 3592 zcmb_eU1%It6h1SvcXpF)H-BxDwAH5CSdnHX-8OBsQX@9)B&||~lz`an{>=W6-JQ5I z8`IFxYCszEVv+iwsNjn}DE@&JL@ZWpU&V(8gc2)4AU@O=8>mpvnYnj&GHyY^13TxO z@BH0+?mag-JACZ0EJ+|pf`d@k1PX91QkREZaR@e|=a@17n=$u$zcD|1%b2e&8*{U_ zzzHK;hHC4#lxmsWjrrl#m9wt(jAxx~Hm(k@l5HhtEMRoYC$r1KcL{BaZrsAti^jqj zS;v-lUp5~7@%-?0JBo>xpylFaR9+jt{-IQrS2i09!%GIb{}74*%8SO_WeLkJu6*rU zZ~@3yjk)jpU$`Q*Nxi)tOzEw3wsvmmZQIhW+MNLM4p4dzMx#*xr3K4}G>J?@T}tm` z(F4()-6I`ObOSI3GKWSw0Mxx})bJ)4>F@#oA}y$3rYZa}klZdxa9_R0GF+m4BFPGi zC?QvsPJ|$~6EP-Vm}C&kcw#={iK=|zR1>sLB8uX86xxa?LYTf`sa;mXkw_I~xmlH9 zFA5BQ|CQ3kWI5L}WmfEhRql!J)^=-g$U2F1vRJgzS{n4cRWfzQD(QRUiHvDaIM$?| zw9?hBZ`@XoKJvv|hfc13M;_9yL(ALW|Lo${8``IL zG&7$I0W{UaV-jm>{*%Sjakfcgv2hkvb*8BAvJGmEbs@S-V_oBj=&a>E)~=4S$T&kd zq#k8Wa~L3$rY^DK;p=26#8zQo%1Fc|?!J*q}WWfiyZ?~X|? z7p8UFu_~rM5x4hEXVb}ncsV|BIyIQummL@^4DO$>XD0WQ_UHQCQ|NoClAN40D}CP0 z(DB%;Y9(#TV3*~gNnlbBVj`t;zu$@fC%qG0k*79Co8-K4N9D+aYHnJ*E>*^Y_ zf)R~Kfp8-j6ll5!-h2M{h zU&ZzCK5bkkoMMFEMj!6)#x@_W`us&4`Y&ISG~ z*Tt*~{CSS|1pH5OUGz=(yAL7S9uD~1T;CPIr@7uAz|U}VqS#q{j|#^Z^9yhFaQ7m literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_free_str_arr.c b/2025/2/libft/ft_free_str_arr.c new file mode 100755 index 0000000..c4bd417 --- /dev/null +++ b/2025/2/libft/ft_free_str_arr.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_free_str_arr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/12/10 14:42:28 by tomoron #+# #+# */ +/* Updated: 2023/12/10 14:53:07 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_free_str_arr(char **arr) +{ + int i; + + if (!arr) + return ; + i = 0; + while (arr[i]) + { + free(arr[i]); + i++; + } + free(arr); +} diff --git a/2025/2/libft/ft_free_str_arr.o b/2025/2/libft/ft_free_str_arr.o new file mode 100644 index 0000000000000000000000000000000000000000..c2cbf75ac42edaf9d8e96d9808ed1d1b2f7f5bd4 GIT binary patch literal 3080 zcmbuB-D@0G6u{5S?44|~?Pk*t)0%36X00I3wrj;=N?nnyV@(x5TH1%Qoor^4CHql! zCozh_kDxRJp#>2i1;Lm80fHY;R5aqVpbw%i1)+W*<{_vM&zU(Vnchq&=z-aD?(d#+ z&$)NbT=tdn_zBZ6K*WIKusIS6uwrl8rO+(FUi3WeE?svQf62K^3v2G;!Wzt)H^#my zuab+qTwZglr&is?V=E9G*cdJ!Tltyhm&>b**Nmm|>Wy#R<%PA7xr<-q&VOzU82S8e zW#v1Axxu0Qz|bzcI|yJp2AQROR{r74SmxmVNA?3)3QPu1>;_03xoN2Sfv7zSR{nS< zlfksl4JJnS5HickwGwT|ysx0qp}i{Lm$J3|{j9{DYG-)Hl+!lk!=djGY*_M`xMO$-Rd${MPt?^9*lXO(3aRH~qQXO(Hc zuG01#l8;o%KBvsLRL=uQPb$OCoHK3A^q-CkkNFnz4bG?FkM$%s3;QHVER0AJ3wn|; zSkSu-@7spww&A%>1UYHSkWvaak&_`%3+qrZipV!n^H@bf&Do)_*hAJP14JRa5f zG>@fzYW;Y(jPN|MIKPWI<&{`Mj>hldvCCRtzYm;Ae`0p3;!R9+{5fzse#3JDe?9=G z+HN*|yc{AHxzWATuGPAJ(3MC;Vm9in@M_v}-NcvhCMPi<%oD9yZ`Io1wAz91JpR<_ z`@4ZxodKuOm}^$Zw_BgO$(@og@Tc)M^qM}r1~## z|H*r%`r~(l@Y^}RUjOf$=(c!K>`O@MxD>OAizsTg1d%wI`UDMR7j^eEgQMceTFzha zhiD}2e?DRVS@e~7+5c5!dQG%;iSsYfASSx+2RN6M|1#%yIhM|!-ld-Z1TtDvKmV_{ x*}vo${Vv8@I-*JBNqx>W?jz$32(a_JH=F)trr8$5U{oBy%{})3!7CQg{ literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_isalnum.c b/2025/2/libft/ft_isalnum.c new file mode 100755 index 0000000..a1fe540 --- /dev/null +++ b/2025/2/libft/ft_isalnum.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalnum.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/10/30 12:09:17 by tomoron #+# #+# */ +/* Updated: 2023/10/30 23:17:18 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int ft_isalnum(int c) +{ + if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') + || (c >= '0' && c <= '9')) + return (1); + return (0); +} diff --git a/2025/2/libft/ft_isalnum.o b/2025/2/libft/ft_isalnum.o new file mode 100644 index 0000000000000000000000000000000000000000..5d6bd45b506bd4f37d1655d1fad1474e46b34204 GIT binary patch literal 2784 zcmb_dO^6&t6n@n;HJi!oWM{M4>?UinOX3&^rg}3PjX!K=39H#P2r7vf2xHG|&t}NX zbeQg4)|hMpq9z0+0R;~tiWfmd@gN?&c@U2ty?GG?FM3-r7~h+&H&fem4uL%AdhdPp zy`QSC>b|yc`UOV_U=c6}1CLRF-_^jb^vnwELgtxMH~+YKb@QF8o8FZyj+Zwkah&hj z=Qf7Xp1m@H<1^QCKQG*+%zq7`K^bl>+&%x37!{?`n3ARLL~&xOG&;328%_W?T98?p zl%;3$&*cy8SsXjD2S6%t474}~ka-kjX)d47W406cC=lByvw(erML19)3?;V2SqX(X zbft4=UBxD3GAaX)AZRU{E zv0fBY!$aF{mzxVjDFZTYoIsV~|1K(r-at^UbWI?Fh_ElBPE~#;?_ARM{S{+_eu2wSp zlFDhGkxN-uId_y;&E}tX9IW-An}qv%fB6xoGVss6G={`Co+c7x8jNW6KDhO2EQW-f z;BLl~>B#c^KY=)?IT76awgDY-F-|m((5RNaTe`v-{9N|O8CN*tr!fAD!mo?$` znWv*j!Z_zG#&91$V0=E0%s*xD$prs3wbt5I3JaSnTOujH0sITqM%Qcm zRwBG28jD9>4fR`X(ho^~!94c)>!&q`=C?i&8}X-O0Mbn$EP1mkhQivoz~_v8icRLE zx$88bEXJxoCb=s(lf;Nj>moTBtNxhe(niuftMnPM@v+&IHw}(|qb>K5&;LQhlQ}75 z*nl(SSd!%K$GNono2LG46HE2&`_1*ALY#8W8Xl|1O`$g!Fq-SLK8rZpHuYTtroAtl z_X;{`{of!Eh5Mxb>1)b&nQ{95P^o19ADQ~Qan2U*mGuTrvTgIeN&{24-^JJ^#|}pO zTN8ggfph;1e~m`k`aerqe*w81&+Gpjv9wnIG~g{RWOS1I3F2w>e=zm=yGZ*_cQsjm z9x=+9-2c#Q$P+kc3)g4;0Zz)(_X1ScZQhoj4o*;g5{`>KfM3x_?mf+YX~4e?k>b+M F&;J%- +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/07/13 18:10:01 by tomoron #+# #+# */ +/* Updated: 2023/10/30 12:14:17 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int ft_isalpha(int c) +{ + if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))) + return (0); + return (1); +} diff --git a/2025/2/libft/ft_isalpha.o b/2025/2/libft/ft_isalpha.o new file mode 100644 index 0000000000000000000000000000000000000000..bcadb4a3cfaf371d7e1f63941ad1f78239a16840 GIT binary patch literal 2760 zcmbtV&2JM|5TCc}=Man`AEf~Wh($5I&^2)>R4omTPzs3<5=DSosdCrOI&rbRk#`dX z3IPcTHR6(7dMv1yp8E&Dr4sbiOAmzuQZJQ|xRg_oibQ92XX2ODwo=uRyfgEAzxjA? zXP<9Oo%z^O3Pco4K+h8t;3wU)E0I}&H;{SZ^y=@c*I(Yc{?fgc#pl(Po%o!L?9W#E zA5Fa?^7B44DD9o8SD*i=234^*tnFfVWME{pI5;|#4MqSgN0C|CWfwoleVBWD_w?|I z-2k=*i=pXZfXo4~ixatA4zr!Wp9ZxB6}Gas*SG~o2t$c2bsc+{)}qK z=u_rXDsIJfvs=kPIKGIDLD`8m3E_Q_6+gz3S`f89~^s`i(~5g@FViBxbAG@v4z;gt)V_NHBnAr{ROs z@k7r!b@swLLFm>mgVSm)wX4Jpnsb}zl#~H)zS`)zZO^zc@Y`^(V(8XTUul!>T|m6; z|E(Ti26O%-;WHXOlqa#;c*a-8h8ukegeAYM3R7g>B|_#*e2Puxq_vO<)2u}$xpTOX z#E5&J15UCQmE_iNfwo!^0_&T6C||IT|3I6*N16Y(5KrceLKrMWPVbTA?!%?D`oD4g zH4dfv=Jzf2k0MSv4>M0xfeU>q0Bfl)`Xb_Do75`|roAtdcMhGj{ug+Dq)+OfZd3V| z1*iLmN+tVW<@#^pnkmw&=l~bRHhFi`z!dKHF}7gdJ(TAj$G=aGA=1A<-=UGV|F2W_ zpGU65%l^MXEUneY4Bn7Jtdrbz#MA2E +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/10/30 12:15:36 by tomoron #+# #+# */ +/* Updated: 2023/10/30 12:31:38 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int ft_isascii(int c) +{ + if (c >= 0 && c <= 127) + return (1); + return (0); +} diff --git a/2025/2/libft/ft_isascii.o b/2025/2/libft/ft_isascii.o new file mode 100644 index 0000000000000000000000000000000000000000..bb3bb410cc4e0efd0ef259f584a30adb2a942844 GIT binary patch literal 2736 zcmb_e&2JM|5TCc}brOupCj=BqBEW4ftigO$Eeb|aN`g=ktpZeP<*uD|vcmR8-c1xx z(^Nu2AS49h0EY^RKcEtD=GH^$jUIb1CoUjyKq?4kc4y+3)pDrRk@n5Z@BQZEy?t-( zwW-rz8A^eOf(ht&f&x6WI(9iS%P@q@+3D-gudlwjvib&o>cw$wt>=%ax0K;U7aGL8 zG4=L`-&MaV6b3D`&>rp^9x3#X3}l000K-;fmbaUQFLGbzKHD)fczg$dX@SAe%pgE! zFPMdiTrP*%j^ks2>ZZ&JKIt@Tz&K$jv8B$Lke@);G;Xh0u?d-sm4TfIYRjRJ4N_}3 zt@*KKw;gzXYpis@K46!i9#*`-32L5a*PyuIH{D|BH;ac#l{q)K82XDv$FCJj`%8z5 zrDDUY)yjBP`*oAVCO;+3;F!CGxcpXKoG&8sN3+KG-ckbnTO0&+ZFCr*=`l_I9JO z+^kSo;LUG{r2GuH3zd4?X}Ve{2i@NlPsYf%O7! z%8%^hug-@1DCd6<;>ny8@|p&ev1sfJN$xJ3N~`~r>)+x~s;}Q~sec4<%DJC;qK3H8 zcLK1M`l8PvF1Ai>GMM(hblzEX()z!^=STXa{^@HfcUf@y{!po8|EpYo8_ww>y^0QS zQf!@fCk;&DK8~?PLk~v#9>;&4z@>kIe?uc}{fjB<&m&jjW&IBjOKbHRgS0+flH6Z$ zGOhkKu0PGewEy(0m8^dPG0K_T|4H7EgE*&))E9jdC(YCE>2Jm_I#0eIf>C`EiHkje UztBkTJzefmv(+W07DVhXaE2J literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_isdigit.c b/2025/2/libft/ft_isdigit.c new file mode 100755 index 0000000..fe77533 --- /dev/null +++ b/2025/2/libft/ft_isdigit.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isdigit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/07/13 18:10:01 by tomoron #+# #+# */ +/* Updated: 2023/10/30 12:13:53 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int ft_isdigit(int c) +{ + if (!(c >= '0' && c <= '9')) + return (0); + return (1); +} diff --git a/2025/2/libft/ft_isdigit.o b/2025/2/libft/ft_isdigit.o new file mode 100644 index 0000000000000000000000000000000000000000..da45ed3f73c1d2b12c8333fda417bc809811a48a GIT binary patch literal 2736 zcmb_e-)j_C6h3!mXJfLiZcH>vS`(yO?L%kds#LASl@ObhpkT38P}bSq*<^5MC+ti@ zER9NqQYkHlzLe6J{sD!yFMaV%q%HWMk9{tEDuovMAXKpD%$$?G8ODb~56nI1eD^y) z?wxyQ_txyfSwkrhQ7{dCPf&nwt-f80%^Hj%^Wxmy-|ntIy|eyw>VrIvCvFb@IQxtU zzYm~6sXm!~cJ+Z8R^{@DWtMwmrLpny@c6ELI0j(Yip<(xvwX7fX5rwz`H|E6089%E zhUP~Aa<70{o-Py$nC&z^7N~8gu>8yYW(_z*7)oNPcTFfxqiY%)YgS@HE@$Q7B?PtQ zP{UfA*$y~u7tWhwC8N)-5&qt$xL4X;PRa>WUn zmFiUWSfyI&c#U?Xg@D(Mpb6Wtj0JJ)Nx{rY@zf}Hq~5;(YOSQkw-0Q)hr3C=(?b%k z_sovcN5)Js-$Vjp0X|gX4b)1he|8i}(QCj5jR`WrR1?NdYkzFR+4GO4KkWXn@$16F zPfOh||HuIh8pI+oi^>`rTCs-nZ(Dn83r90wv5XB%t>g=*38$#7;)dSh7CI$mz+I}hdyemF-Qg9nv0~&jP~Y%L|4;HW=F!ieq59OCc zZH~z&V$+Rp0%7T!Rb$GbJ~g)FoC!>^>6|pT#Dsa)qSD+RPNXs7e#ZebtVN}{K2Fe5 zYeHbX#G7)Bef-tgav$aV(|Jtiq>#U9K$(ok{*dOrhErMff8zT0IF#z^_gm_pL7Z|< zF;CPe7rHC}YpE~VL0oK|>NA-2zI5Idbh7%t#OFu)r2gq^DtB3M`ufiIZaMyw9`14DR;{wyb}9D9;xhf1DgmqAXLv)7;G8Z}U-V}-_u+i_F%` literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_isprint.c b/2025/2/libft/ft_isprint.c new file mode 100755 index 0000000..7b5ceb6 --- /dev/null +++ b/2025/2/libft/ft_isprint.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isprint.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/10/30 12:31:55 by tomoron #+# #+# */ +/* Updated: 2023/10/30 12:34:32 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int ft_isprint(int c) +{ + if (c >= 32 && c <= 126) + return (1); + return (0); +} diff --git a/2025/2/libft/ft_isprint.o b/2025/2/libft/ft_isprint.o new file mode 100644 index 0000000000000000000000000000000000000000..f0bcf1a793d2fb2637fc87d334d61c5265b73488 GIT binary patch literal 2736 zcmb_ePiPcp6o22$&L(l){BNVAnnk)*51lpJ7E4>=N{A*Bda&45Xjx}Bv&rJlPS}}* zRE!o1r7DQhiw7^>JgBHQ!JCEZMeMQHf~WSN;6bRM@6EiI{W6S)LLbcc-ur#O_vicO z`)2p-%={rkDG*UG1zk^2fZJBru0&=9Mv-}J_T1BR>o0#=e_1#^fa967eZSAVq6~lc zph3(FGq1jXpoUbjIAWQ_&e-7CcyVZaI2()s7`7s_vdt`hmis)nd;8qTf$adM1qMTN zBLJEA!7NVYayiU)03QofFJ)G+quZrh(qJ+~D4Ug_gKN@$04X zzVaufa;epYW~vXuSvf z2Y)uE^VvEQ5cBb&68ljrrT*>DlcM*54;m9>f~h8q0c&Su!@bGJh3mt&{`qa};rR=} zjlVJgeFm{e%)GLCx2#zG*(277ZS^0q%xuXrE?a6PoBP5rFz0{W4BWrB%YB^6!1LE> z3=`jMnwVgw!H8zxf@`lpW0=sVd0o?lfv%%jCJbp_Y`%kPSnD%-M~F$qEokfAN(RDl z<2QJehlKE+$cl#vwh5=zNnX)}>t~ye9EsqPcQA%G@LlZ7xfA{@2IyT^MvWR)TcZWOH`W%6v01;U68(#`N3XrYb%RYr&jB@t6+!j+NO(W*L}}( z@iy8Wx8*Q72s>53(Foiyka&c|Y&F|%HS)C(XJG*e8qjPve6ZVo=-P+BJoaG_I`xxa zw_2-SmAFB3aTA@AGT<&%8y&}UweJO95gRLpP7U=B9_jx{9$_B+{7Kp;bofyIjMc^% zem}Zl6YS%!&Zhe)=bz4FGAD(+paG>2jol&1-HTIc^&fKmOB_n|_4_UL4J^|0Bfl)+Cf}wo$4`|_P%u9cj%<`|1F;%>67}Wuc_Q+!3&5{sbv4_T>o91(?xm} zeFi7R)_K3CfhpX(F}AFKdnnHpj{lS#O{9N;ZlaO4{^gYQ=aDP%vi@s`rM3Em!9WVJ zPI9jzo>u=Cu0P9hwEy(0m8?IH80Adv|1@vNM>wa8)E9jbC(ZfS^f%*2ohRQ9!Kglo Y#Kj)KA7~`^p61pVe8xnIOFKVr0I^NjAOHXW literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_itoa.c b/2025/2/libft/ft_itoa.c new file mode 100755 index 0000000..e076598 --- /dev/null +++ b/2025/2/libft/ft_itoa.c @@ -0,0 +1,60 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_itoa.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/01 02:36:12 by tomoron #+# #+# */ +/* Updated: 2023/11/02 10:16:45 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int get_number_len(long int n) +{ + int res; + + res = 1; + if (n < 0) + { + res++; + n *= -1; + } + while (n > 9) + { + res++; + n /= 10; + } + return (res); +} + +char *ft_itoa(int n) +{ + char *res; + int nb_len; + int i; + long int temp_nb; + + temp_nb = (long int)n; + nb_len = get_number_len(n); + res = malloc((nb_len + 1) * sizeof(char)); + if (!res) + return (res); + i = 0; + if (temp_nb < 0) + { + res[0] = '-'; + temp_nb *= -1; + } + while (temp_nb > 9) + { + res[nb_len - i - 1] = (temp_nb % 10) + '0'; + temp_nb /= 10; + i++; + } + res[nb_len - i - 1] = temp_nb + '0'; + res[nb_len] = 0; + return (res); +} diff --git a/2025/2/libft/ft_itoa.o b/2025/2/libft/ft_itoa.o new file mode 100644 index 0000000000000000000000000000000000000000..56685502ff8981efde6d3af4d9f41860bf593979 GIT binary patch literal 3824 zcmbVOTWB0*6h1Sv|Li84d)p+vnWXL3f_8QrqZYfZ(Xw^Ay$IFDfRyd-W_Gi7FJX5Q zQz5mwUK-*WO8CrPsbMZ$=Ix( zo>*M?7CDo#`Kj1^^`fMwYx?KEzyie~V?nP@EWl`^K85CFtaj}!#IMHYEO&Kc7A9KA zbp>|nr(&~9l=C`Z%xvA6N6|6+Nj>G6(Qo~sS1(0~I(20Jo+ESBYgp;4b87=G62?!( z=CF^+*xdDx$*ET_M$TRGj$F{wN9M2i0zhtR4|Pqiei1owxw*^!-pPsD)z~6U6LwXD ziMFZOqLqFT8?I5qHLKxT-I>iRE==R-oH#$A^TcJTRSJdHFeOy(XzAD(YTekTRyqLW zZJ>nq1%p8VMUx2a?^Hq$1@{E+UVm`S!|MTj3}g-+Tm!)RZX2qrg8=-^KvcMZ4+ANH z3Kwzn%96{lpD(|xuz&);5n;dwJ#V1llc&u9^t_EGlc$I4U@M_$4%Ndpj-Cuch?|2A zuzf2MK$V`rw=|$aGr2I$cmSHog|TKGv=R#b8GOl1m1IBj!EW*rd;QBLHIBIJrD6rpTXpqR1&Fpa`UqL_lU*faxcc5iRrvooSl z1c~(AF_6Yvq>T;!zc661qL7nz_)U2-$K%d+9qZ>Ij~XwU9?Z{$YDt;hX;`vB@>Vv#645^Jdc zkkzYkwn06_f~e~TS&O=tb*NF+9A%rLED&evAoHVJMIBVbOhKAYon}p=Oc}F+gBT&d z&RSKC$%B|G!nPo1#|5UunLo~&qO2{-lql#A6nfWT%}e;-B# zqq2nD%BYfQF!k^`1x@Jj4pQr8N^8C@2;M}EReguA#^Sikw zu9M&I!UcZ|$EmJ!mufD2J0I&@i@JOWN)WUmBQ=^$BvYxfF$P-M$R{<^7&k#nmkI>~ zZ)qE|X%(}aC}lDg!>ou%goK&T6^(>7w$kv-LqkY#0J&nOIO7#CQM=ul_svLW{nrf4Upo>%Rdp$|-ngT2kco+XcY2s4w)Zhzr|EeaY)kcyK?n zu@OF9%PG$B_`zkwHbnmd{s;}P@7F!PzX`b_Ud-$Jh7PQ^<4 +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/01 15:44:09 by tomoron #+# #+# */ +/* Updated: 2023/11/02 01:13:03 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_lstadd_back(t_list **lst, t_list *new) +{ + t_list *current; + + if (!lst) + return ; + current = *lst; + while (current && current->next) + current = current->next; + if (!current) + *lst = new; + else + current->next = new; +} diff --git a/2025/2/libft/ft_lstadd_front.c b/2025/2/libft/ft_lstadd_front.c new file mode 100755 index 0000000..4e6a56a --- /dev/null +++ b/2025/2/libft/ft_lstadd_front.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_front.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/01 15:51:22 by tomoron #+# #+# */ +/* Updated: 2023/11/02 01:12:41 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstadd_front(t_list **lst, t_list *new) +{ + new->next = *lst; + *lst = new; +} diff --git a/2025/2/libft/ft_lstclear.c b/2025/2/libft/ft_lstclear.c new file mode 100755 index 0000000..fc79c03 --- /dev/null +++ b/2025/2/libft/ft_lstclear.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstclear.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/01 15:52:45 by tomoron #+# #+# */ +/* Updated: 2023/11/02 01:12:06 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_lstclear(t_list **lst, void (*del)(void*)) +{ + t_list *next; + + if (!lst || !del) + return ; + while (*lst) + { + next = (*lst)-> next; + del((*lst)-> content); + free(*lst); + *lst = next; + } +} diff --git a/2025/2/libft/ft_lstdelone.c b/2025/2/libft/ft_lstdelone.c new file mode 100755 index 0000000..80bbcfb --- /dev/null +++ b/2025/2/libft/ft_lstdelone.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstdelone.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/01 15:56:36 by tomoron #+# #+# */ +/* Updated: 2023/11/02 01:13:47 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_lstdelone(t_list *lst, void (*del)(void*)) +{ + if (!lst || !del) + return ; + del(lst->content); + free(lst); +} diff --git a/2025/2/libft/ft_lstiter.c b/2025/2/libft/ft_lstiter.c new file mode 100755 index 0000000..0430cfd --- /dev/null +++ b/2025/2/libft/ft_lstiter.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstiter.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/01 16:35:30 by tomoron #+# #+# */ +/* Updated: 2023/11/02 01:13:21 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_lstiter(t_list *lst, void (*f)(void *)) +{ + while (lst) + { + f(lst->content); + lst = lst->next; + } +} diff --git a/2025/2/libft/ft_lstlast.c b/2025/2/libft/ft_lstlast.c new file mode 100755 index 0000000..6fa8909 --- /dev/null +++ b/2025/2/libft/ft_lstlast.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstlast.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/01 15:47:49 by tomoron #+# #+# */ +/* Updated: 2023/11/02 01:13:36 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +t_list *ft_lstlast(t_list *lst) +{ + while (lst && lst -> next) + lst = lst -> next; + return (lst); +} diff --git a/2025/2/libft/ft_lstmap.c b/2025/2/libft/ft_lstmap.c new file mode 100755 index 0000000..7715da4 --- /dev/null +++ b/2025/2/libft/ft_lstmap.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstmap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/01 17:29:05 by tomoron #+# #+# */ +/* Updated: 2023/11/02 11:47:05 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)) +{ + t_list *res; + t_list *current; + + if (!lst) + return (0); + res = malloc(sizeof(t_list)); + if (!res) + return (0); + res -> content = f(lst->content); + lst = lst->next; + current = res; + while (lst) + { + current->next = malloc(sizeof(t_list)); + if (!current->next) + { + ft_lstclear(&res, del); + return (0); + } + current = current->next; + current->content = f(lst->content); + lst = lst->next; + } + current->next = NULL; + return (res); +} diff --git a/2025/2/libft/ft_lstnew.c b/2025/2/libft/ft_lstnew.c new file mode 100755 index 0000000..8e78fb4 --- /dev/null +++ b/2025/2/libft/ft_lstnew.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstnew.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/01 15:39:52 by tomoron #+# #+# */ +/* Updated: 2023/11/02 01:11:12 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstnew(void *content) +{ + t_list *res; + + res = malloc (sizeof(t_list)); + if (!res) + return (0); + res->content = content; + res->next = NULL; + return (res); +} diff --git a/2025/2/libft/ft_lstsize.c b/2025/2/libft/ft_lstsize.c new file mode 100755 index 0000000..4fdfadf --- /dev/null +++ b/2025/2/libft/ft_lstsize.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstsize.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/01 15:46:36 by tomoron #+# #+# */ +/* Updated: 2023/11/02 01:12:32 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_lstsize(t_list *lst) +{ + int res; + + res = 0; + while (lst) + { + res++; + lst = lst->next; + } + return (res); +} diff --git a/2025/2/libft/ft_memchr.c b/2025/2/libft/ft_memchr.c new file mode 100755 index 0000000..1691bba --- /dev/null +++ b/2025/2/libft/ft_memchr.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/10/30 13:35:44 by tomoron #+# #+# */ +/* Updated: 2023/11/02 11:28:37 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void *ft_memchr(const void *s, int c, size_t n) +{ + unsigned long int i; + unsigned char *p; + + i = 0; + p = (unsigned char *) s; + while (i < n) + { + if (p[i] == (unsigned char)c) + return ((char *)p + i); + i++; + } + return (0); +} diff --git a/2025/2/libft/ft_memchr.o b/2025/2/libft/ft_memchr.o new file mode 100644 index 0000000000000000000000000000000000000000..1173fa832ed9861bec323d1d8a99676db135130f GIT binary patch literal 3400 zcmbtWO=ui-6n`_bv%ASAyZNX|N^6?hMssLp+cjyU4K+n$w`(h{5D`VT`!V}Lc4yX^ zN!*5(ib2a7#1{1ArFfBoh*jvti=fbY(v#*O5(J^p9wJ@>J=FJh{x3T_*@NhVo%i1F zea@Tz`zKfC&%7v05->?{0$LiQ0LgGmo@;6#Fd-XdBwe|Zy zV6H8ZYwOMLrG9CAd{9-!t>M1mJ>&g*27>l5fEYfJ zay;_X?$d+M?FLX)kOf2m!KpSi6vIm4C-KoWgbCeH)UM%A1*!S+5CRRnTsb5C#K_xc%_^zIIv{c<)WeI$8x2N1J?-FpYS4rItKd0S9sAlP-cnk51*CePw5KN&zJ>>MFXHqgYJQ26 z(Z2WP=X-;49z6iQM4YmpLoP|u!)PxtI@$O`VV{g*lN6L=>Zq$%&u1rZ{*n5v{`tz< zmDS;2$U{2x!oB^U-TGwj@7h-nHN8{};3;W^Me5GQLe{r$F%hLV!}RJFXS@Q z2_rFmF*}nzT9}?G&m3E{S87jJj}<4I1D$-^%G7GQHR*onxTV|Xl9kgZEz@-3Wg}Nv z%Ij^PKb^Lnd|of4-H)Y}+&OiAev5Db{(98Os=)S?+RO?lZ8|Fo1X*n3iuaUwEDCga zw3es-B0SWT+{Zp46Haf(d6^UL zU1r(}BE~syp9^o}`-RT?!TzTNKH~FV5IXM+`@b&mF`s{4=m&jxLFf}cyd?BPKD;9I z!#>;)`jij9B=i{{PFE(;tjo6N@Sf0lp0wfKQ#U5;gn98N1Wt3{Sc2$J01@M?CtP?N zr`w!}=gs~N7lw@B{(eBq>)EAZI+M*>`Z8#aUUxvtnboR}*QI9Zm5lJP9V=}X3byXp z9E1>ym9nAZo?5NVZ41ui^XTfyRyGPIXol(N+NqZpCT%B^TLi6AS+1tZ7q9X*cSlEwHNw%B9VOelye&4sy;K#^!p8!ARK*9aKv?p|*%n3WQ5pg+O5CHz`(su9go*zKm zpOZqq5#Sst9`gH+qODW?x~P9n1Wtw-xUXf`=tK6@aONJ?pdnu@Baf)e+X?};$E54eZaEU?}mu?VkG;0 zZ@E~_@6PdjA95b*Li5TVFF@JF>P<}6QedZscQ91L-MD~u?kM9r0s6G+Lxf;MvDEMbjwh4ME Nq)nGK<2s$6e*lpBN%jB$ literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_memcmp.c b/2025/2/libft/ft_memcmp.c new file mode 100755 index 0000000..dc57e59 --- /dev/null +++ b/2025/2/libft/ft_memcmp.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/10/30 13:59:31 by tomoron #+# #+# */ +/* Updated: 2023/11/02 10:23:04 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_memcmp(const void *s1, const void *s2, size_t n) +{ + unsigned int i; + unsigned char *str1; + unsigned char *str2; + + str1 = (unsigned char *)s1; + str2 = (unsigned char *)s2; + i = 0; + if (!n) + return (0); + while (str1[i] == str2[i] && i < n - 1) + i++; + return (str1[i] - str2[i]); +} diff --git a/2025/2/libft/ft_memcmp.o b/2025/2/libft/ft_memcmp.o new file mode 100644 index 0000000000000000000000000000000000000000..41b16eb97130c295b751d5f052b673a2006aab72 GIT binary patch literal 3536 zcmbtWTZkKF6h1SPf0EtoW-ncPzie%z6}ppd?6zCG))X6?)>c|!iw{bg%jCi)nK(14 z+rsM7f;KMFRxBt5Sp>m{MeK`Gd@1;_3qDw%`m)Hr2-QWYPZe6I=VbmrnG7iiJuq|5 z_npgsng2h@2k{fH$&v&@Bsc^uBv^nuftDR>m@yc_$jLexhExm#9y!B~l(##6fx)$S)2(4yU0R!&Lom}qwz9)d@(%dAPL;a(-5Bz#LzE~TY zi!UeUPOc;_{UId|EcJbQ8`+QJi{D5!c{Pa6OSh$Ze0lX&vy2bRoOH_c47{*Zk3X7= zKYHgUX+R2x*Dxh)uIpd7DLk-gP_@h#^{_V`I z9}ce1Q-rkp$i3}f-Mqf}H|@KJnqJ8J0J>V~A&G75e!%?dakf!?y`g=iYfM$&Vu~8U zW5T*rjSVfZfd#hNX4^EjV}gZ`v+c)~{8c6^8zz`f%`^E5>)ykL)CD%Uz+{a{>dR_y zLY8s9|L;3RD#huDWgDg*nTlHbrgNFpShNxyJD(m;@5_yi7svNcSr@7=miOmJ8XG?H zo|&pvb#ufy8WB^sjGCFzM@+-8BgIOlRLknE4~_>WnY8R|R?j7!FRT@uO?=|}NA&pM zpU0g76lm^Zn_B^;4GW-vD$F*mxDS%cqd=DnwM+&2TEJx~FyKOtnMO6}n&&)^5J$Hg zv3s_n0`YiGnlpQb=MnGcHmPmgCZ1L&>IzM~y9?08ArZW&+wag#emlqF{)qUaoL}#W zpX6BFDG{IK{IDlJ!|_fJpW}F!hc9xx+rv+ByvM_z=XkG&pXGSm!(Zfh!oy$TIOgH0 zCzFVMrq19#jl<+bABF0@sm@|@5M$()%gx3>=shqhB`(5&-i z(oZdmSiyb&M8SXgCA%vKu4!N0LY;s(x_fSkaWL;D(H8ei(3I<~Nxl_&p}gy;=Gz-f zelJJCr#bmWGt)7=u_dIb&%_*e^L?2&jkBD=|3Yp3NZkJ&$a`y2%AcG(Lck^7*sbX6 zH2yt4et{>@__W93&WQ2%Ax9zN{-fCtjbFMatzXRJ3`Pr^r#93g&+qiT+;OK7bejJu zetyI}Y5w$U;+;SB-%j(t%g0}fez%CZ3Qhe$*zUN$c)pt>+Z%h+;i}&7`ozBmH DhE{Vp literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_memcpy.c b/2025/2/libft/ft_memcpy.c new file mode 100755 index 0000000..7e1aced --- /dev/null +++ b/2025/2/libft/ft_memcpy.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/10/30 12:42:28 by tomoron #+# #+# */ +/* Updated: 2023/11/02 11:05:58 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void *ft_memcpy(void *dest, const void *src, size_t n) +{ + unsigned int i; + char *d; + char *s; + + d = (char *)dest; + s = (char *)src; + i = 0; + while (i < n && d && s) + { + d[i] = s[i]; + i++; + } + return (d); +} diff --git a/2025/2/libft/ft_memcpy.o b/2025/2/libft/ft_memcpy.o new file mode 100644 index 0000000000000000000000000000000000000000..1e2d7f6c3bb608f7bb34201e5f264ee4a4a499fc GIT binary patch literal 3424 zcmbtWO^g&(5U%c??wQ?TXMb2(2q=rP%7N{HfrX7AjM0(h&kz#`i7~_c^z2M_rhDw} zSq36vf(ip6VNH;O2~na36AyAQn&<)b05`a~Cu8E8kZ{41Bpk46`qfVFV-7|u>8`K7 zSM}<3^{dx?I&)>=7rePR84^OrJoNAqVIMr%Am}(uqH+3O{ zI5UqL?abXjorF2W&YCi4PDO z>RhoG2Ic~IbQugj7r;Y(Fhmfd>ic+)^<2bzk20jiqA@KVjlfQ{b-ezo6skFUdUV!u zy^3RxrZ$_K%@maUY|W|_>L<(sB+E|CO8QPMxiyt7THcKB)RQ@i zlW&0198gv-i^eYD#$AInT_o+-@p59|L-mzDLp_cj05_1Q=?|e+6y;H(j}+~Ayb!Ea z5w=A`+^;_q*q@)>?*DxG`js!gx~8xEWA{9HC>vkBx9-}F%WHl!zj?5%l1_L+ z(G$IY>k(t0o-p>4#(Pggj~hqz{!99hsSjV(Dz|l28`-J%8f9HGuIe!#9beMbi+b-C zT{YtSR25hC?`og4E6t?mJFbQfVwIK*YdF$PG%&i+=pEW7ArB3DLRJTAKrQ{GXfXH$NjqXFw9fWkLXI=` zA`Y*XXCNN;!J^+&h)IZ#wo!0fD=_i&bUZI>;=}z+Z9&33&pQy%i~KrabAPb^9>K4a z{0|75dxrgw2!2%Ze^c1&B|a*fmyWjjp=MI zpLeZUFnz1(gIREDH4BeO)3vHO;o57W~Y&ztHjtk`_+f*BrzB#5VptbiVLRqW)1}-mg3)=YJaqWR84O zg8Y~Rg_eD*$kTa}7UQfoiNoQTAn^ZX$+^RQK90ORCxzS=WSWeS$iCFi-SS@&`45Qz z${#+*IDZ;>a^XHl*p`@RI_?YRIX~-TIKY^FNY9CQ`F+X0bY68^|L= zXP(Y!np0l?XCnU!919EQXHDk;2Z3tGb=yDx09F!NH~;_u literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_memmove.c b/2025/2/libft/ft_memmove.c new file mode 100755 index 0000000..2f1c08b --- /dev/null +++ b/2025/2/libft/ft_memmove.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memmove.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/10/30 13:20:17 by tomoron #+# #+# */ +/* Updated: 2023/11/02 10:23:24 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void *ft_memmove(void *dest, const void *src, size_t n) +{ + unsigned int i; + unsigned char *d; + unsigned char *s; + + d = (unsigned char *) dest; + s = (unsigned char *) src; + i = 0; + while (i < n && d && s) + { + if (d > s) + d[n - i - 1] = s[n - i - 1]; + else + d[i] = s[i]; + i++; + } + return (dest); +} diff --git a/2025/2/libft/ft_memmove.o b/2025/2/libft/ft_memmove.o new file mode 100644 index 0000000000000000000000000000000000000000..d459277c88a5f36472e848197fc2a3190ea23eb0 GIT binary patch literal 3560 zcmb_ePiz!r6n`_b-~Q?Le+z9>gep`qp|h}3Xl%t2Tv;kLXi~z(Ec<76yL5M_nVGFi z6GT%rl*XhO;bchUC!>U+E2Yp2sSF~*n7y!U?Z z_ultszW423jGcT_RTN-R;0SDZi~_6%H|)`>ISQS~oQTgqh|gbm8lNvej?Yi5#us8} z$L^y>Kel{3wnFTM*vkB^155GY@zqPQJ9ZbEa~JLd+D;g)WoWs&gwEyIov)R$`sfU% z-;WQ+mS^^%wH#j{3_ z`PjKoqtd4I_jd@b-|A}Z>g{jqZTH(<0BQ@I=m606fYyH`91a8cbcKSW z-CF;v;o`ea03o4XsfcxR+7HbaYv^PEnm<9)uU^SCKry(+F7LABw79$6viHu=SIp%aEX{IC5{n5clG*ZZ?vJR9>c0N}!GJWaEq~$6A znBjnJrJ=OJDVU`k*!fu_;Xr-^&X*j>fDMhf7y+&mTX&Mx6?e*YE3@x{QfXCs8w0^b zY=9kz(?e4II!BvZKUI%4`PG}q0H9M%L!3gbD9W?uCQ{Tn_@J>%MYAdz+AU&d&F{H* zW98Vr+rRvFuHn|>@jr%%q3nBO_4ym$UfuD#e)E}bOy+#}g*MWg717=Bm+<+=M7RGf z()bRQMc98vv@D8tU36a8@;?bx>lzUO|D*^Zv%{Yg+fet62}FBGM8}x$jR-^<#zb&L zG>(Y2DiZeZ$CB4Y$U*fQ7MWcX4QGYw509xTF67^RyhtfuiP(;58Ih@|eW;R6CkLaY z=-~O(Q0h>2a40`?c*>rgex-OgH&Fc+1MgeO>1o3ns2!MyW!PrfN*e=~X*!X7DP1UM z4A&{ZW0XkPP9|ey6SeQIPu8~gAKpJ8?t>?5^}-sg@9w6s2HGZ{9S!_!Zql0jh`Ayf zgk0W+sR7*#TSbGmEg*GryKA0&L-3()z_@$1T!C;rKkGBwhBgV|fvQz|?UFX(v^uWK znsE2EKrKbWIM;2h!Rz=7(&xTneq7?+9{y?RbFVQ!De*oJKP&w`9{im2_j>Sx^!Iu2 zS?TZh;2%ll>UeZr^}v%_mgf0_o?fnAPQk_ocE9RfpdvRKPM!NvmdR& z>-YufANSywrO*57oe$_4BUR2NlBtws%z*9~6$kXRSu7fOsp^(dNJ@t7SP3(mwGGGS zB!t*3#{y}zjx)t7)V znaEnnqUV~>ad0P@0^L4eB>g|h&sfLZZ(KGgKhm!ZNKO0e7V3P$sMp*wDjn``j&WbH zPr2Tj6#G*WW~652<>oNp#fUp4!E2l-wU=-H3Z@ zQi`I|duv@UcPDb{jo&Ia^ps4X@d@JI;qeb4MilOMG^=t{j{gM%QuFw%>7HWSO}!`c z>wPab?;UjN&Ht>tlzE;sfBNrE$KQ@|xA0t9+Zbfq&3h*E-5A+k?sqk8 zdJA1P1>cKYhv(1!H)zybf2Gd)n~=--yf0rN=A9GO9+Km)lH(FD_e+e`8-G!bUy-@A z|JDER(&zDyqE9uw=ckW~qELOe@c69fFsPkeGf{o$=JEZ(7>!TDc{LB +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/10/30 12:36:09 by tomoron #+# #+# */ +/* Updated: 2023/11/02 10:23:45 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void *ft_memset(void *s, int c, size_t n) +{ + unsigned int i; + char *p; + + p = (char *)s; + i = 0; + while (i < n) + { + p[i] = c; + i++; + } + return (s); +} diff --git a/2025/2/libft/ft_memset.o b/2025/2/libft/ft_memset.o new file mode 100644 index 0000000000000000000000000000000000000000..61eeb6a92934e951eb470b498f32cba5f6bd9eb3 GIT binary patch literal 3336 zcmbtWO>7%g5T4!juAMk>k~TCgEo}-76scaPZqiz`6!T+}{(vf^l&JhT{#hp`_HNi+ zr*5T+BB0cYD$xTc4pfK(2M+Xx#D$+jx$q-6&JfQDx>Eqx3_>&onKl<^vKc9Q;yUNStp&WQ-ZSO}n-{19{`Pp65T9^+3 z^t8iciXQ7-(?iBd`I4O z1Fb`6MFWGy4z2|+M!=#$Pe5yn8c@G(CJlx*fx8je5~!1#m#<+d`j^@S4z55`JFj$0VGFBoXf?b#(C7jgk?Gups_m z6K(A?#}f3ggtMNM@JmAH{igk-bs7TC2`<+IX3@&m=Ciqc-nEv&^sTxNX2GdeEgXa! za~Dk4s^o;P=et>_RKjuWaX3OOR?4=8O^bRUBv&kU0%g18fN49vWllXm6ZiaFVG+zq zWx1LqU!2h$@wBJ_tc7gJ%~d +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2023/11/04 08:03:00 by tomoron #+# #+# # +# Updated: 2024/10/28 23:08:30 by tomoron ### ########.fr # +# # +# **************************************************************************** # + +NAME = libftprintf.a + +CC = cc + +SRCS = ft_protected_atoi.c\ + ft_convert.c\ + ft_isdigit.c\ + ft_parse_arg.c\ + ft_print_hex_ptr.c\ + ft_print_int.c\ + ft_print_unsigned_int.c\ + ft_printf.c\ + ft_putchar.c\ + ft_putstr.c\ + ft_strlen.c\ + ft_write_str_part.c + +OBJS = $(SRCS:.c=.o) + +FLAGS = -Wall -Wextra -Werror + +$(NAME): $(OBJS) + ar rcs $(NAME) $(OBJS) + +.c.o: + $(CC) $(FLAGS) -c $< -o $@ + +all: $(NAME) + +bonus: all + +clean: + rm -f $(OBJS) + +fclean: clean + rm -f $(NAME) + +re: fclean all + +.PHONY: bonus clean all re fclean diff --git a/2025/2/libft/ft_printf/ft_convert.c b/2025/2/libft/ft_printf/ft_convert.c new file mode 100755 index 0000000..61cc97c --- /dev/null +++ b/2025/2/libft/ft_printf/ft_convert.c @@ -0,0 +1,85 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_convert.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/03 23:24:31 by tomoron #+# #+# */ +/* Updated: 2023/11/07 23:55:33 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "ft_printf.h" + +size_t ft_fill_width(char c, int n) +{ + int res; + + res = n; + if (res < 0) + res = 0; + while (n > 0) + { + ft_putchar(c); + n--; + } + return (res); +} + +size_t ft_print_char(int c, t_flags flags) +{ + int res; + + res = 0; + if (flags.min_width && !flags.left_justify) + res += ft_fill_width(' ', flags.min_width - 1); + res += ft_putchar((char)c); + if (flags.min_width && flags.left_justify) + res += ft_fill_width(' ', flags.min_width - 1); + return (res); +} + +size_t ft_print_str(char *s, t_flags flags) +{ + int nb_to_print; + int res; + + res = 0; + if (!s && (flags.precision >= 6 || flags.precision == -1)) + s = "(null)"; + else if (!s) + s = ""; + nb_to_print = ft_strlen(s); + if (flags.precision != -1 && nb_to_print > flags.precision) + nb_to_print = flags.precision; + if (flags.min_width && !flags.left_justify) + res += ft_fill_width(' ', flags.min_width - nb_to_print); + write(1, s, nb_to_print); + if (flags.min_width && flags.left_justify) + res += ft_fill_width(' ', flags.min_width - nb_to_print); + return (res + nb_to_print); +} + +size_t ft_convert(char *s, t_flags flags, va_list args, int err) +{ + if (*s == 'c') + return (ft_print_char(va_arg(args, int), flags)); + else if (*s == 's') + return (ft_print_str(va_arg(args, char *), flags)); + else if (*s == 'p') + return (ft_print_ptr(va_arg(args, void *), flags)); + else if (*s == 'd' || *s == 'i') + return (ft_print_signed_int(va_arg(args, int), flags)); + else if (*s == 'u') + return (ft_print_unsigned_int(va_arg(args, unsigned int), flags)); + else if (*s == 'x') + return (ft_print_hex(va_arg(args, unsigned int), flags, 'L')); + else if (*s == 'X') + return (ft_print_hex(va_arg(args, unsigned int), flags, 'U')); + else if (*s == '%') + return (ft_putstr("%")); + else if (err != 2) + return (ft_putstr("%")); + else + return (0); +} diff --git a/2025/2/libft/ft_printf/ft_convert.o b/2025/2/libft/ft_printf/ft_convert.o new file mode 100644 index 0000000000000000000000000000000000000000..5a2ecdbd5fc99f263b5d69004a06600abe65e881 GIT binary patch literal 3968 zcmbtWUu;uV7(ZQc8|+UDP8^C_%}79E!-x-{LbkZ8C#EAn(&z(Z)UIRIu3NTyp`yiM zt>NafWHAzEc+mtB9`|D60~uqGfW8qi@?c_Okd%y=8vAe)N$U4I_nhwRmZ^(ha_>3k z_x--_{?2#)v>zL>HyQ!~rYykrvZawi8Jlli>i39l4{IT2oZG+g!h>+nY4@~IwJp~% zT-&G=@)eeEx?xm6U1Wv4%T9KL=JM4N0OAzptG3}T-s4H5!VA~Khp!EVp6g?^e0<6X zbK5A}`G+?Q7eR$w2Qy#fj!`b`V%GEMIAa}!-vd`7l8t6FV*>M_B< zlsi0Li;gkwFfQSFpTZS%f|SmuXQ46%>H9OZW)WJmX;F_;4^RMEk~>tAGPkXg9luLD z%b__|aFf;vXr>jt=`h>4U2wM^-$Zk}>BMjIe%Ytul29>Qui}zaLG3DJ9MENq)nv>-#swu~#))6>$(R;0X6j{3OBvLzLdN$E zS~UjEaIG@wP_cj|^www+vd%!(W~%q36F;+DRxwwtRu`XwuTGipdE%x(TaCQ!x;!gX z{JbWqIE+-xE}GOr*bCg564+TFK6yt7T6{(_>J`E*6{5Qug*F|YTG4W$;<+V-`;m$i z9->w$6xdlHK82hhp%9FEg>XxS=sLUSV&X&pb=Uvu$@0$LJE7tiOEPyMAIa>aR>>6D zSs*@{I|vdo!KjxBx0H!4$&9Z?=HlL3DYsY~_|zT>Ru?&4l#xRIZi88mH*@)mK+!Hg zbscxl;cHv7RwlEJu`P@xGl}fc$g$M;M0zwE+1VZKj_yQiScliJz=?w_kP8Q%Zf$Cw zrbXRMI3Czrc=fi2KWlist+Bx%hUa??IN4Wt)%@pc{zJgY+Hu1we{gL81myk*PBME9 zy=wkX*N6ndQ~$b0&>Hqfwcf*6kkNVZS(e5Dicr=hJFTP%xEezuEGTiBqA->58yaoU z@{5`f_6a>yG@`E9$$?LL3?Jwe%?bqK3C=cpr#lXxiyf z{CgT6(s1vOlgG#UDE`Y3M}{yR@0U2_;y;(-AJq8kH9WNf|GgFX5sHN&zbuIu_lWlr zzF&@y`0%nEPx^3`tg)$i?Yfq>_E2~|8!`vR#?x7IU^tay(eYF!5j9ge6L@koOZS`T zdK4==kv^JD4Gs{0DNw_r$mtkX)V42C`gvM1PB4<)r7R`>D zspy;g;xA2@iRAmpIh4+129Bo(&0!YJWR8stBnAiRDn81NkEhL)oJeYTU}!uslF}v< zO)^L@6Yo;{!H8&uD7w8pb +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/07/13 18:10:01 by tomoron #+# #+# */ +/* Updated: 2023/10/30 12:13:53 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int ft_isdigit(int c) +{ + if (!(c >= '0' && c <= '9')) + return (0); + return (1); +} diff --git a/2025/2/libft/ft_printf/ft_isdigit.o b/2025/2/libft/ft_printf/ft_isdigit.o new file mode 100644 index 0000000000000000000000000000000000000000..ae4df9efe52b728cf591d60484b523f4321cb8e7 GIT binary patch literal 984 zcmb`E&r1SP5XaxD`2#8>A_O~l45Ej6%8P7-uoxsZ0AK)^5b#h*d73k)4?4?jnn$;Z&~MpTCZtpBhw@Cf^wu4;!_=od}`+4Aw(UcfSP5*14- z?unkqxb9e%uszoF>PDwwv#vvI4%kp?4rQber$ojA#0a=5YYHj3QAz^Tt$~xC n_&%_3W$Hi}f-j8jp8)BC=dZy)@a(90mBI@dQHSqL>(Kt+Hi%8v literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_printf/ft_parse_arg.c b/2025/2/libft/ft_printf/ft_parse_arg.c new file mode 100755 index 0000000..09af1e2 --- /dev/null +++ b/2025/2/libft/ft_printf/ft_parse_arg.c @@ -0,0 +1,89 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_parse_arg.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/03 11:43:10 by tomoron #+# #+# */ +/* Updated: 2023/11/15 14:32:59 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +int ft_is_char_in_flags(char *s, char c) +{ + int i; + + i = 0; + while (s[i] == '-' || s[i] == '0' || s[i] == '#' + || s[i] == ' ' || s[i] == '+') + { + if (s[i] == c) + return (1); + i++; + } + return (0); +} + +void ft_get_width_precision(char **s, va_list args, t_flags *flags, int *err) +{ + if (**s == '*') + flags->min_width = va_arg(args, int); + else + flags->min_width = ft_protected_atoi(*s); + while (ft_isdigit(**s) || **s == '*') + (*s)++; + flags->precision = -1; + if (**s == '.' && *(*s + 1) == '*') + flags->precision = va_arg(args, int); + else if (**s == '.') + { + if (ft_isdigit(*(*s + 1))) + flags->precision = ft_protected_atoi(*s + 1); + else + flags->precision = 0; + (*s)++; + } + while (ft_isdigit(**s) || **s == '.' || **s == '*') + (*s)++; + if (flags->min_width == -2 || flags->precision == -2) + *err = 3; +} + +void ft_get_flags(char **s, va_list args, t_flags *flags, int *err) +{ + flags->left_justify = ft_is_char_in_flags(*s, '-'); + flags->zero_padding = ft_is_char_in_flags(*s, '0'); + flags->always_sign_number = ft_is_char_in_flags(*s, '+'); + flags->blank_positive = ft_is_char_in_flags(*s, ' '); + flags->zero_x_prefix = ft_is_char_in_flags(*s, '#'); + while (**s == '-' || **s == '0' || **s == '#' + || **s == ' ' || **s == '+') + { + (*s)++; + } + return (ft_get_width_precision(s, args, flags, err)); +} + +size_t ft_parse_arg(char **s, va_list args, int *err) +{ + t_flags flags; + size_t res; + + res = 0; + if (**s == '%') + { + (*s)++; + ft_get_flags(s, args, &flags, err); + if (*err == 3) + return (0); + res += ft_convert(*s, flags, args, *err); + if (**s == 'c' || **s == 's' || **s == 'p' || **s == 'd' + || **s == 'i' || **s == 'u' || **s == 'x' + || **s == 'X' || **s == '%') + (*s)++; + } + return (res); +} diff --git a/2025/2/libft/ft_printf/ft_parse_arg.o b/2025/2/libft/ft_printf/ft_parse_arg.o new file mode 100644 index 0000000000000000000000000000000000000000..8d3167d68cca5deea12a0152b4280a6904c6735b GIT binary patch literal 3160 zcmb_eO>A355Z-5}iBrK$%v?O1P>OG6auoS5RqeSCov>;WUpI; z_^I?-V2clyy;RDB1j>ZNrw|CA-@lI)?vO3ljEQnp~hd~;sG_jIw)$7D_R|8)YJ}W ze75c_jd(T{{ol!=_K10s)xG?1MLWc38mCRIu9p=lNxyl zEK;Y&Yz>ZXQj>T~L~p*FpW~hw+P+B)?SbBW>H2fjoZUAg4`_Uwx~F~mw#Rsy8rojt z3<{_@?V-jt1(+IhFtk0euxEPUTQ}%v149G*A)Y?to`5lv*0Dl@=_Ez1l7FTxLXUVV zD(hN>r^08+JXF7@P{Y&s1?^SBeu%s!Z&UNJHXBytz_u{3vIuO;jFcULZSugjjs~^~ z7B@v;{>De`1Her+|8|=#C_GlZN!VEn3{kyefg%C^##10d&+%$3t#(kP(KkCA`3voH zcmb+KZG-j5*v7iH(KBOr@m#$y`h*>~R{ke>T-7SXjjrgs3-dePb74_0!QS-}Douj6 ze5rWjc+sVxLqG?FWWp(F?+G|1BVx~ar^GG+C|J>fRrao>EimZ6DtoOPgYK&`NAjTe zs@=)6IVO2Ma`9U1a`4~cyqa2!b6_?bTG`_}dPi9y$|pkc|T5C?k21s@@IUvQxU z?)?~rKtX(B+wuuT$iL)LLO$q{U*U3FbY$89WPtqBIwAnTP0*2U3ITgc!g(x!&Di+9 zt=fnKl!Nol8S{jW5Tt(NwyFp~Cf4f-OhavdMS~+mfj1 z3`?qSU5QNQSSNLLWHgptBI?S@wbf`Wk$|QKj=Ps!jxJ_n ztH~}+HBQtV%d*%fFn_*^^Z!95Fk)YAm$^avKk$ARN{;+9Vhv(x<1ACyW^^oGiJU!y zd$A`ZiZ?MDZI~pn28xL%Y7&q35^Zfq+RbMHB literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_printf/ft_print_hex_ptr.c b/2025/2/libft/ft_printf/ft_print_hex_ptr.c new file mode 100755 index 0000000..c957134 --- /dev/null +++ b/2025/2/libft/ft_printf/ft_print_hex_ptr.c @@ -0,0 +1,97 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_print_hex_ptr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/05 15:58:57 by tomoron #+# #+# */ +/* Updated: 2023/11/05 15:58:58 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "ft_printf.h" + +int ft_calc_hex_len(long unsigned int n, t_flags flags) +{ + int res; + + res = 1; + if (n == 0 && flags.precision == 0) + return (0); + while (n > 15) + { + res++; + n /= 16; + } + return (res); +} + +void ft_put_hex(unsigned long int n, char mode) +{ + if (n > 15) + ft_put_hex(n / 16, mode); + if (mode == 'L') + write(1, &"0123456789abcdef"[n % 16], 1); + if (mode == 'U') + write(1, &"0123456789ABCDEF"[n % 16], 1); +} + +size_t ft_print_ptr(void *ptr, t_flags flags) +{ + int len; + int res; + + res = 0; + if (!ptr) + return (ft_print_str("(nil)", flags)); + len = ft_calc_hex_len((long unsigned int)ptr, flags) + 2; + if (flags.min_width && !flags.left_justify) + res += ft_fill_width(' ', flags.min_width - len); + ft_putstr("0x"); + ft_put_hex((unsigned long int)ptr, 'L'); + if (flags.min_width && flags.left_justify) + res += ft_fill_width(' ', flags.min_width - len); + return (res + len); +} + +size_t ft_write_blank(int blank_len, t_flags flags, char mode) +{ + size_t res; + + res = 0; + if (blank_len > 0 && ((flags.left_justify && mode == 'A') + || (!flags.left_justify && mode == 'B'))) + { + if (flags.zero_padding && flags.precision == -1) + res += ft_fill_width('0', blank_len); + else + res += ft_fill_width(' ', blank_len); + } + return (res); +} + +size_t ft_print_hex(unsigned int nb, t_flags flags, char mode) +{ + int blank_len; + int zero_len; + int number_len; + size_t res; + + number_len = ft_calc_hex_len(nb, flags); + res = number_len; + zero_len = 0; + if (flags.precision > number_len) + zero_len = flags.precision - number_len; + blank_len = flags.min_width - zero_len - number_len; + blank_len -= flags.zero_x_prefix * 2; + res += ft_write_blank(blank_len, flags, 'B'); + if (flags.zero_x_prefix && nb && mode == 'L') + res += ft_putstr("0x"); + if (flags.zero_x_prefix && nb && mode == 'U') + res += ft_putstr("0X"); + res += ft_fill_width('0', zero_len); + if (flags.precision != 0 || nb != 0) + ft_put_hex(nb, mode); + res += ft_write_blank(blank_len, flags, 'A'); + return (res); +} diff --git a/2025/2/libft/ft_printf/ft_print_hex_ptr.o b/2025/2/libft/ft_printf/ft_print_hex_ptr.o new file mode 100644 index 0000000000000000000000000000000000000000..afc3504057e5f517a42d14ba6a5e199c716af6b9 GIT binary patch literal 3520 zcmbtVZ)jUp6u)We*3Py`XLTL^S#(7<%N}jFxej%_c6;-}5*b2q9~@blCTm%mmhPpE zVzxnK_VFl)BKCv$hk@W1@tY#jwY025K^gl})DK}OL>5^J!vz|s=iGO0a`U=M!2|c5 zdw=(L&OP^>d+)n!1W(p^JWPs*9b?szL_t4V?dzhe1LR=?-1?Kx7=CUUIc{Z&%SHjs zc{WpIsmHi&`MYAyH@V9;3fXy&WfXu^`{q&)^61((XFSN3f~jZ0Ux{aPK0b38 zaqhWs9YgvaKMHeT3rwC}@}FId$K#rB&%5YM#-rEnS-5rfd=&T0XI?=vw;QD)`^aG$ILQHe=Q0&7}}ZQmaMD=k=unjD^$p)+nD)+822)Xx%SI8FW!X%bU5bNYKHJO8MyTRiw$x|tBqVjpLHbku0!i01 z5mO$H)p}}|oho1NszmRFgM^3ZafAaKV5kQWvP%IdsVlzI`t&N5bOqxJt=XZn^~=^v zu>y7AQD{~uM>~Tezho3HHN&ba(C@^94aJ24Z|e*dJ3|F4bl*PhzjenB-QRx;2bueG z{Sfw+mgV9ItZ;7#E?x+(nV*?^F`MSoPRfF*wwg+N@rL3NGgdZ|2OdtgQ$;1e?iJx; zZxbuFzJhOuZOk~|-nj7?k|8A}Fwy0vbt2Nq|nO?(;iy!|@!r2U>Jo3=N+ z4==$}fMY{>6F+?|{;PGzo43`y0SssEWyC?mNv_OauFMNNnBRvli=6lF^&kO#zXJ{B zWBkbZx(_P$pCAr0TVwyBuyNdb90P%o@lve8eL%1AE{Wsyy z5pNsmKM3DPV=w972=8>^P!qOOiAUxNw~F{V;)~ou{~9zuVX8U>1LTXh0{SA?ppQU% z82`OZ@B^FR!+@jz0HsdU3a}=^=Lr`z0_-X@6wGKNwDP(mpCSl?bj*#!zd;ZL`8%LV z{3e1R$j3Q}|B4`po4*?q2ZH=Zph^BQ!jX?LOWag&IL;OPnu0eg__vCGthw~_gTil7 z@E;Xi&BLmKtNy1cj~J(lf3^v}uHb6?lXURVk57r`3&PP%jsHu9ug3qg!r!j=xxEQL zui$F@tr!RhDm4%N3a-W(Kr#r%Nm~?SU3{zfIT}kX`SKoIp?Qf1$l2#Ee4g-z#vM(~ zEj|`E!{aG4JRD1l?!-va8E6x+L_{-VX_INuvC+|3(j@LhbD~Pcffm$iuyKbFjU=Mz zH=Kwi(O_y~#EgXp;bFeOwB(o>(_VdT;J`&Q61{-a@sUI#JT)?84l^y0m>dm9hKAtv zKF@?5bK;2&hvO5G(O5MATmTl-q6~vDBZHvd8WmcEr5&R9w1cwKBRk#Tb!;eNM$i;~ z5tOR`rG5fyIvO>8?%`noX`%bzjPNb4m1kgxn0#mDtWKRXbdDtMe)D$21X6TKAl-$B z8bqi1yh|wUj$-&D!S$WLC4r!3XJC7$-{s=nAp0j=xU`dcitJr9 z_B+|TacL*9luCP +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/05 15:52:46 by tomoron #+# #+# */ +/* Updated: 2023/11/05 15:53:56 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +int ft_calc_signed_int_len(int nb, t_flags flags) +{ + int res; + long int n; + + res = 1; + n = (long int) nb; + if (flags.precision == 0 && nb == 0) + return (0); + if (n < 0) + { + n = n * -1; + } + while (n > 9) + { + res++; + n /= 10; + } + return (res); +} + +size_t ft_putsign(int nb, t_flags flags, int sign) +{ + if (nb < 0) + return (ft_putchar('-')); + if (sign && flags.blank_positive) + return (ft_putchar(' ')); + if (sign) + return (ft_putchar('+')); + return (0); +} + +int ft_print_signed_int_blank_sign(int nb, t_flags flags, size_t *res) +{ + int blank_len; + int zero_len; + int number_len; + int sign; + + number_len = ft_calc_signed_int_len(nb, flags); + sign = (nb < 0) || flags.always_sign_number || flags.blank_positive; + zero_len = 0; + if (flags.precision > number_len) + zero_len = flags.precision - number_len; + blank_len = flags.min_width - zero_len - number_len - sign; + if (blank_len > 0 && !flags.left_justify && ((!flags.zero_padding + && nb != 0) || (flags.zero_padding && flags.precision != -1))) + *res += ft_fill_width(' ', blank_len); + *res += ft_putsign(nb, flags, sign); + if (blank_len > 0 && !flags.left_justify && flags.zero_padding + && flags.precision == -1) + *res += ft_fill_width('0', blank_len); + *res += ft_fill_width('0', zero_len); + return (blank_len); +} + +void ft_put_lu_nbr(long unsigned int nb) +{ + if (nb > 9) + ft_put_lu_nbr(nb / 10); + ft_putchar("0123456789"[nb % 10]); +} + +size_t ft_print_signed_int(int nb, t_flags flags) +{ + int blank_len; + long int n; + size_t res; + + res = ft_calc_signed_int_len(nb, flags); + n = (long int)nb; + if (n < 0) + n *= -1; + blank_len = ft_print_signed_int_blank_sign(nb, flags, &res); + if (flags.precision != 0 || nb != 0) + ft_put_lu_nbr((long unsigned int)n); + if (blank_len > 0 && flags.left_justify) + { + if (flags.zero_padding) + res += ft_fill_width('0', blank_len); + else + res += ft_fill_width(' ', blank_len); + } + return (res); +} diff --git a/2025/2/libft/ft_printf/ft_print_int.o b/2025/2/libft/ft_printf/ft_print_int.o new file mode 100644 index 0000000000000000000000000000000000000000..d899bb879bd71f1c30c51fd51095fe9fef55da60 GIT binary patch literal 3000 zcmbtWUuauZ7(Z#cHgVk&rEXz57qBl!L5+%fq?8+%FrpQsSyu$3i*$R!@rdy-i=*e1ulDajBdkVUKnVD`%({~tUoR92TI|gG2zu{pH7|?&8@AbIP=Eu>i7>mTk2wtZ zSYHGLsBo+=?xYg-t9=Pxm`yjo3Rz~Gd`RzIJI$Q*25hfJaBCcgj2l>K?4vc<%B-CR0`YLNTsCUn8u^!C#R?E7imrcKLilBJ70ZNM^PjqkgEjWVYhV3pvNLKp~o!u9NI0 zHhAIzXs(!@;_MiW)dMuN3DddEr?Y=P(0LQ4XS&hF6Ohs6Cu;Cl_V7NlYhIeY=*khC zZtRDVxTm%5#K+fTXXLz7V%~L__hDzvKE?yeauiMoG!jo6Klv>@`7Nlbj*(UjnBHMd z4tAw(r(OPC@hR$2=9n#BFMeiA7tq2QCi*ZJVA}dg$8ePfhM^v)Y3oUZlYYk~jAy<9 zT}_Rz4-5`H|H6weof|$+NUoSIO(hrem4%sdDLFK#4QfN!Eu>zLk8 zas#e`rvb->G>?x9$KxM#ymG9oV-_qt-3a19IzD`T+1I~?IM7YJR-`_>5<&xveGQdB zX?#e12lM?uLmY^I&c6Nu*L#}%&mRHmB=>jrYX}LGj(zZRfP}z9(orES0DnTU=RE-I zb%D!0e|Nw}VZ~tu=}iDIPD?0wFF^hj)}!nPg#8UsD(?+oJp!)_oc9EOfok^rZbI1y}8-55T`s@Td~!7l9)S zEBJ4Uz52c<(FiD5e_p}6K`-mH6kN^wrGl&VuN{CVF)0w1B}(J_6o2mG^J4#Y0GH=t zIe^Rge;&Z){5y|ybw{E^tK^GWP0v?#QqVK=m6?*BS(uqB#`3W6;CB)_g;s_A** zuVN@mKZ$?uVe{%YgSwRP|5h3bF5h3mw?IJClmrA{7W1o$J@yYF=`Z{D1z_Q^oieax fSU$PJU(OZ%k%IN#1uR%Q+PR|sh;TrLP%!_0yRnzy literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_printf/ft_print_unsigned_int.c b/2025/2/libft/ft_printf/ft_print_unsigned_int.c new file mode 100755 index 0000000..e324164 --- /dev/null +++ b/2025/2/libft/ft_printf/ft_print_unsigned_int.c @@ -0,0 +1,55 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_print_unsigned_int.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/05 16:06:48 by tomoron #+# #+# */ +/* Updated: 2023/11/05 16:06:49 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "ft_printf.h" + +int ft_calc_unsigned_int_len(unsigned int nb, t_flags flags) +{ + int res; + + res = 1; + if (nb == 0 && flags.precision == 0) + return (0); + while (nb > 9) + { + res++; + nb /= 10; + } + return (res); +} + +size_t ft_print_unsigned_int(unsigned int nb, t_flags flags) +{ + int blank_len; + int zero_len; + int number_len; + size_t res; + + number_len = ft_calc_unsigned_int_len(nb, flags); + res = number_len; + zero_len = 0; + if (flags.precision > number_len) + zero_len = flags.precision - number_len; + blank_len = flags.min_width - zero_len - number_len; + if (blank_len > 0 && !flags.left_justify && flags.zero_padding + && flags.precision == -1) + res += ft_fill_width('0', blank_len); + else if (blank_len > 0 && !flags.left_justify) + res += ft_fill_width(' ', blank_len); + res += ft_fill_width('0', zero_len); + if (flags.precision != 0 || nb != 0) + ft_put_lu_nbr(nb); + if (blank_len > 0 && flags.left_justify && flags.zero_padding) + res += ft_fill_width('0', blank_len); + else if (blank_len > 0 && flags.left_justify) + res += ft_fill_width(' ', blank_len); + return (res); +} diff --git a/2025/2/libft/ft_printf/ft_print_unsigned_int.o b/2025/2/libft/ft_printf/ft_print_unsigned_int.o new file mode 100644 index 0000000000000000000000000000000000000000..85a7c3b95184ab2f824eccce306feb4aa3e3a079 GIT binary patch literal 1840 zcmbtU&ubGw6rN4e*oIbvRt+i|C5SY**y2G^WQ&gOA@NWsda!KMWYb1Bo09C-D5MGt z!m<{;`4Iq_wY|t*& zw9d6KG_rEcp>6AvVAHlkJ0D^Yn*9E2+oqk?CPZx7b!c~P{lF>7>u>#(*czL5qw6%f zvNJ5(qbb>u!Ddp!;DCZmD(*-L`$j6!#MSK2AYjwZZpnEVcD4!PkcXTrbZd1Cqu{6M z7U=LM<7wJ<=N;U^>P2L&OT@U1G%GAnXly1-I`6>&tb3qJPq14AKGpnzHppnp-D% zEvGLgSJY~)RMC@Dlj5W}MaDroLU=qwgnC>!KDuxC1zhn7;BX-B;b(e({8{MwSTuA8 zGQ8MTjXUyyQ{+EFZXL=PdPhsq!!|ItKSdR$me*;`lJLc6H M$k literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_printf/ft_printf.c b/2025/2/libft/ft_printf/ft_printf.c new file mode 100755 index 0000000..19a0964 --- /dev/null +++ b/2025/2/libft/ft_printf/ft_printf.c @@ -0,0 +1,67 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_printf.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/02 23:41:38 by tomoron #+# #+# */ +/* Updated: 2023/11/08 14:51:19 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "ft_printf.h" + +int ft_check_placeholders(const char *str) +{ + int err; + + err = 0; + while (*str) + { + while (*str && *str != '%') + str++; + if (*str == '%') + { + str++; + while (*str == '-' || *str == '0' || *str == '#' + || *str == ' ' || *str == '+' || ft_isdigit(*str)) + str++; + if (*str != 'c' && *str != 's' && *str != 'p' && *str != 'd' + && *str && *str != 'i' && *str != 'u' && *str != 'x' + && *str != 'X' && *str != '%') + err = 1; + if (!*str && err == 0) + err = 2; + if (*str == '%') + str++; + } + } + return (err); +} + +int ft_printf(const char *str, ...) +{ + va_list args; + size_t res; + char *s; + int err; + + if (!str) + return (-1); + va_start(args, str); + res = 0; + s = (char *)str; + err = ft_check_placeholders(s); + res += ft_write_str_part(&s); + while (*s) + { + res += ft_parse_arg(&s, args, &err); + if (err == 3) + break ; + res += ft_write_str_part(&s); + } + va_end(args); + if (err >= 2) + return (-1); + return (res); +} diff --git a/2025/2/libft/ft_printf/ft_printf.h b/2025/2/libft/ft_printf/ft_printf.h new file mode 100755 index 0000000..dfffefe --- /dev/null +++ b/2025/2/libft/ft_printf/ft_printf.h @@ -0,0 +1,46 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_printf.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/02 23:42:00 by tomoron #+# #+# */ +/* Updated: 2023/11/15 14:31:34 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef FT_PRINTF_H +# define FT_PRINTF_H +# include +# include + +typedef struct s_flags +{ + int left_justify; + int zero_padding; + int always_sign_number; + int blank_positive; + int zero_x_prefix; + int min_width; + int precision; +} t_flags; + +int ft_printf(const char *str, ...); +size_t ft_write_str_part(char **s); +size_t ft_parse_arg(char **s, va_list args, int *err); +size_t ft_convert(char *s, t_flags flags, va_list args, int err); +size_t ft_putchar(char c); +size_t ft_putstr(char *s); +size_t ft_strlen(char const *s); +int ft_protected_atoi(const char *s); +int ft_isdigit(int c); +size_t ft_print_unsigned_int(unsigned int nb, t_flags flags); +size_t ft_print_signed_int(int nb, t_flags flags); +size_t ft_fill_width(char c, int n); +size_t ft_print_hex(unsigned int nb, t_flags flags, char mode); +size_t ft_print_ptr(void *ptr, t_flags flags); +size_t ft_print_str(char *s, t_flags flags); +void ft_put_lu_nbr(long unsigned int nb); + +#endif diff --git a/2025/2/libft/ft_printf/ft_printf.o b/2025/2/libft/ft_printf/ft_printf.o new file mode 100644 index 0000000000000000000000000000000000000000..23b691127acf5d3400527be6ded300544b9e538b GIT binary patch literal 2104 zcmb_c-)mD>96vYdnmD32PB(-N8xW^Oy|yx#4`YjytLLHW7!*2&#A|Y!2J>slN!JZ8 ztKL>j>lI%Ldl~DC&_@wuJ`}moLi#w^%l?6ZC4H#14-tyl_j_{A?P*%y{KCoSdp@7< z`R4omo|F7$4qXaq8j+@vugUgKvV=VUVB1e}H%UH($YEOlkGgAdT6bCva}yOhYqloO z6MgC-Bx>@l{vtZ)yKl&S^EHd3uD>8|>$pDW12bd3UeIcx<^dF_>ua=bwwfzS*z`A$ zNmV;q^oi!aIdk9KU_U6t01{Lojv?`-LL`v*Tp>;&@o|SZ{}Ov}TZ9+4F=KA<;trxJ zi(9?jZnrz(5SeDxz^}4w;FsBtfuCX50-vypfuECwL7o~r74Q?RFYrg$p};@RA~0pV zAf#Z*wf(NMNovT31lyTyErt=Y;wD+O-?rPc<|cKQHW_9P~AHT)KGmo0YK~C5e{>44$q<-oOS9t z>!cQIm|H-!R~N8Q&-|Nu9^nx*PQ5GeglM#p>=^*HL82JbFjoMu)pd9iKAm-Zemiw@ zk$S?XVRHpUd@erBgMC508f12S>J2aQXc^%;i(zl^H8vxVZ>4T- z&6->E&N7bY`VvX!tztGYZdaCT@i9Ui;p8<~x z?JvBy3kTx&LKpY!nLosO33LQ`U$QJX%{>IriZ+0?-GCr6MPCg4eR_!;dw2< zoq!eJ8OnE6_{4Z0YXal70mfkM6+iM0{vY7cdc@){051I}Q6lnTSdw=XzE|P@RQQO( zKUa7)J^?XkD2oujPx8-gUiKI6>5UMhV&^S`*%OS6veeI&9J5nZR!Nnu3L{3kR4CX* zF6FA3TsFtu^q8H#l`7}0v^`eJXW(rRqgZ0Larx@-nJTl=w=frEsM;y3k|jnyKVC># znG8IlESD;|A{!OoZI7i!D^|hY7K}78pay2$1pK9d_&)4+NP=_kwwU;zU+5CVGYD9m zHFAimCBi2O2hUbv#{{H^~AX?gA literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_printf/ft_protected_atoi.c b/2025/2/libft/ft_printf/ft_protected_atoi.c new file mode 100755 index 0000000..09dcfc9 --- /dev/null +++ b/2025/2/libft/ft_printf/ft_protected_atoi.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_atoi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/07/17 13:41:15 by tomoron #+# #+# */ +/* Updated: 2023/11/15 14:31:19 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int ft_protected_atoi(const char *str) +{ + long long res; + int inv; + + res = 0; + inv = 1; + while (*str == ' ' || (*str >= '\t' && *str <= '\r')) + str++; + if (*str == '+' || *str == '-') + { + if (*str == '-') + inv *= -1; + str++; + } + while (*str >= '0' && *str <= '9') + { + res *= 10; + res += *str - '0'; + str++; + } + if (res > 2147483647) + return (-2); + return ((int)res * inv); +} diff --git a/2025/2/libft/ft_printf/ft_protected_atoi.o b/2025/2/libft/ft_printf/ft_protected_atoi.o new file mode 100644 index 0000000000000000000000000000000000000000..7d684e01b8858956f8490f4337363f4bed90071f GIT binary patch literal 1240 zcmb`FPiqrF6u@V)wMn#XLJ<`d+?$8eCFw~o5|Pn86a}GplDKZRwIrJjn`vo_wMsy; z>BVDDo(mq-FCYOA`5b8@EaVbz7J}=0+nIE;?$HOc@4er=KQnLkfUQ1CQA(sxa-Upy zk`i*1y0A;3St418T+_Xuy0<^ld(21NV*^ar57{X9J@b{e&eS$L<#z-qc3WrJHamHf zKL@1sdp`H63#7wNAh5$ukLgxwxPaSwt4no{jfUSQ!ApE@VlQvqj@aoc8w4I3OeM;5 zVB12Q^&@TXg>CyC)(;yl=~d=mhHk#B=@;}PT>)RP$!R|8@Av&62oBz6du;p%tlY>Hh%Ggm^Gump>A7lbJMA-D@CoSt>ApF;s=E8JtK4{PjAkpGaq4Mw}9b7 zxsDTju#o?ddN@C;EK&#wdD7=8z!~x@NZM0K{908Ah@TyEjz!>0bU@I>cb0Wz|Gx`{#kl|g literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_printf/ft_putchar.c b/2025/2/libft/ft_printf/ft_putchar.c new file mode 100755 index 0000000..84bbe70 --- /dev/null +++ b/2025/2/libft/ft_printf/ft_putchar.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putchar.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/01 04:10:53 by tomoron #+# #+# */ +/* Updated: 2023/11/05 15:51:33 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "ft_printf.h" + +size_t ft_putchar(char c) +{ + write(1, &c, 1); + return (1); +} diff --git a/2025/2/libft/ft_printf/ft_putchar.o b/2025/2/libft/ft_printf/ft_putchar.o new file mode 100644 index 0000000000000000000000000000000000000000..cb9dc9d492fefa5a4d596a5a6a634fa78d2ab1f4 GIT binary patch literal 1120 zcmb`F%}T>S5XUEN@rx=!R0I|J0J^9rPbH$&3L>KPC^g3P1Cz9*+giOS3Q`Y(k0V|b z^g+A`9=v$-AjFwuH!ii_{KM|d{B~w%cayW+=2}A2KuUuw{6vxhyeQBJu>nJvS;$|% z<}crMqx0Fx1rL;!zi9^d1@ZX^>`VS{~7_5-Y=fWlW&>5A7mP!AH<*ISGkhcpS;7!oyz3vN-f# z*#I+wrO?v&3L<3$rw(eD6foa*Ovddt2WHh=*Y-G+c(LB(R>kyzc{Ogc^{v8OgPYb7 zFvn@RMf30wAFB+j~H21h6v<4%eC&erdoPmLna8jBpOYMcn~eUxBMq0Pa~t$c^s-75lpBMeX(t9 zGYV5vFVsNsWxYfj=pd`p*;I8zu%trt<@qIEMW@&Ow?!j)Pr5(7v8 +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/01 04:13:29 by tomoron #+# #+# */ +/* Updated: 2023/11/05 14:42:32 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "ft_printf.h" + +size_t ft_putstr(char *s) +{ + if (s) + write(1, s, ft_strlen(s)); + return (ft_strlen(s)); +} diff --git a/2025/2/libft/ft_printf/ft_putstr.o b/2025/2/libft/ft_printf/ft_putstr.o new file mode 100644 index 0000000000000000000000000000000000000000..9e171d91571b98131c1d1006872f73600467b42f GIT binary patch literal 1224 zcmb_bPiqrV5T8xbYD<+xtOykvym|0pda52IQe)qt^-$Tuncw_o-k*JYP+EJF@jMXo;3bSB zVF7ez>=y@a5oS@jsXIS)`?s$74|@7ab;$U_KC3@WZ!qgLN;K5f{b@)1-R z?nmWdYYVS`2R6XYztL&T z6G!M;kpuZ|l1qO(s-=4_ih!}o3u%sL5b56KjXh+34w0nKI2Jf$=YbH6+;;S@JwaYL zS9;gb)M*Z&7iD16rd literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_printf/ft_strlen.c b/2025/2/libft/ft_printf/ft_strlen.c new file mode 100755 index 0000000..e9f507f --- /dev/null +++ b/2025/2/libft/ft_printf/ft_strlen.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/10/30 12:34:41 by tomoron #+# #+# */ +/* Updated: 2023/11/04 08:19:20 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "ft_printf.h" + +size_t ft_strlen(const char *str) +{ + unsigned int n; + + n = 0; + while (str[n]) + n++; + return (n); +} diff --git a/2025/2/libft/ft_printf/ft_strlen.o b/2025/2/libft/ft_printf/ft_strlen.o new file mode 100644 index 0000000000000000000000000000000000000000..ea598d765d7a7402854896e31d9ada029b9cce7b GIT binary patch literal 992 zcmb_aPfG$(5T8|3qd!PQM0MD6)FVB4s4!yFgLNo8McB5k7VWN~53wMUf=Imd5&9@X zhdxOVbPD$1&1Tkp`P}T*z`U9H&HQHGzS%o1zZX&z5Td{~3?qR8yhvcigEKIRm4#gU zJ=ebNy=g9?xsKNB?7OYaIPj^C=00?lw&s3*pnLKPhNU|dwPDuk7ga}1C0UZCyj}qF zzEy4xL1`wG<>^@b8E38_PD-*y$IfixF|<1qtzZGge@GVb2z>R&rNa>V1t$=hlW=bq zVya(Bj1d;&W|IRms95O{XvU9 wNW2MD!58={V&Qzhil&A7BjWu9Ab7$1A7erA?!@WRfpY4dgEyi*i#}rhH#4+R0RR91 literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_printf/ft_write_str_part.c b/2025/2/libft/ft_printf/ft_write_str_part.c new file mode 100755 index 0000000..3dc57ff --- /dev/null +++ b/2025/2/libft/ft_printf/ft_write_str_part.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_write_str_part.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/03 11:16:38 by tomoron #+# #+# */ +/* Updated: 2023/11/05 15:50:41 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +size_t ft_write_str_part(char **s) +{ + size_t i; + + i = 0; + while ((*s)[i] != '%' && (*s)[i]) + i++; + if (i) + write(1, *s, i); + *s += i; + return (i); +} diff --git a/2025/2/libft/ft_printf/ft_write_str_part.o b/2025/2/libft/ft_printf/ft_write_str_part.o new file mode 100644 index 0000000000000000000000000000000000000000..ecf128a4c9abba01a4738ec0fe9052c4319a51b0 GIT binary patch literal 1224 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 T@Z0lQ +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/01 04:10:53 by tomoron #+# #+# */ +/* Updated: 2024/10/29 20:36:57 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_putchar_fd(char c, int fd) +{ + (void) write(fd, &c, 1); +} diff --git a/2025/2/libft/ft_putchar_fd.o b/2025/2/libft/ft_putchar_fd.o new file mode 100644 index 0000000000000000000000000000000000000000..2fcbcea5e33284b18480b573b263218447039926 GIT binary patch literal 2936 zcmb`JPiP!v6u{p%v$OfL?Pil$(;97pX0;&Bri*_{Tk49W-Dv4SXh1}^v%53N(%qe~ zGl@}<3WbuQLcNGcFCILK(vyf_p`JW>6Fhhjg&-dE7EoE=n|aTC{hTO>4`$x`e&74v zd-KhkZ}-a5`LmW%Afn(5?2Uv1oXGFlwZyE!A@sahzy4$W>d&Rx_U`u5@cPE?o3HQI z-`*I0MnQJSv3~W-(#v<$q$-!E9lJc3Db385CugVf(F}m)Dl%(_?efXOslp>io<0I# zJ76(bo(9M*fL%UQC=@W*b9gzRMk%m@2lh&};21HK)KV)p6m9FBD>*1GAw_d555;Bj z$T@kH8*y^5fCGofzeua=^;hRN{Xx_T`}5V~?s2yYLEKp1h+Avkpb@m)7F5>4o?nT> zUghy>qwPnR<8Zy=g{?|;vHC=%TIqJ0L45ZrXaTK%(u`1SraeH@f2#M)NjRur08Ygg~lA2 zV5>Q6!a17Q@M!Vmhl`DCJ9kc7?|<>bcl{i|m_=SBc2PMK3_=Dc$-m@~kLF zIRZTaW&eGcigX7tn|(-4vQ3=Uh~FWN>rXwWar(5yUo^$hKMm?l65$e8Y8PHk-9Y+N z`18yUvljj$kELgYzr=jr@V~_41%pfXNd45hdRNS|KQWy@$ei-ZT0*YDALenLwHbdL z+_vA`SZ#RC=D^~9qRHkH(#VC6JO3-C)x}OBFPLHBJNc}}j`&mjRYssC@KDJ3op9-2l zgT9lR0M_quQPQWBhx$c&LpbF&YoZWqbVE6ps=w~0Zx?4wM$RAeiVLhonZBzykyZaE zT>m9rNcGc}n)M$;X2zr?f6xtu=5;ZBAHvD3{3U`Yx05?0=K!5MX8u#iDCQ#ji7Im< zdOlqwzi2ui#Mb@ZVraf^({}|IW!3*R*Dvpx_D??>gx|;c&H8V0qI>nC*q4yhv8CC> zMQ(|M0M;hHg&f&B^`1*GU-g<1cf+GXt$ literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_putendl_fd.c b/2025/2/libft/ft_putendl_fd.c new file mode 100755 index 0000000..8d6b9c5 --- /dev/null +++ b/2025/2/libft/ft_putendl_fd.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putendl_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/01 04:13:29 by tomoron #+# #+# */ +/* Updated: 2024/10/29 20:39:37 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_putendl_fd(char *s, int fd) +{ + if (s) + { + write(fd, s, ft_strlen(s)); + write(fd, "\n", 1); + } +} diff --git a/2025/2/libft/ft_putendl_fd.o b/2025/2/libft/ft_putendl_fd.o new file mode 100644 index 0000000000000000000000000000000000000000..329df5909189173346f97f254c4f6ff70996f0d6 GIT binary patch literal 3392 zcmbtVU1%It6h1SvGrOBjHc3;Hv{AFxu2!(K?b6yb)tFeeozx&P+Cqdf&hE}8OZO-2 zPByV6R1HX%ASi<9qfgZbLHg)J5nCU97kq6Ypf6&CK!teD>^;rRbP5Fz+&$-f_dEBT zd*JY^))+ylJ(67Vehy=}DUSky84YwSG5s`A!!o{YpALplj*I zP~Xr61 zgTkWI0Nb9Lo12=q-)Y^4SN!f5-wm#={PWT9g>O%vjbL+CVv%S`MK`+c>+zP}W0drRAM1S=bnTuVH|FtM zy{aolBDP;OaOo%OTCmrhERX*Fj!*>t+Ie&aYr=yP6zYY75iBx8lW?9Vtv%-0XklN; z=Xc5B4{Z(bdW47u{UIpjr8}}$enoemv@gCU*AegAOZB~*kHKFOTMLGA7|Y z68?t3sb89e&j_5>k@vIld`sxy`aRuX7Tx^vg6-t<4Yvhm!>u@`=dOBS7V6ci zi%(Vu>(H8B!>*S~P1kF3BtmRf$~D*a{Tb6&{%RsYv4}hgDA!7LdL@xqacf}K>Yi(! zf9vAWrsou{fLW=us*md6UB8_kbt(+_2w^2A!)( z286yL4%_>}r+Y)^iO(b7hX;sJ{wxkzz7&pp1_|Q&WzDu6|CMlBGAP9}+zi2JE-4nR zGEwMYt{UQD``--Nzx+P&{^{NZ*Q8X}1o$#Jk_5TW<6KyNOFWXliCF4C^*-4DGlC zSp7FdL055JmLT_goD9pqDDqn(nDWzqZ7}~i#AwZ6|5foQy@GSHaDLWb +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/07/11 23:27:29 by tomoron #+# #+# */ +/* Updated: 2024/10/29 20:40:28 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_putnbr_fd(int nb, int fd) +{ + if (nb >= 10) + { + ft_putnbr_fd(nb / 10, fd); + ft_putchar_fd((nb % 10) + 48, fd); + } + else if (nb < 0) + { + if (nb == -2147483648) + write(fd, "-2147483648", 11); + else + { + ft_putchar_fd('-', fd); + ft_putnbr_fd(nb * -1, fd); + } + } + else + ft_putchar_fd((nb % 10) + 48, fd); +} diff --git a/2025/2/libft/ft_putnbr_fd.o b/2025/2/libft/ft_putnbr_fd.o new file mode 100644 index 0000000000000000000000000000000000000000..b7e5b79c88e487036ed5a6ed7a9803e2c88440f4 GIT binary patch literal 3632 zcmbVNPiz!r6n`_b-|W(D%eDndsYw5_|{tabwE18}J0)$qQsz8%2Ov_l;LfnLN0u?n#ZjOa)>jHXFuI6Q)8(9$S6 zvE7JL;0s-^bpeC~=n|kIAd5|a<}IQIPj4)-u3g725}hUn+x0KNcm<6BEkrX2!_>?` zC>Zp3+A#sGA^nrHCbVX-AI-T?%>)q?0oaY8!1g4PnM#!=duE+VwNNhg#QUv&D-Jo= zo}O__>584pS{aDt%S9*VmW#20xSe&Xr`+;%ELG0L;(hVGv3P8%kj}Y~$)_q{+Xs#u zIWS?redze8{m#VUQQNK?4N7S!lw8PVVGEWgz*~&^LK~LkQ7D8&J97lIxro-?91MMo z2lXk$sF8Rpd7w4&q5gV{sb50|z%9fn)gWq3(^gwsNYM$$hQ?0sup8P=eY1GRvtjk- zMg4<^!`FV9&9AnE&b0&pHt87PiP5TwO-(4U1lj zFx^}btuYbIizagn?Ev<7nxTHr*kXPzc9>%#K)mCkz0V(RoV*}3Gi>x)x`|~z**5t0 zj!SN+e?~L_zpppyG~m&6A9Wu?OT!43W;Re83a-G2H$I9+qpkPGp;zN^F@T^>tgMrsnY2^sbj6tktKv+hEZ3QH z!OE12MF-#18djrK-HKh#<*JTbwMgI)^$JBM<4~L3! zQ)$%i7d>4mXH#y9VEjSxD*k`{5JTx6`ejKT;%3?aMSQMzUJ0YSqe?=a=iE`sqL6 zuYU((jq1NF^KZj`Rk&`}=dhD)mA540Rg7#u_eKqy_S2UoFytG6>u30DG#br6A?MHQ zNAst<#_^0VBj&FOA-E^=e@~7ge(n`6%sW wKx)p<`Xj`R@pZbU=Ox8cS7m;F+bBN?$JIQ5KhW^6J@ws_frn)PsYd7LA5M3Lm;e9( literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_putstr_fd.c b/2025/2/libft/ft_putstr_fd.c new file mode 100755 index 0000000..f2b20e2 --- /dev/null +++ b/2025/2/libft/ft_putstr_fd.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putstr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/01 04:13:29 by tomoron #+# #+# */ +/* Updated: 2024/10/29 20:40:22 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_putstr_fd(char *s, int fd) +{ + if (s) + write(fd, s, ft_strlen(s)); +} diff --git a/2025/2/libft/ft_putstr_fd.o b/2025/2/libft/ft_putstr_fd.o new file mode 100644 index 0000000000000000000000000000000000000000..660c642b9256e776d6a19604dd9ef770a81a864d GIT binary patch literal 3032 zcmb`JPly|36u{p%lga)`H=EsBx9wIp*iEemC);STSg5g*I^O@EKA3s$`+e_y z@69)FzT~aS`E#05Afn(5?2Lp0e3ag?%Yj*j1L%3t8s4_nf5}_J!Pc;U$66n3fq!hH za%Wh%Wo=ZptYKx-+8AtYQq0BxS%1?Sei;m{^{?|UeWj*Up|Ic33%!}#%xqz5b~^3N z0BEKnvwTo5JeoP3x&P2(hX8Z~GzL%Y2S`l=@i_v^DG*i zC594O>XHswU3-5m1=$KxH2pMWFOWxS5pRZ(R>p{tf_WMc{uimY?e0>3)#-UHx0^4W zFi)5zX!_NazVG?HYO`V1p}6dJoTBe`iVv5n4ad9UyDLT8trtrRrIW={vE8aQ{ar!e zL4DcoL9+p^t`GaL2m^x03(HB&3UC(}tKN7P)LKr>?i(3>4`1vN6kXY{>q8J@w(6`hx!B5q0*VAMz=H zF%1I((X+}(kKZ=N`o=`MX&k<4!0+qk!Uhf^u|bvwyJ$5)>u zIz}Xk4kJkzbQs%%kMF^Ad+_Oh@NbYzN9vTOT|=I<%C$ZC1IS6}$*8J7w?jEa5QR8> zFT$mx$XCZpWQq;q6eE5IB0RcFa}iEQhWLx7b)p{=^)rcZSy!G__9N&{jL}IpEU8fq1gJpQ-Mgtup zpw(@RZh0khp+?Nn`y@>)yqTCe3hyTU06182F~?AaY> z_mLJm6iv+I+chw~*E^*D5BUifiT1Iq`7t-&Zvt3{N7)Xf^OIQQXD^s62X{U@*(N3Z zDrgc7`d-QcSl{HL7I;i~G`yroq>m|gye0~{N;j0?cPcc4d)&8;G|tHJ+rS&(Io6`$ zzDqcfRR1VJlvjd#_&Y;e8n6F2viO=5a+D#>M@%8yJk5z50jwpz=ogWT9d-SbVf=l^eJ^29QvJud|KvSW{n0Z*_+ic;um1)ox;t7F z`x25ms87TuF7ka6#K}1RB4jJnn^C#Rj;Ep!ZP|appP`ZT{N;q_&qm_q`9DDxuZh;q zaY3)rAR=+!>o}K`{{_x(aV+gWy-TTI@}EOSYsUBg9nOCe=b|F{MSp;k`uS}a)!R|O hYn)&9mGYBFTsQ*w84d9fM*4Gxc@7{&|3>2V{{@qW2igDt literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_set_color.c b/2025/2/libft/ft_set_color.c new file mode 100755 index 0000000..f44b6e6 --- /dev/null +++ b/2025/2/libft/ft_set_color.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_set_color.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/01/10 10:56:11 by tomoron #+# #+# */ +/* Updated: 2024/01/10 14:10:42 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_set_color(int r, int g, int b) +{ + ft_printf("\033[38;2;%d;%d;%dm", r, g, b); +} + +void ft_reset_color(void) +{ + ft_printf("\033[0m"); +} diff --git a/2025/2/libft/ft_set_color.o b/2025/2/libft/ft_set_color.o new file mode 100644 index 0000000000000000000000000000000000000000..02a3947674e55a4b69fc0a7f0c421f0fb4c27dc1 GIT binary patch literal 3680 zcmbtW|7#po5TCbudw0n-&84YH+gKBAuU4>o$(d3$F-Oy?#o_s^e!9j zHZc`7l~^SfF+xF55c;zS#h>&yB_jR-LJ|C-AW8*)QTs#DK%CiqbJ=@dP;toK%zWNw z-pqSD?`>AbCQfNW0E>VT*!CC&xEbBH)1H}zE@Vz+)_%;a{t{n%b#ra;&f3)ND~p>~ zrtVyM`gZ1>$B1_wZjs8YeifhID6V__hLP!wp7ReqJd_$r6#Tym^qlXnfanm3M5m!A zs@?JKoN1!F2r~zK=-CyCu4BXAjTk*7w7D?4JN~BjL|eFo z1axU^m~a$t4jw<_kJk{V!cL$TLj1YAjTD^(e9-9i4uvjywRYnk&xU;Eqf~!k_3G~v zUw=RIb0!wTF48c-6TMv+hgzeZ#*y%_@xZX54I3gHyJ5g(Lu);4h}aEH!+HPRrYmoX zb2QUGAQ*yQx0;RVP%p1Od=@Q%5iA|j&}i9+vmfj@J;3KU()td4sqgT@b!ZKS*KHl} z&^8ghUQOem4tRhSDWkt9uwJhx5c?dTxWXlO8Xw}*=_27iJLtRKOgh?|TfR^ulhDq! z;lnuf4+-rwjWIq#Ad1T8qd+?m_89&T?>pfUe3*BaEAG%&b=yM z(xF5-KrbX9itF7Ygayww(bM#Ua?)4zU+zZ++R>mpBh7%+eX@yXq)+FUdW`#=`!|Nk zDSt}xSiK>QE(WCL`h%M7AoT<3@H{-Ga_Ju%6(g?vhQd`2lv?G!jd-*5Uuv>`+GBP7 zM-fx!q*R|uaFCpUsN6$1)-3-`nLjE6X#Xjd?zZq4fntDMLjf-(Wu&+xZsG+Td0o?l)Ut)I>s$MgC51~IiJgdi#}g_p<)h|1l-v1a*~ zW&VterTp~mQS+Zdtl9pr$o$7;JS)!6`ePi>C$=0^mzYEP3z?sJl%Irs-vjsq4R!Bn R>@%5vP6m*o|0&e^{{r7~Njm@l literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_split.c b/2025/2/libft/ft_split.c new file mode 100755 index 0000000..000e1b4 --- /dev/null +++ b/2025/2/libft/ft_split.c @@ -0,0 +1,73 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_split.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/07/25 10:30:03 by tomoron #+# #+# */ +/* Updated: 2023/11/01 15:18:57 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int ft_count_parts(char *str, char charset) +{ + int res; + + res = 0; + while (*str == charset && *str) + str++; + while (*str) + { + while (!(*str == charset) && *str) + str++; + while (*str == charset && *str) + str++; + res++; + } + return (res + 1); +} + +static int ft_strlen_sep(char *str, char charset) +{ + int res; + + res = 0; + while (*str && !(*str == charset)) + { + res++; + str++; + } + return (res + 1); +} + +char **ft_split(const char *str, char charset) +{ + int nb_str; + char **res; + int i; + int j; + + if (!str) + return (0); + nb_str = ft_count_parts((char *)str, charset); + res = (char **)malloc(nb_str * sizeof(char *)); + i = -1; + while (res && *str && *str == charset) + str++; + while (++i < nb_str - 1 && *str && res) + { + res[i] = malloc(ft_strlen_sep((char *)str, charset)); + j = 0; + while (res[i] && *str && !(*str == charset)) + res[i][j++] = *(str++); + res[i][j] = 0; + while (*str == charset) + str++; + } + if (res) + res[i] = 0; + return (res); +} diff --git a/2025/2/libft/ft_split.o b/2025/2/libft/ft_split.o new file mode 100644 index 0000000000000000000000000000000000000000..2936963c061d3cb88cce96a4fae48947aecf3c55 GIT binary patch literal 4872 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 +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/07/25 10:30:03 by tomoron #+# #+# */ +/* Updated: 2023/11/21 15:37:48 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include + +int ft_is_sep(char c, char *sep) +{ + while (*sep) + { + if (*sep == c) + return (1); + sep++; + } + return (0); +} + +int ft_count_parts(char *str, char *charset) +{ + int res; + + res = 0; + while (ft_is_sep(*str, charset) && *str) + str++; + while (*str) + { + while (!ft_is_sep(*str, charset) && *str) + str++; + while (ft_is_sep(*str, charset) && *str) + str++; + res++; + } + return (res + 1); +} + +int ft_strlen_sep(char *str, char *charset) +{ + int res; + + res = 0; + while (*str && !ft_is_sep(*str, charset)) + { + res++; + str++; + } + return (res + 1); +} + +char **ft_split_set(char *str, char *charset) +{ + int str_len; + int nb_str; + char **res; + int i; + int j; + + nb_str = ft_count_parts(str, charset); + res = (char **)malloc(nb_str * sizeof(char *)); + i = -1; + while (ft_is_sep(*str, charset)) + str++; + while (++i < nb_str - 1 && *str && res) + { + str_len = ft_strlen_sep(str, charset); + res[i] = malloc(str_len * sizeof(char)); + j = 0; + while (res[i] && *str && !ft_is_sep(*str, charset)) + res[i][j++] = *(str++); + res[i][j] = 0; + while (ft_is_sep(*str, charset)) + str++; + } + if (res) + res[i] = 0; + return (res); +} diff --git a/2025/2/libft/ft_split_set.o b/2025/2/libft/ft_split_set.o new file mode 100644 index 0000000000000000000000000000000000000000..a2f8879cc0f264e8d25c074eed94312f4c42d472 GIT binary patch literal 5512 zcmb_fZ){sv6+iDi-xtSDVkb?S=1-SsZQ2O6FHXo{rEVLv8D70+tB}&Buqbt0rwMc7 zU_X~oD6QfFaU!I2V^SxE#23asL};1>XaiL#otnTTpb}~-EgvcYqWSZoLzbn_e zxBt)P zB_CN^KE1KA;Yeog{pP-#gGff8>1CSrr}Zar-CJnM?#CPEbfQ8MU>6S*lArd6Uz#oBD&L!rEa7}Miq>OoU7!zFVY+)McSFf{FHQH{ z&#fr!bBAtEMiwtMlKbZT7A?P-yL8W4?Zv6cA~uvQ(?)TXvxeoYVL8Cd`2)teXU4mi z%zX92eB>^5)ST`{sAs8t&dh~x=g}>o0-31;uOq$_xcoV zAt&9mXJNYgZvM}?TS`8A*Np#hvf8`)16hq#-M!`U+FNw%X2OMYH){EB|G}103+(;n zMMpm%N&p%#xc1I0^871+IbZK&{uMj)nYrLTkdrD?k2 zf#b+2r#ukYNxtgU@0LP9ymc^@$*?xJQ*83-+UpF&J3qUn>*T#cB2CZt^Ukdau~l8mJx@x zq0~sC%}R~5b$0ZhOJrWMQe$ngRJ^St)bUhXM_Y1uV9q-IgAeUlWG{g343wk47~q)`b8&3 zZq?jZx%f3u#)C>jS&4TB*P;<|`Vi4>f-hGDf2clFuB*?Yg`*1-jzs&Ypw}uCG9cd< zNr^<;rl41o1^@36jzqhppx1tB`}e5M%)W>!MNuABl+!?l_(7(LSkROvHNc**d03u* z_3xkSU3}-2e6I5J#pqu>0HqkkAuXUVpKp<=dX#zfud@;y17TJcWgh)Gre9_1Z#tQh z)%{@x`m0R$eaxz}YzJD^8LTwQp7b`eeFkemF0937n5s2}nXaE_>boK4(+#FZnWn$O zb|PC7Weo=NN7-I+X-LI_{kR@A%5c5zqYg^bx8&@XoWE5(C-u{jq_8bm9US=|nPSSc!29jCg8fB;mZN3U4#_1Iw{@ zLeSeOH8_Y*sf>t9Zz!H1IXs%M-&C?o?A$r|1xLRKo6j}baCmeu1;%K~N*G^#zUN@Z zip5_7BbmG~(oZom!{>SFPAQa(1Bs#j!E|gS0VAPY-s$6 zdqZ=j+x8yfh>g+Sl<6Axzb1poi~bAvLu880f3nE@2@?Kd{(nKtT@%F)@yEa!S7C13 zKcQ{0{P%f&lY${p|AY8(=N~|fV!HdEr^gP`Q_fKM7Wu{ad(>zrHc~iTDHtIW;`a~L dMnw6Egr6f}JqWm_XshOU{*&B+27=u6{}(Q7c6a~) literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_strchr.c b/2025/2/libft/ft_strchr.c new file mode 100755 index 0000000..978f990 --- /dev/null +++ b/2025/2/libft/ft_strchr.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/10/30 13:35:44 by tomoron #+# #+# */ +/* Updated: 2023/11/02 11:08:17 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +char *ft_strchr(const char *s, int c) +{ + int i; + char *res; + + i = 0; + res = (char *)s; + while (res[i]) + { + if (res[i] == (unsigned char)c) + return (res + i); + i++; + } + if (res[i] == (unsigned char)c) + return (res + i); + return (NULL); +} diff --git a/2025/2/libft/ft_strchr.o b/2025/2/libft/ft_strchr.o new file mode 100644 index 0000000000000000000000000000000000000000..9d0db80d17a30b4b2b9377029838d3b05a4d52ea GIT binary patch literal 3136 zcmbtVO>7%g5T3W|w|3&hKTRR60*N7Y=>gWQmGD!dCKWPuONsQv7Z;K0x^W0GpVHd?KBkIAC?g0gO1D9Ro0rfSEoOjYa`NwjkreAv1k4`fT*E z!)M3l4+BUEhJq--n(0%+N4+%g1{RbcB2-tv!@UDD;A6s&jAQsPO-q=ehzNPGxF{hu zjj%MXty&PP`(ix|v2_$J<63nH5=vYeh9vod@j5=jUbct~!Ew|i;s1e3^&ZhEb*T4+^A)IfF1x}Ax;&ZLN0{(D>h1uCKrDwOnF0WiYX&5Cp{T9 zKC`Zf`7dub62H$*+Vj&PfFT0|JThZKhK8@p#G16Mb8^UfK^oS(GHg|4%KAYj=VWY7 zjv$&qYsj@$r17D&X5`(!z+V2{>2{A2zsG&(N3@0D z&wGPhOz6H&pVR(Q?m@uSiJ<)`CPthb3lA7j=FCjai^~w9fvoef! zy<5&eIDW8hXAhuEM7VY}!IX#kIK3U`WlsM3{?McnG0u4tKHSA0Q992n`=3$xp@9FQ z(s_p2{}qL&0{&&C9|_;TdrfDdGW#%9k*Dz1a`f?-YAeSUS@snlwJW& zwNPmn8&0nhZl;Z;-QqIxHygzNH|<~secm}?RjuZ43@GkjWj&BKk1*xlH7qEJ_lpfY z*Q`@)Fell5RSrCVO8ti~{W}ecpH<*n9H@BEm*$oBdO_Kly-y(0lJ^9_KjXgr=Y5+- zJeZS0t}Aec6pezulV}@Me^=Fyr~s-@XUsdm^`AtHTzKD5^ym*2*JeO*uFrf4ah7%0 zi)sl6eJ|bbRa6G`zo#xa?vwhb+dJ4l-FH+!*ndUUe-Ldtaj(ob(8#jx_qK}HF_MG6 z-}=~U(0x+@PX`ik{|tYF!l3t$sD;qqe-wQ=p7Adb3-*K%e6Q+%O^QZA-_OxDsD4V- z&#PEEf7;bx{nLn1&fxi%)TNL`n@(Jx`A29p7w@%@ZR&n}e=tV%i8#*J{5=nzJ=s20 N_4kw`#SNODzXACw9}55g literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_strcmp.c b/2025/2/libft/ft_strcmp.c new file mode 100755 index 0000000..6157587 --- /dev/null +++ b/2025/2/libft/ft_strcmp.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/07/15 21:47:47 by tomoron #+# #+# */ +/* Updated: 2023/12/03 17:06:39 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_strncmp(const char *s1, const char *s2, size_t n) +{ + unsigned int i; + + i = 0; + if (!n) + return (0); + while (s1[i] == s2[i] && s1[i] && i < n - 1) + i++; + return ((unsigned char)s1[i] - (unsigned char)s2[i]); +} + +int ft_strcmp(char *s1, char *s2) +{ + int i; + + i = 0; + while (s1[i] == s2[i] && s1[i]) + i++; + return (s1[i] - s2[i]); +} diff --git a/2025/2/libft/ft_strcmp.o b/2025/2/libft/ft_strcmp.o new file mode 100644 index 0000000000000000000000000000000000000000..c081fdb4307196854a15bbe15ed378906f5d80c6 GIT binary patch literal 3896 zcmb_eZ){Ul6hH61-q&v3)-g614B1eIVA$(c`7;!;L@I@VL6Z?aNJ`hfZq52<_PvfV zBpPQ7V;=;RgoGFkQN&2h^aC2AhJ-{&{Gxs`G7T{?!Hf^{g9!u@Jg2>9eSPT%6TQjn zIp=qN=iGDeJ@3B07TNQ>swluifo)K+7zOCBujt{D8irP64n(K^h)x}wk4_bDN2dmE zU60I?H#&Lj78L8QM;?$hcVrHt(~vUu`I=%N+bn;Iny5&aT^i@PpL~dSGit3ynos(CUsmScyha7y_gSq#Xa$jy( zwC=`KbNs^*-6AgWG1TQ;5B8D(%rpSXx)XS%}YDF7j?Ag)=~g5mpcZR3SY2d#HHNljYMD-)E>aC@rer>r|qIlGb$tUf3atPtcXF`0aB z2(0vk8M7f>fhn{VmnNWeI@OD;S+}H65DjJGB~Zqjm5v6l?<5}P3dHE4LB|Q(o0{KJ zpKH|B50FvzZ6zEB9a+V1m;BTmRLnkfDT;ExsgVSA2|lQFsuV;+Lp>l?mhCmyQs+A_ zzVYk1)_Xss+diHkg0gMG$)ityC`Exbjc>j#9U2eCaw zoo4Tg4N*#hTsP$Vs7UZCkN-hJ^aISk^1*bzAiA7OQO0 zxm&1)Q1oYX|5gF|_n7`0QCAc#`V|qlA``Y>(c+Y&b0J54Z;8=-MW}v5RdJF3t{sB8 z^mx#+^93_F60$aprxNjvpHf_l*2L(O+08>erIYMAT!@d3nuVTn z2L=nKl`j?&W=|oXw}a_iB2!G7l}5t8jA4r=lV&PbZX9Enwzc;74q*@c^{|##gN0qM za%-Sf*=%T_vsxv!T1|=!4eF|RY-kW*wMuHRsLCcIgHMa2&Qk9pHYo8Klr%~`i;`a# z`W!h|!I=riep}$Rp-zKvZ%HfvbV{9YS~cfoNx1X=X>jlf=e*4>e3i8MJ>@(*CEo7h z4@jHeUFIK>c$bunC#AjGh3BNb)`h*R-BIP)KsIMu^*5wymIvmJ8b$E3~Y#(8+Xap~te zr3qjp&B5YOEIv3`Fvq~K&2bxyL_V7}@ya&}W+pBf_!WxfQz^@|Ee=A6)l52P(ub-l zB%Vz22Z+8ux4MUjw#tKUk|G|+aa9^=a zvF@DYOH0sVqLgm#tBAWXqRvY2YZ=GF%{`0`x~IZSka9*Y=#aGWzg^XR#`ni#h`V!A z$XS(s0d|zd!mpdV5Ya@5v3O&=a`lAzwZQ5=lNOgcVJHH zQP~tc5BoTd?H5t0RsXmwl +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/07/24 14:55:26 by tomoron #+# #+# */ +/* Updated: 2023/11/02 11:13:46 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +char *ft_strdup(const char *src) +{ + char *res; + int len; + int i; + + len = 0; + i = 0; + if (!src) + return (0); + while (src[len]) + len++; + res = (char *)malloc((len + 1) * sizeof(char)); + if (!res) + return (0); + while (src[i]) + { + res[i] = src[i]; + i++; + } + res[i] = 0; + return (res); +} diff --git a/2025/2/libft/ft_strdup.o b/2025/2/libft/ft_strdup.o new file mode 100644 index 0000000000000000000000000000000000000000..94090e9b19577402f574c2ed8b7313d7356df158 GIT binary patch literal 3304 zcmb_ePiP!v6n`_b-|S{Le>Q1q+NRn>o7#iUwrfQ(X^qIX(>8h#(iTOxo6T%?>Hdkk zlURjfNkol7v>v@!3WA^@UKG4EMQPBRcq!;%!AK+V5HAu?i0|!uZ}-c`9(wS>&U^3o z{(j%QdC8lpiIb*b0FwbHprtVi@L9Mek2l0|*o~f(?$Yn>;-5qA(v{8C)EZevC69TcrN+4n8)(T~2Mf+2_`-jzz$aEvMENSB$09+Q!{LbhBITt-G*J5$;lI z9h0oXT$Gb+q?#G(jSRywU;VxQ2#V{Ny8do|WI0uD|Y)-B{)?&9}D zFMntB8Y3gSgf&tfhz|^o^bYpfwE+OL2Ttz-unvMXav~Os0fZcbjN^N(k*8v#v4{7b z-u3ie03pDX5Cz!BcBtV)jWkfh(+DskbSeYxZ(XnnHwi;B597nKY$McwjB_FAeh499 zUYixrok!6&ujOrs6N=(=7<#LLc(DWeNCdNlk8mSXM1_b|_aja} zqQ)IQ(;a`?e74IrzeNv#+lW(*Cy*P4@lSUbF`8`rp>Uuv=6$%WXS(r{N}=F zuRXc%_~&0%&o6}lI!p{`kkxGnJ9<-u=0tc-*!Bfs*$H9(AUbSEmIh$uRn_8DQ=XYJS-)5ccs z?b6lP#67p;s|beRukCg=3!2B>VYV=$9a*3(1;xRF4n=E;7DQW$B3Teuw3cW=UrUkF z4DvpuPyT*Z5O0^|yo{q0Q1ySe1LEl;%#uFDdZkP_#jxLQ1y@gfK*4RrpW`Tx`VG?T z6EV(txp&5g12^FLXZ)1J_ejq8gw*+)VEmlKhcy2erG8MuUy=G@4WE)a?Gz%;p9|FH zJ<+G6PSKFG6Q<%1N}TfWT@mDH_#vsglI!`S;7of{b2I78)Kt}*2dC;4Gmh_F_QA#nqRu(z zyhTHc^jpB1&tN4s)y5nWCf%EcaVhb4$OfKg)_YK(?`fO?$?F6n@jTPK)12^3Fiy4g zo)7|FWITt25$V43Z7}llq~mL(D5S@~inezBZ^`~I%2?{3zIVOGekuqnvu3PP%NQe88GduFw1>w6NTCLcy2u`uo;>X%DsQ z-<1Q!@0t2ncLL-45T~4a|8L3q_n}QCuFre{jV!BvAIo?ZBU$(TI>2Ui_v;dPQcJ-1 z&+u0$v^)RBHs|j~UykSVe~Osi6Xm`m>;FiKLb~sDw6&{$S=M)DEZsl7OTGR{#3-kJ z|2O1PNuo_9uFw1>wyOF3kv$(lkJYIACUpX=)VuW|Nj6f CAwfp~ literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_striteri.c b/2025/2/libft/ft_striteri.c new file mode 100755 index 0000000..488b17e --- /dev/null +++ b/2025/2/libft/ft_striteri.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_striteri.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/01 04:08:53 by tomoron #+# #+# */ +/* Updated: 2023/11/01 14:04:59 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +void ft_striteri(char *s, void (*f)(unsigned int, char*)) +{ + int i; + + i = 0; + while (s && s[i]) + { + f(i, s + i); + i++; + } +} diff --git a/2025/2/libft/ft_striteri.o b/2025/2/libft/ft_striteri.o new file mode 100644 index 0000000000000000000000000000000000000000..a6652c9da95a829c0390b7b704a39caa553740c4 GIT binary patch literal 3048 zcmb_dPiP}$6o21LzDe3_nzp;OyHvMf-MAifvW;C8UDqrUon2R{3tbV^n5L69Hp$dv zQmRlCBC@p>y9e>4EFPpMFD?iRN_iXzRq{ZI<;f9 z*Y@FRe%BqdHuC#c>8Vcgi%6`!56Sm-5PmzqyUkkK?j&0GHr6`UM$2=u*tZAYZR9)c z9k!nD?0#moze>IEB^zPs^kJ^28{@;{6X}tOQKLBypqY%s+)+LKQ2gQesbh~G1JF5W z0=RG(ATr&j@+1&yoCH06E*_5qM90`E42yBk01kG~fyL-87~Ii23=PVJA^8%!qC-O0 zuB}EOF@q?I%LXK#LouRVtHvN%Cucs34}%+wzlcIK_A)+Wkr^LBH|b(S+lrRccB9GJcNyL@Q%c9F|-5EbVR%Zd+jo? z)nPVqC>q$KP@c?qh*zZFLVl;{PLt)YzN}Ww= zNq*duA@j(eKmYjtJKMMZ_|3dwZeET63}_hOk)B{YGWaVWXz{r5As;e%{H9*t;+j5s zmg~kM=f*`IJIeXn469h6-GMfVKAb~ zGAbUr`ic7R0Y&SHIwX6FBIz)qXujA+HmdX~cR>!tAllV#Wd_3W!*n|vLz#&1s3-Z4 zNg)$XZzuCgPPn=wG?GLTmwAVMxQpK@bUByO|AN4e2K;GTiR7$G|7U#|Qi4nTd7+;S z;I!;Scl)f{&yvt-=ZR#Vny+@>n?_unij=Surs5|API=^65o8ANyM%5D9?TEsygk=i zC=}=B8ukj9uD$AlS#oMM8!rH}VONX718^s* z4Po&k0&L1a!GpeZjI_r&VV5jNAks_T69E5P`}SS#7wus%CxyHzz|*8C6!blgwy^rw zMg2VyOZDlDX+7hE$n-#e$Sv1*8i5c)MTI3 zKi$^B{^@?B`oaFsi2ApoO(of@z_xAat6X!~2WN)Z`^8Sz*)hCj1z6S6;3c<4{+l;8cCmbm*Y<~U%bng#~ literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_strjoin.c b/2025/2/libft/ft_strjoin.c new file mode 100755 index 0000000..cec1deb --- /dev/null +++ b/2025/2/libft/ft_strjoin.c @@ -0,0 +1,63 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strjoin.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/07/24 18:06:14 by tomoron #+# #+# */ +/* Updated: 2023/11/02 10:26:09 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int calc_str_len(char const *s1, char const *s2) +{ + int res; + int i; + + res = 0; + i = 0; + while (s1[i]) + { + i++; + res++; + } + i = 0; + while (s2[i]) + { + i++; + res++; + } + return (res); +} + +char *ft_strjoin(char const *s1, char const *s2) +{ + char *res; + int len; + int i; + int j; + + j = 0; + if (!s1 || !s2) + return (0); + len = calc_str_len(s1, s2); + res = malloc((len + 1) * sizeof(char)); + while (res && s1[j]) + { + res[j] = s1[j]; + j++; + } + i = 0; + while (res && s2[i]) + { + res[j] = s2[i]; + i++; + j++; + } + if (res) + res[j] = 0; + return (res); +} diff --git a/2025/2/libft/ft_strjoin.o b/2025/2/libft/ft_strjoin.o new file mode 100644 index 0000000000000000000000000000000000000000..cbd45bc37a323d1e066c6be3e69ccc8e523f3220 GIT binary patch literal 3960 zcmb_eU2GIp6h1SvcXqqmcDJP!3QDWAfJSHgr#7F`$JPAD|?SA%9Ck+Jk9Jq z=R4o|nfo_AqVL!$OA-i?U<*_&fdUNpt9sN@qtJ@XJ+b1?v6;p0Sn=>utXL?`>GR}` z%^Y3=(~Cn13JtM2y-esYH_0`N%-KSzbQ_JLetlNIK674*CCag{Z$gP^v7&yX=RC&V zfaCgAvo$uWFU1l&=Y!`wzL_!v-#d@+3H|EFQbE4;pzxk(@u7Nyh{s!ev-&({E$Z{P zKA+PUC~GC-6)R&2i3`q*S5D|xtc;If8q4d>xL{>msHQ$+^=Q_My5D+y_grm-l&;*$(8@JkO>3If{7L{>lSqxOQo5cBYzk~>+qUBAHUNcz z%%N>706hK6Om=q=fEom%dOJbs+7bu^0DS8$1irzyVj%hG?Id`hx}jwFfNw4t)}bct zRiN`zWGV9LDKB)Mv(-tTt$O6sBXzKz2&lg1hYe?KbtnKEx%zTFJWMJuX+Qo-dl>}D z#*EWm2=a_mK3l~!sXA!lv6BI4wqn&UFv9CmC9ldn>IF1>gunnkjFkT%iBvo@(Q(ko z<&)V=M{keTqxHhLIh;3h`?JZ6mVoeNHf@B>Y&zWEJ3MCO5184ha6Fp`_jdO_9_|gN zlB46MBLotY@f;-LsRSh%P8k_UW=zQUK)x4pMjk8#_CpJ{%fOoc<&D?u$)ZpQiS))x zAWes)HT7QKDO{oZ5u=BMRt%nL481Ks*PtqEC8Sush~)(=?C{G5xgm@()XJ0Sk|gQR z#s(TF5k9E2lM0H|E(h6KONYcCN6Ou+f7;kN(zg4|K--rdfI692Bub~mJpMBC7MNch zVvQQ}4>3gzv)0S3O&w&uL56Th-OO6l2n$A7TZChE>UP$ke#k-^YdEXyI>ltAJHqPK zNen;3{Ks(NH#7Mi=ILW~1qXAGm`}Kwr zW1a#flU2$-$yAII1(sv}J|qPqvW#=`Z?^^Rq*-V{;j=<*mwBU%Cd{c(Hr1R z1%KVKMH~|9$oY0noKHC20D{-*zy(H7y91}$5I!+d9+h)wsOP%CMPAXnz#rl~aXtke z-0pVad2aW+@YlIbH!O+h^N?*; z=8v|abC-(w5xCf=9XyV>PJYyd3%;0Fs_WdP8s`gqJ-5Yti@F>JB>>u(FZ}j6s+CvXJ=L*m5A58P6{J zE;v64S|)26+Vd~$c`R?n69+&`r4FWtDMvmzu`DkY)y z=;Kvn3!R5r!!;f+>Ik2kyB8g``hTA-V{wE)zaMZms%dUMNP%P-y-`__*tDMT~N~=l@;)?|L8loFeLr@gsC9JMPeD>nJ`I hiSqkL%q!I=5plK!@GB~UBQP2-@%kM+fQDN8=WpB%)6M_@ literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_strlcat.c b/2025/2/libft/ft_strlcat.c new file mode 100755 index 0000000..2444604 --- /dev/null +++ b/2025/2/libft/ft_strlcat.c @@ -0,0 +1,38 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/07/16 03:16:22 by tomoron #+# #+# */ +/* Updated: 2023/11/02 10:47:42 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlcat(char *dst, const char *src, size_t size) +{ + unsigned int dst_len; + unsigned int i; + unsigned int ret_val; + + if (!dst || !src) + return (0); + dst_len = ft_strlen(dst); + if (!size) + return (ft_strlen(src)); + if (size < dst_len) + return (ft_strlen(src) + size); + i = 0; + ret_val = dst_len + ft_strlen(src); + while (src[i] && size > dst_len + 1) + { + dst[dst_len] = src[i]; + i++; + dst_len++; + } + dst[dst_len] = 0; + return (ret_val); +} diff --git a/2025/2/libft/ft_strlcat.o b/2025/2/libft/ft_strlcat.o new file mode 100644 index 0000000000000000000000000000000000000000..4def9ad551e8d2d42858c2cf6e419ff8bfc6457c GIT binary patch literal 3904 zcmb_eTWl0%6h5=F|LnHgvc0zygo+e-ptG>FP_^I^U04bjP%$-uEPI)4H{DB}nJuMB zBhrMhtwx$i#6)~BF){H$j4y^51CiJg6JO+khsN~9qy!)88wL|RXXgLA)5$h5#*^%v zbG~!^@B41__+gJEfglMELPZlO^4f|VvBU_pqUY&Y`S;lLACXvjY9&@KEyv2ImtxaX zD`5JNEkmh3HXnUV0S_PGCpJ5^vP@bzx`_5AC^aFpY(cSd^zp-QEvM+x?1{zL3kybD z#VSXaERQ+#n2%C2n8hUJ=t9M(d?z-Gy0lP^-bZP9_QZqW4|V=Mx2OMtE75tg6+ucp zeMc(a!~DUIZzDVto&QoQc^>WLAu}z0lvdF1N{fFs`e6FDRE|EtVwSM@=nHQB$?L}! z?o(HYJdRD@jhy{aYLvRWo0;6Lw>PwJ>TcZBq!{f09#tYS(jj-h7CwLyGCVgaJ1PD08qAr+zoi9yUKk)3{QXx-XI1B}_F1 zp^;)<3z@}ys5cx>YsRQq91A6isZe-#xGxkA<+90)=?H;R!N?95v~*XlSQrK)JE_G@ zNE;@kMiM$0ddk8GiRZLJ#XVavAq%=@#>W#msKXI4uqNCdTh&g<)MDE~ntUCki3Vv? zozH(27iBZz^dqts>ClFT%br*26}e7A7idNws&EqRk|aIZP*03j6Mrad^-v^{jB=1| zvGs$$EL@-PD!-1_EN&mVb;+81Y1gaE&wl>Rwave&H=n55$gmfnrV<{Mn6K7nQ_$9mXaFI32-P`Ok78f|(YGzM6T=3X7Y%hK)}@%N zZIHFxVzmRT2ICtPzsj0b);Y+w4Y1Au)}hMDtIQ*B8DLGy2v+=zHJBKFfYr`1&-=YB zh$(86W6YxrFiAP41O`0{j{D!Occ_q^2pMKk*FvLVW8Xw3mFNo>!hIK#{mFfqzW!|g z{!wFcY;S)5aF4ZeJ?Hhr*qEmG*n2FbYeuo8r?eiuSTsY~LMm5EYmRM%J1>sAFrC&i zaeEJ`Blc>n_x%|SUikBAHMoZ*SEXy9M^Zc z@OQYr%Z1ZxK(yOttK*vFx>!fi&n1rcyZq_mC!#B#NchuhO(f=%ZZPL=?;;}-VNQIT zh1z*UEI~V5xX{BcoL(m)vEQg4$}>YCl9*R_KeeEywPa~Ho=7HjZ5&ix%OzA(n=nC5 z74vxw-+{^t#LadDzDn_8CSz!(A(9{@#9X$Z(ZjVSB#}<91+s-qQRK(xM=cahO+E73 z=^n#Oq((u_<;L@Iio#cHO(sgu0c|9n(Gz*seWhY;Gm!+=G#g1J`zS}&q)!khP;k#Z*-r9D-_HYxQA&6J F{{U>L%X|O; literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_strlcpy.c b/2025/2/libft/ft_strlcpy.c new file mode 100755 index 0000000..9b82fdd --- /dev/null +++ b/2025/2/libft/ft_strlcpy.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/07/14 01:08:34 by tomoron #+# #+# */ +/* Updated: 2023/10/31 18:26:25 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlcpy(char *dest, const char *src, size_t size) +{ + unsigned int i; + + i = 0; + if (size == 0) + return (ft_strlen(src)); + while (src[i] && i < size) + { + dest[i] = src[i]; + i++; + } + if (i == size) + dest[i - 1] = 0; + else + dest[i] = 0; + return (ft_strlen(src)); +} diff --git a/2025/2/libft/ft_strlcpy.o b/2025/2/libft/ft_strlcpy.o new file mode 100644 index 0000000000000000000000000000000000000000..93644067a2bd0f90d8f4d65abe27ed65e64dba5d GIT binary patch literal 3616 zcmb_fU2GIp6h1SvcXryPY=8L?l-01n1D!1kg+?mW=)zLa_!A5dnq_}xf9&qgW@fgu zn2O0JhNU5biHQ%&gHJ?X&_o}MG58aIVtnxh5*pH&nAFsV;uDGqp0jgrI~}))CZ1&H zob%oDch9}&7S1J39FZjn1W9lRRy2VE%xf$1SW6s(0kk}sZ2ppL{5F(q&MYOH^@U{f z&+jG6~2b@pba=K;{bIF5= z`S6?9QN573bycd%i`%&Ag?b-om@vGGQ{+oaXiy@AX zvZ?^Y?RT8af!-x%pV%;mrUF z1DQj|`Tzp^R;g?Q9P4u(0MzZEL=S~RA%I{QaR6;ci@`Z;0|TkmN(mlZX|xQVQiqUS zNqRwna0*pLzFbowJmHE(4Z@Bqp6+lB0`lb-JE7-QM1d9PBlW6*pcbs5tOivnIE{kV z(n7%i>?0HW{a4DC)73&`(y;83S&hW^=zH`y)5ume!fBJ>~kPZbxT{;1+`0fv9}^lKcZI8A79`7y8J|!Du0X?0JjmR z=+7XRBjl!|#3g z*4EqlwR^fzECc{LR@}o93v_CSS*Xqi>MW#=GvySM)dK5Kb=IxvtWReHqsq%yn5=9V zWnF5KDe4s#a#%opjL8?7x|eC{D1rs#ycjpwVmZoC1V_HURB5v=W%4gHV@oIc{Ix~{lpC2A6jU1S;&(`)<4ipAk2QYZX zO4n+JHR#@rm}S^z-O3t+mT5Y%QZ-wy=M2yBLt8g1)JzOT7VhOte5AN;8HV>|P?1dl2@xC84jYI+$amAhl{)lS^VlD-q`+ev39KrfdkD=G5AKMkuQQFsm*#Z=x(SA36&j=7z526TJ6Li~TCn;6GCPa^Cc zJ~Rsg;GFvHC7LI~XqLP*#uf1nh&3@cLVo}Sn%gk}aQ-$QLUB)NuIPS=yCmj`=F?vj zh4_;`NVdzCzkb^@xZ=mixWYktzr5tPr8#R?|98Cp)7+WrC&*v_Uc~${$z_RyBcyo9 zZ>!^4yZpQOfke0i<)(N&Di~V17^NVoHyqgd8&&!A_`0M`w;dc3_c>XEwPyMH} z^yhyTF^cK$|L;8iJGka0kzeq4aZx#O-$eGB*KUdD7j~4NNa(JH|8GOV-+NlSM4Lj= NxC1fz*N?yczX6a*ku3lK literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_strlen.c b/2025/2/libft/ft_strlen.c new file mode 100755 index 0000000..0e7d7dc --- /dev/null +++ b/2025/2/libft/ft_strlen.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/10/30 12:34:41 by tomoron #+# #+# */ +/* Updated: 2023/10/31 14:53:10 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +size_t ft_strlen(const char *str) +{ + unsigned int n; + + n = 0; + while (str[n]) + n++; + return (n); +} diff --git a/2025/2/libft/ft_strlen.o b/2025/2/libft/ft_strlen.o new file mode 100644 index 0000000000000000000000000000000000000000..628aa16f6813972993b9e75531f811fc974d36a4 GIT binary patch literal 3136 zcmbtVPiP!v6n`_bv%Bdw|7+5c+HPyNdT3_SwMm1PnxZiYR8b*C6j^6?XaAVpnRRB8 zZUfbTsDvQegLv>F9>jx!x$33hp+~*xNe?0v6iFdMrHA_7&i8h|9Y!elV88d?@BN+c z&)c^bFF&g)3NR^f5qcV<01GKe?uZL;2t8Mqw|`&WzJB-C;y$6vJBxRBp4;ELkcJ?$ zv$+4xO=Wv=|Bu@!zV^K`s^oIxx|Z`MM<%Coqf=u^e-c176cQH>Yq=*fPi7uHvNHbE z5dcjGRX{7_0Eu&bsy+cL<6!_m@)T&fiBotK^c3}K}l0@3OwBVG!@Pe zh7?N56%B?~P}S5M?IaAXqL@%`1Zfy4k(d4=Ey`FjkxHjtK{;K(C7DVp$$?a&lT1h8 zL8;WRoN9K%_WZi*WbHy;uo)5wPy~^{Qi+vklj&f?waX3jts@DAgA_?b9T0mTe^lZH ziu1*}%Iti7{`{K1*?PQrzB=96uIa0u)oR(^ba;BEXZ!BDSF)!)*A2|NQ);Z2?cNFD znHKPP%VoP#2#?38g&PpNeuroR?%auUfqh&Pet%Ig#K6rcZJUT$NAqBIDap_ zEcsSsg`F@NKPhm^!?6UNj^M24BlvZp^L}uiZGl^YNBaSzY!}z71*=%}>lA)(2;a_VK|KD^AGsy3N6V~WbBmESz z?n?VA6TL{ngnQStASAvwY~cIOI>knFlC2>e=pD-x^{t{Yijn`XBB&-fv#2j^A-(qn zb`ZQpAkyod6#)O!`{n|_!$%O0=A@7%0nU&jQPlSs+T!Z}DC+NtSgKEZ%x{M4&ml%R zqjj!|LT{l>Ca%x?3L06K{r(nU+0nA4daQ_T{g+ko-{~YuEgXqigyf2?27VQZk zcv;lnAw{C7@26;stG_4ew?!=NKfTpx{Y!{Z&glOCChAjunYcdl574MxzE6J>Te2U| e55}lI5yyoZzz--y_nvH9VkqqiM~aKPKmP)e&mZCd literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_strmapi.c b/2025/2/libft/ft_strmapi.c new file mode 100755 index 0000000..ac725ae --- /dev/null +++ b/2025/2/libft/ft_strmapi.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strmapi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/01 03:54:38 by tomoron #+# #+# */ +/* Updated: 2023/11/01 14:06:34 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)) +{ + int i; + char *res; + + i = 0; + if (!s) + return (0); + res = malloc((ft_strlen(s) + 1) * sizeof(char)); + if (!res) + return (res); + while (s[i]) + { + res[i] = f(i, s[i]); + i++; + } + res[i] = 0; + return (res); +} diff --git a/2025/2/libft/ft_strmapi.o b/2025/2/libft/ft_strmapi.o new file mode 100644 index 0000000000000000000000000000000000000000..0eda079cc07a0925f7f4b00a20f368eeea4ac00d GIT binary patch literal 3424 zcmb_eT}&KR6h1SvcXnYZ%TEzntZZtxB`UL&Vl?(gjM+K`YN8Dd@h9uDI}0oOLv{y> zCZr7{T7o96K3fyxgHdDZyD_bzH2R?Nsc-s#DG4Uh7bU3)o-=dLGK|YZ6Hl`Dob#RE zd*wxlxnLfLE=|l+Z z9@N&B=2p$6vj~o?M!xQE-un6SH%)$c@eIP_>oRr8n&4uOO zSHD%7l~}A*Xt8p8Q+sEuxwA#Dv;(MyLgGM&7JDjuJbYx|nbxQG0cZkL37u&L2=wnz zMFa@d4}lgt6%L01f`=U>)TW$iJ%aId!qMR!+`0h88KMFQwnwbOmoyb5S5nSv5J{q{ zsaK~2L?&EuLWf8h#ejM>6N2U?R~)T}7V-s=!9@?~iYTBEBu!kvB}7u)+q94bdN3H! z>qG#0Q4xgP2c`3=;&^n%Dpzu)Vzlq5an$I8tevdbi%EKCW#EQS#NK z53yz`6Hd9vNZ!n*~+I3+nTk(NS6u)3!f|(bKUS&OqR0Qie* z38TBmNsqTzJkXI`k+F8>!;5>dN(*zl;`^t4=6flkxuV?e{&8zP0+lE)NucXX>Bd z0;fD^Y`TBmX~_jQMMPq?`LSLRsT0x-;|*=fBKgG`lk`2oc{SQ%lgOA y<|VGr`~x&b=)W3&|NjDP|5S|t literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_strnstr.c b/2025/2/libft/ft_strnstr.c new file mode 100755 index 0000000..02c8a18 --- /dev/null +++ b/2025/2/libft/ft_strnstr.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/07/16 02:50:08 by tomoron #+# #+# */ +/* Updated: 2023/11/01 13:21:17 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +char *ft_strnstr(const char *str, const char *to_find, size_t len) +{ + unsigned int s_i; + unsigned int tf_i; + unsigned int tf_l; + char *res; + + s_i = 0; + tf_l = 0; + res = (char *)str; + while (to_find && to_find[tf_l]) + tf_l++; + if (tf_l == 0) + return (res); + while (str && str[s_i] && s_i <= len) + { + tf_i = 0; + while (str[s_i + tf_i] == to_find[tf_i] + && to_find[tf_i] && s_i + tf_i <= len) + tf_i++; + if (tf_i == tf_l && s_i + tf_i <= len) + return (res + s_i); + s_i++; + } + return (0); +} diff --git a/2025/2/libft/ft_strnstr.o b/2025/2/libft/ft_strnstr.o new file mode 100644 index 0000000000000000000000000000000000000000..fad59593dbf4c5d536fc025f777df71014d007e8 GIT binary patch literal 3840 zcmb_eUu;uV7(chS=eAq7w)+DcZa^Ijc-U@P-C#s5b+)Iy1E7xodY$Z4l43c|fO?#hXIGw&t2qmZs)~ zqO!F1^VH-LDb$1aeaNu!BSxZiNOVu{z~nPSE1tV`&YtKhv-f!~z62Bv3C63eZ3n9nu=1p9b8|DasBEy- zHs1M3Xb?I(o2b~CYw@#;Jd_AdY(gMAEBkLFZ?IXg9RQmsN`l>h zgtzU)y$8c=SH~!E7fWJNDvReF#Qh1NlI`l*TH^h(B%Y}w4NQEio-{HsW7T(~)e#H?HRLDJ|;@^vFGOfW-B1Ue9IWk)y<) z)H14H*E0UzKscu6M|Ew?AJL-zz`;PDKj2TNM&de&CL=jh9D!J(YvFh*8zX5oOA6V1 zDv?!VzOglF!0WVpNVfUw(!kw_xQ z9=fZfH{Fq+p04@em&9Y=rEj~|e@6$Q>-g&PU;l8e{gHh8nXD!gcG#*)xLcr7?FMxe zsJB2R=@hMzUZV}t9Br0q!!0p6OKoCnkUFFUwS7cg2NP5TC!2H?9A#QRN4+xL;go5+ zOnpHyHV5wQLF$w~rnLp?2G_1S^;0k8w8x=UXh@ux6>HB>VM=nHve{r^{@q0Q zv#AMxUe|J}e>9LkG!c(R`U2TN--VI>kwfvm{#5_r(fq}+7cz$v-NwdtpU*|c#?)MQ zX$t)?0$L##Rl9SVru$RbXu1$nO*00w8HPEH#ngDXG*EI9_u_BqN3ht*ADh)2L{i?Z zEoPC3TXe37MB?HWE}G}nWD!Y?Nvnt=@l+I(B$5V`RuT^ZYc%!AFCu3c1BjOhm~c#`Q|7JQuP2QBy{(|axW`%Le*;CN#r1xu{F4tVz?4H&5`NyejYD@HilM8W z4c|8`jx(!o27Tcf;0}!6W-oM(=}o}VkIyc@2k?K7H7ADLWc81uVj`>WF0fUr?`4-= zk_BLWY{^>x7+~na?*R}Eddlj5!2!m3ea<6*bJ^^AnGHp?{WAOEeO9gi3DziIC+r_b z%Gy8P!&u+i|8-V>JJ`&`d*%ER7`bfr`@Y&xSMj}5!p7Kgl~dei@%+Bz2Hro{zXPG# z`_EQ+|9bG{@qArw09LL4RbJm>w5SC4w_5$1tk4A5k#PO-tXk_20){!Q>+fS9&wrX9 o{C +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/10/30 13:35:44 by tomoron #+# #+# */ +/* Updated: 2023/11/02 10:25:44 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +char *ft_strrchr(const char *s, int c) +{ + int i; + char *p; + + p = (char *)s; + i = 0; + while (s[i]) + i++; + while (i >= 0) + { + if (p[i] == (unsigned char)c) + return (p + i); + i--; + } + return (NULL); +} diff --git a/2025/2/libft/ft_strrchr.o b/2025/2/libft/ft_strrchr.o new file mode 100644 index 0000000000000000000000000000000000000000..eeb424254ff743e161ded58ffbfe89ed14d108b6 GIT binary patch literal 3104 zcmb_dO>7%g5T3W|w|3&hPMShmr6h*dr3YB2Zuo5|F37DL8YC)}3m|9XtYcIEVQ)hD zDO5y4ih`g$ai9l~xFR7A9H6QyacFvj0|#!oAR?uQaEk;|m|4GxpBE#6#7N#Z^UXIu zJNw@A``Pnn3?YC;z$xfhi~=OW9X;c#8Q71^i@DWbbE{XjSC{VP*0S5V)$GQd>?RR> zvoO1PbvgoGbS=BNa$BrsH@AMYdkq5W^yw9FbRyG9l}tIWB4#l zOPHaE2>GyhSwieE!qT|jupm}xtCcXsmQl5g>!m&zQtDhk3=)v-;y+}571bY z#wU|9YT445kzs36j$7Z!__Q3DMpn$4ks*&bA5BTIVnt^R18e`gL3XBwv;SwgiLMa* zzT1mo!e0AbZWGKdn++2zR=ZYH|4N$2gg(vcs3ycahNhV?tXXaKC0zDtee&7hebJA8 zy<5&eIDVkL&hA5&0 zDx3E#^IuVTBET;y`$zyUDf?Iee_h#+1n`=&=}sWwx{bEEHxD`j`ff=mKVdq~?@f7l zhD5dLfx`IFwh26sV1BR{-1()&yfZ)FbeF;Q+{+%=g?hE>;{9MZ-HM|acmw6@#bV3# zS{#HBtCe!irAtb?tGc3{g$3kl>B_ZY9qd}&bM3P)UVOCWIfYALS1QZZJaO^j>Y`JA z1-PYrvFTJ@trQ+j8;g6+Jg#q5Y5kw%F6PnqJ*Um6Bl-&iYHeR(9gt2SVT!)z$S94^ z89R7?vrVzVoaFmn5qN(p^KaZHI(o%FsK8+TAh(L~biOnA(`Al8lsW$ifPcVU_W+-} z!-xlSQpgPjPLZKWkUNgPUiELQ`VkdC^=Za@7P$W7h!KU)9jdRuLKi%TN{^{PM`oaD$sQUM#PZ#c$*Z0uLy3Q-9cpW1> z$o-~`HG*`Ge=?AO`)BwoRC>MtMvwO&L@vkkT)sdo*c0XcTs8C=8JYySH_+Fs{*J1j zQ?WFEI;+9@rxBx^!TFz5m%<73>B9AS{TQ9*`Q17$S9KoWAB<6b5{_$I06(D;oIUv( Ns{XbjQe3b7^A|1S8EOCk literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_strtrim.c b/2025/2/libft/ft_strtrim.c new file mode 100755 index 0000000..1f6bb08 --- /dev/null +++ b/2025/2/libft/ft_strtrim.c @@ -0,0 +1,78 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strtrim.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/10/31 12:07:01 by tomoron #+# #+# */ +/* Updated: 2023/11/02 10:24:37 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +static int is_char_in_set(char c, char const *set) +{ + int i; + + i = 0; + while (set[i]) + { + if (set[i] == c) + return (1); + i++; + } + return (0); +} + +static int calc_len(char const *s1, char const *set) +{ + int len; + int i; + + len = 0; + i = 0; + while (is_char_in_set(s1[i], set)) + i++; + while (s1[i]) + { + i++; + len++; + } + i--; + while (is_char_in_set(s1[i], set) && i) + { + i--; + len--; + } + if (len < 0) + len = 0; + return (len); +} + +char *ft_strtrim(char const *s1, char const *set) +{ + char *res; + int len; + int i; + int res_i; + + if (!s1 || !set) + return (0); + len = calc_len(s1, set); + res = malloc((len + 1) * sizeof(char)); + i = 0; + if (!res) + return (res); + while (is_char_in_set(s1[i], set)) + i++; + res_i = 0; + while (res_i < len) + { + res[res_i] = s1[i]; + res_i++; + i++; + } + res[res_i] = 0; + return (res); +} diff --git a/2025/2/libft/ft_strtrim.o b/2025/2/libft/ft_strtrim.o new file mode 100644 index 0000000000000000000000000000000000000000..05b7bed0a64b5d811e8acb24212f9b64cff87a7b GIT binary patch literal 4416 zcmbtW?Qc_M6hHUgKDS-FwHpi>g0xWv#Fy>`2yYW>^lBLl5){OQrR%zGtF-IV-p(mb z2=#?giSWTM`VSbvZ^j@o1cGr$f*L~tB#R-aSxHBniIOUqdCtAhvtBOcgW*~3o^yWZ zcYfzQ_dfTz-LGwZL6#&CLxN3E@dS!cemy6r5)qELrPeHqaTI1T4($xv=5(yNvOB=Px zvB&4K8ZisSVqKRGHM%fr@Gn&ozZcHXp}6Lt{Q7GhzB}cpf?sY9x7O__KW3kF*lMI2YeTI1YMjmG}-LK8iJ{<+T`+B(!@OquRlI9c)nt#~kVw=FBk_!ye=-NS4(B)}#iR{{*W+?;viSSDE}F zbG5RX9P^=o+<{uHNIt>52bl|H9mkmb!D?2g9>fN=phPE=)Gex~lYy#iKhIS6E#}Cv zrX2HQl2sN(v6fL~kf|thgej|7(=kC@<_ah~Pcd0}q5~Td6!$9T9ANGoR`PUEjcyl) z-B+nY8Jln-vq3$@yq%b|#cWQ>Ay=01=KkNEiJSSp;~GXB@W*U5f`SK#eY}r=jDIsc zVC)^VALICs=Cd~U4Cg3Vq1sTuSq%mSYVL!(?}OLh2cLHjeiV^;mUS8L24Yw7s;07; zE6@t)r^20CbBLFfIAsfHIeQ}>@+gf+KxSs-_;e2u51TOY_fX7M0suQx|LZ`=u3mx&?sDHY| z2y#Q<%egO}r|3uUm0AY``{KR1fk?EsHxnO$U?!f72KD%;4#8MDm5Sf{fifv(7JdjL z>HdEFU}c36Lc&ZYhT`+#@=+jc&c)uXY!5KJaV zQjsX;XA=W=X;L8$#0Mk&nP@5wsc15pj#)mvc)$he!yWC#`Hd9K4?1q5fKo+7@tEMh zwiw-i>!A0JFggRQBg7r?6HUa#eiObA4LWl|0^oC)Z&)sdm`-~+H5%9vIT7}e1)89^-or*Pw%e1{!YY5 z(|-Ra`GK$sW7Z++i}^SPm94XBoDNudz|S9XHqrB^A@WQQ;4d`n_nu<){Kv#Po +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/10/31 11:59:20 by tomoron #+# #+# */ +/* Updated: 2023/11/02 11:00:04 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +char *ft_substr(char const *s, unsigned int start, size_t len) +{ + unsigned int i; + char *res; + unsigned int res_len; + + res_len = 0; + if (!s) + return (0); + if (ft_strlen(s) > start) + while (res_len < len && s[start + res_len]) + res_len++; + res = malloc((res_len + 1) * sizeof(char)); + if (!res) + return (res); + i = 0; + while (i < res_len) + { + res[i] = s[start + i]; + i++; + } + res[i] = 0; + return (res); +} diff --git a/2025/2/libft/ft_substr.o b/2025/2/libft/ft_substr.o new file mode 100644 index 0000000000000000000000000000000000000000..b1e1da9f49c16f5fbaf3bd68380feeb01a09e93d GIT binary patch literal 3848 zcmbtWU2GIp6h5=FcXr!tx4)D^L5fi1fzFmKg<@A+A`44tP5prsqi(m`*>=yUXoTD%*by&sMiXI6@Z`_ba@ zI}4FTB1C6rR-jNFU5Kob`};g$b2BUV$eZiGAKia_^58PeMHY)!ch5(A`tO{J+|oBh z=OQaOD)%oIZ`6G2_Rg+C&6Rl^Iv=_9sZ?++`!Hg5UMfZwm#>-OWM7s+t;cr6>pqx^b&8bf9YJKcP_GICSO|qk%Qm6 zz1X*v2lZ-n_Pg+F*Q7eBt*wE{ZTa=J>s#9DTIv;jJ%CG<$P72jZBP4pd{1pS+VJcK z0GWY{Lq{6`+>Xj219*nZTZ4Y(&$?jod^ao=XIR9l@?ZFpy3SCyi1BB*x--&_Oric>@YrJvExu zMp{!@1JYWy1f+A>QP5MIYf#Mb@IS&An_}h_!@Rb5b6=$Yi-W#C*yqlP|E^ zKGv*+SWSpX-d=|JJjyXMuMhLenADBTiUJ0Nm@CApln&-cv=L1#HOMLrWIV%M?{%^Y z#lXVHm?yS1=pwIyKxqyf@j^o$B5< zu1`;NX7-J?o154EWB3&5KO79T9b+MRkjErc> znDvUNW3_Js;>r>n)?;u_-%gx8&omM(?X4KW+4=uT1!|{S!!^IgRuFN^4>bOlft&-rav*Gqt z+G4{M8(+jx9{U|dC!9p!BCnXMz_(howR0};BOGt$THr5mUz~k`pWt|_gFndq?GF5P z?(cNq;*wP9Jug<4qWsv)?4H$a$cNkXFrubP)D@k!e}f$Je=1iLCtIFxN2xq2B?W#CZplk zz``sVeraO4WK!1*y>ttR95^V^2{ty7ywBB~1?;v4x_Usboj<`?6m^f#`uR(*(c~}5k5AcNIy{01KlRJb#<@)d7jf#Dy{>2?Ybp*Zl%5di` zY=SS>T8c1_?_NVJL#)4mzd@ti{G(;&??!Q7-1m?^W2e_hX#B(riFKv=BqGl80Pdn8 VI07TxL5B^cl?RZbe^Ji<{{fb@xNraf literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_swap.c b/2025/2/libft/ft_swap.c new file mode 100755 index 0000000..851ca4e --- /dev/null +++ b/2025/2/libft/ft_swap.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_swap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/12/31 12:44:19 by tomoron #+# #+# */ +/* Updated: 2023/12/31 12:45:27 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +void ft_swap(int *n1, int *n2) +{ + int tmp; + + tmp = *n1; + *n1 = *n2; + *n2 = tmp; +} diff --git a/2025/2/libft/ft_swap.o b/2025/2/libft/ft_swap.o new file mode 100644 index 0000000000000000000000000000000000000000..0d94fe5699892eade51c77caeb9eb50bfe4eb27c GIT binary patch literal 2848 zcmb_dO^n-A5T0kp-fYu!v)#hBTIdGav>d?hM&(ERlvHRTKwAM~TM1MJC+lp}CUF$I z%L1wj7etf`J#yg)f(x7~ai~guUi4W&Rt!3mgpf&!H7sa=cB8tg;nT7C3KeRSnseRO%dK3=^yhSBO>G`7ci za!2{`>DV3R&)-t>s#007%*t@Fw7686U)pPjivWhB$gJ%*E6*2RC>%ZT@&N$T0)v6q z7XWg{cevIZ5NaO=vvQ(PC}2Tn@v%VVsWt_VP8VUolZ2rpmO5)f(KN1Y<)HW$qG%56 z#LOAjx-&4hMr4cLwq@nuFnI($Kw4d|zfs=whhZn^m#Ztzic^Jl)CfQH22Kmy3qj9! zqoC&=uQt~G@KO{ETrX(3)nnDC-KyK|G~1Ezp}zv1egyq0M7;s*#?%(XYfFmA%tb@{ zl5tQUzXNKkq?UHiqv#6}uT{o<}{f1>b)~x+f zY?_XRK;CvO(|(amWfxq-zzqLsdvH4+AV1-F4*t5IMKiGzvcv>43r19HevM)3Ut|Y9 zt9et?gt@7sStiVDUSc*;?bYg(9+n>1h2wg)5`l315R=LtLYsu}nb=BR%WM-)tCP5* z3D=vRI*>$giCaqG2`+J^4~4(Vy!|QuY4)Wzg-<7wq#VDedEaH94kd~3&n50;9n_-w zS1$87VLJXe;}l2MPLPwrkFZ~7osJLAy5GFK(eRqhp}z@EyJFlHtdn$~))+KPd-OXNu z=7gP%9jPfe1OA0Zd+7Ci35zGn!L*UrMEy~Z^#3BaFpA!%612|E^{W7^ldEM4(upA~ zeFAGtk#oT=NI!~CbJHO%ZlS%{3QZWZpLo_%CFx8lK&aRDdsWeiF%V0y)OW3 z$uF9I%VO))Zy3z_UOMk>bh7Hd!}Uv@R6pIia)t$`dx}z}>%Y$VAI33Vq*l?N;Goz# z@0TnvgZo2*4fH#Q;@si+&yk~v)GyHYXk@Mb&y4jKkt_3M{a+)NRcf9K`b-kBPIJFP zJS)Ha9O^ue_MgsbI{!(;C}w*9N1Q*6OMcN~oNJ!CPsi|6d?q6IhX9nHMCK(Pz|Ux; R_nyXXGPun|nwQl-{{lFN+?N0V literal 0 HcmV?d00001 diff --git a/2025/2/libft/ft_tolower.c b/2025/2/libft/ft_tolower.c new file mode 100755 index 0000000..44cdea6 --- /dev/null +++ b/2025/2/libft/ft_tolower.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_tolower.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/07/13 21:59:21 by tomoron #+# #+# */ +/* Updated: 2023/11/02 11:00:47 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int ft_tolower(int c) +{ + if (c >= 'A' && c <= 'Z') + c += 32; + return (c); +} diff --git a/2025/2/libft/ft_tolower.o b/2025/2/libft/ft_tolower.o new file mode 100644 index 0000000000000000000000000000000000000000..768607762e035a29e3b5c1256fb99c133d34b4e3 GIT binary patch literal 2728 zcmb_d%WD&15T9>1n?BN*zO1n>IdCX;Vto77-t)D3x@RZrac!TavX}u__dV zqKIC_i#HLxc<|&w@KTQ+{R2D-dbUt!vfm_MmsJoP*qxc*{Jxp_Ub_z_&YjkT02Tow z(C`=qcx^Q7bj?gdH!`oBUHi7Sva!0dF?KJ8?;8(V9#3qnevGe8Y@l)TljsnMM379DwMC4@TK<{MNXfJ?nfF_~IE`ZQJ&=Vt(NCYd6;$whl zrs4v2H@ehdkT4X_5?6JIj-ab+&+i$Y389b?f?WtI^PnMHBv-V`bMYm+QY|>;cxu=j zHdByyGpS*UzY+`?=SKJVV}nEoJqSiL{0Cgw0fnJM zi{dp*9byefv2^HAJkPv{s#EE6P%^k;EBb1;oPls$`1;w{F2@nxByCay(k7f{$9Y*3 zt{!bVaU_g$-gXbJ<9npf=Z^VjCBD~zh$&FJBwT;U7?(Jz$`niZJs%QpajS*7Ep*B+0ee1^ zuUI8pDTQ~$#Nw`%MZH`i{h#DB=26cdr(LJRhw{}^^|$wlsJpeBK$!n#r6pysL9JPQ z&KRb#{+txEBwdFO+!g-FW%A{TK?W|54U|CWlge^?q~xqli<^A<1JEm4&V|AT`%#Z6VIKO3h0! zXunk6G&({3Uy$dA`=tKqYsz<-ar*vHDS!Vm?n*V&j{G-U_@jU-mhy}H}EwiKn$RUiW!u44{#h`v}(?Ru6 +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/07/13 21:59:21 by tomoron #+# #+# */ +/* Updated: 2023/11/02 11:00:56 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int ft_toupper(int c) +{ + if (c >= 'a' && c <= 'z') + c -= 32; + return (c); +} diff --git a/2025/2/libft/ft_toupper.o b/2025/2/libft/ft_toupper.o new file mode 100644 index 0000000000000000000000000000000000000000..457a21031a8d15ce736c74a8e8827a020e405ef7 GIT binary patch literal 2728 zcmb_d&1(};5TCc3jcsF^era2(ZK_63ZZv+P(nh4(N)bO$5h`($ZrWgyEy=djQnero zMG-xD@#0McFCN8%pa;c^9{UFfUIaaOvY<2BH_7X=3W5W>GxM9@o0<2udvj#`xF!U! z2pEEf$0)#4qhY6OW*WMXd46>H^YZo8Th~{u#TdR9ZZ_W?S-tfozC5yu#^pDnT_h5n zhMuT&w{`a=+WR`f)ouXI6lA7*^u(da;mD5OvCiRM0NnshLSvl(p>3cih9Z#&RvgC1 z0MSIn1#E6~slgy&D4r!Q=nx%3SJxgc8lDNEkP(7S2rBcSA!{U8w8~TQIlEFVIOTY1 zx4GL)LEg={&g{<`_ZzoOVif(sfG7y{XKkUA^i$GfB(IB~!an`;w_-v5?KX$`B}& zUC6-3P+rhBxt?T&UV8lFG`Vr6`& z!U5Dmh@Y)dQnZu!pfNxu=wd*N8T~aIGVt-o%0cVp+eZ^0hQp_ChX9&2Vv*=kVKlYO z8nN(6qsug6Ck-Q54D=&Rjw2EuXS>t|zw97p&%X_Fd|HsLfo z&dZu`^=Q+HBVnBLws~+J-y(fJcg!D^c#n^NPWpTnnSW8@+z%Zwb=TrDPMC^weagdQ ziE7ddh4Jm43*47KKbVttc6KUbWwRA~4ougccfrg#rIL*|(5%=+OERi%CFA7tRokud zAcWW~7Rq*p{KmCkGuoP*M6QyqP|iDGmL1nNPnkD;LYuVwuQawyeT?>E=qk2vMrC3&o(vd|?4q~`jpEyUSY zsd)(o?U%}%KqsjG)AIaqpVU8nP5CY}PTwCY +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2023/11/04 08:03:00 by tomoron #+# #+# # +# Updated: 2024/10/28 23:09:14 by tomoron ### ########.fr # +# # +# **************************************************************************** # + +NAME = gnl.a + +CC = cc + +SRCS = get_next_line_bonus.c\ + get_next_line_utils_bonus.c + +OBJS = $(SRCS:.c=.o) + +FLAGS = -Wall -Wextra -Werror + +$(NAME): $(OBJS) + ar rcs $(NAME) $(OBJS) + +.c.o: + $(CC) $(FLAGS) -c $< -o $@ + +all: $(NAME) + +bonus: all + +clean: + rm -f $(OBJS) + +fclean: clean + rm -f $(NAME) + +re: fclean all + +.PHONY: bonus clean all re fclean diff --git a/2025/2/libft/gnl/get_next_line_bonus.c b/2025/2/libft/gnl/get_next_line_bonus.c new file mode 100755 index 0000000..658e574 --- /dev/null +++ b/2025/2/libft/gnl/get_next_line_bonus.c @@ -0,0 +1,113 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line_bonus.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/05 17:03:11 by tomoron #+# #+# */ +/* Updated: 2023/12/04 09:56:26 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "get_next_line_bonus.h" + +char *get_next_line(int fd) +{ + static t_buffer *buffer_start; + t_buffer *buffer; + int nl_found; + int start; + t_result *result; + + nl_found = 0; + result = 0; + start = 0; + buffer = create_find_buffer(&buffer_start, fd); + if (BUFFER_SIZE < 0 || !buffer) + return (0); + if (fd >= 0 && (buffer->i == 0 || buffer->i == buffer->rd_l)) + buffer->rd_l = read(fd, buffer->str, BUFFER_SIZE); + else + start = buffer->i; + while (fd >= 0 && !nl_found && buffer->rd_l > 0) + { + nl_found = find_nl(buffer, &start); + if (!ft_lstadd_bak(&result, buffer->str, buffer->i, start)) + return (ft_lstclr(&result, NULL, NULL)); + if (!nl_found) + buffer->rd_l = read(fd, buffer->str, BUFFER_SIZE); + } + return (result_to_str(result, &buffer_start, buffer)); +} + +int find_nl(t_buffer *buffer, int *start) +{ + int nl_found; + + nl_found = 0; + if (buffer->i == BUFFER_SIZE) + *start = 0; + buffer->i = *start; + while (buffer->i < buffer->rd_l && !nl_found) + { + if (buffer->str[buffer->i] == '\n') + nl_found = 1; + (buffer->i)++; + } + return (nl_found); +} + +t_buffer *create_find_buffer(t_buffer **buffer_start, int fd) +{ + t_buffer *current; + t_buffer *last; + + current = *buffer_start; + last = 0; + while (current) + { + if (current->fd == fd) + return (current); + last = current; + current = current->next; + } + if (last) + { + last->next = malloc(sizeof(t_buffer)); + last = last->next; + } + else + { + last = malloc(sizeof(t_buffer)); + *buffer_start = last; + } + if (last) + init_buffer(last, fd); + return (last); +} + +void init_buffer(t_buffer *last, int fd) +{ + last->fd = fd; + last->i = 0; + last->rd_l = 0; + last->next = 0; +} + +void ft_lstdelon(t_buffer *node, t_buffer **start) +{ + t_buffer *current; + t_buffer *next; + + if (!start || !node || !*start) + return ; + current = *start; + while (current->next && current->next != node) + current = current->next; + next = node->next; + free(node); + if (node == *start) + *start = next; + else + current->next = next; +} diff --git a/2025/2/libft/gnl/get_next_line_bonus.h b/2025/2/libft/gnl/get_next_line_bonus.h new file mode 100755 index 0000000..28facee --- /dev/null +++ b/2025/2/libft/gnl/get_next_line_bonus.h @@ -0,0 +1,46 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line_bonus.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/05 17:24:39 by tomoron #+# #+# */ +/* Updated: 2023/12/04 09:57:06 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef GET_NEXT_LINE_BONUS_H +# define GET_NEXT_LINE_BONUS_H +# include +# include + +# ifndef BUFFER_SIZE +# define BUFFER_SIZE 42 +# endif + +typedef struct s_result +{ + char part[BUFFER_SIZE + 1]; + struct s_result *next; + +} t_result; + +typedef struct s_buffer +{ + char str[BUFFER_SIZE]; + int i; + int rd_l; + int fd; + struct s_buffer *next; +} t_buffer; + +char *get_next_line(int fd); +char *result_to_str(t_result *lst, t_buffer **buf_st, t_buffer *buffer); +t_result *ft_lstadd_bak(t_result **lst, char *buffer, int n, int start); +char *ft_lstclr(t_result **lst, t_buffer **buf_str, t_buffer *buffer); +int find_nl(t_buffer *buffer, int *start); +t_buffer *create_find_buffer(t_buffer **buffer_start, int fd); +void init_buffer(t_buffer *last, int fd); +void ft_lstdelon(t_buffer *node, t_buffer **start); +#endif diff --git a/2025/2/libft/gnl/get_next_line_bonus.o b/2025/2/libft/gnl/get_next_line_bonus.o new file mode 100644 index 0000000000000000000000000000000000000000..780c1a46026415f84cc62f7cad5b801e8e481a7c GIT binary patch literal 2976 zcmb_cUuauZ7(Yp8oAu99rwpfq7JLw94aw*vQYV??x}z*Igo1)2rs+*rnm>})IA6cwK7{uWLt@ppsBKXO5$ybwoow>;O2e(W>M-*NZDTd-dv5)vPU5srQ3~_P{i}Ph)a&(- zr@`%6hNW7j9+46YrC%-%oB;x|Z32MVH&uwWjJTy4Pd|I-@o1#Pp2T zF{uGfm^f`iO2`JpPQ=Nv{S#ao%y{}n0tsYt>Ry9eJTACv*=Qg2nm}(SDN>hPAveS* zoy0afZV(XxC+MFdJmJ=FRUB@a-MZGHBat4LdR)}mtrJ98*A9`!;&c?pCN}HDYBR4z zuWIeeXtmN|;g4(6J?z%Bwz#lo$r435JoD;Q_`3t4sxxd3Aq`Eej8eTBK*;u&w$?#g zH^h9R9?RUelNcdNI8Cgcn39D+j4F}W6LFF++zL;ulAz`r_aV-NK6IJ!D44?xYJ8Vh z;|#-eMabf+Fhj{!tj4RC;~2mD#$l*{;WlP82WJAdrrj4O5|b$}s@1MjVd~n@YDe{% z4&CK50X!NSO!rFKxDBysiF*`t#8@VmE-Xx5(o5yVVqx+`EE0>Hz&ReL!+-+sy}<&@ z@A6(mp@6-6JS4Mjbr&~834r@mnDfF0o%aZ%l^zhIQ=;Gvj1ftJPDlgZpyr( z_rP)zZ%SPB9N3Rod&PeSI1!ms_x{E2j7U5li4A&i6EYFm4q++#9|!~yPQ6!n6EYFu z2eB0XH-R9+hp`m?nC!bhepKTAI!}7+M?7)9@!&KYD*mtg;Qx5=F^_#}02>h16UI_; zCLt41J+jqepAg?2T+PutK3vVqst@0k!8Uz(Q{sa|p@YLCqhsL#7Afhubi~k?4Yr^g zsRD#lZn2<8=FDtXFQv*xx@53OrkKy`1qgHHGArq2GiRiXBD5uzg+tlM6LOET7KhikaQkskvgoEJrddf{Kmw9Qfrt@&AXq2qUj} zSHOET+(dFN+|5H(rhVv>Bc5yz_`p$Z-hob{nwt5hEa+6 z(y%)cQ1;Ti@2~ds{wW2;@sjdC;sqhga{7GLgLzH=@E0VN%3s;uaQ)wv!UlK$8F zh%5Nda~<$r{d-g1AN`++sDA`0f7QQFfeoDN6~R`q`gBM7lOK`d{`wv0{I!$)CKUx* Ml@7!n!Sd(-4^4N1-~a#s literal 0 HcmV?d00001 diff --git a/2025/2/libft/gnl/get_next_line_utils_bonus.c b/2025/2/libft/gnl/get_next_line_utils_bonus.c new file mode 100755 index 0000000..1233d60 --- /dev/null +++ b/2025/2/libft/gnl/get_next_line_utils_bonus.c @@ -0,0 +1,119 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line_utils_bonus.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/05 17:35:15 by tomoron #+# #+# */ +/* Updated: 2023/12/04 09:58:25 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "get_next_line_bonus.h" + +char *ft_strncpy(char *dest, char *src, size_t n) +{ + size_t i; + + i = 0; + while (i < (n)) + { + dest[i] = src[i]; + i++; + } + dest[i] = 0; + return (dest); +} + +t_result *ft_lstadd_bak(t_result **lst, char *buffer, int n, int start) +{ + t_result *current; + + if (!lst) + return (0); + current = *lst; + while (current && current->next) + current = current->next; + if (!current) + { + *lst = malloc(sizeof(t_result)); + if (!*lst) + return (0); + ft_strncpy((*lst)->part, buffer + start, n - start); + (*lst)->next = 0; + } + else + { + current->next = malloc(sizeof(t_result)); + if (!current->next) + return (0); + ft_strncpy(current->next->part, buffer + start, n - start); + current->next->next = 0; + } + return (*lst); +} + +char *ft_lstclr(t_result **lst, t_buffer **buf_srt, t_buffer *buffer) +{ + t_result *next; + + if (lst) + { + while (*lst) + { + next = (*lst)->next; + free(*lst); + *lst = next; + } + } + if (buf_srt && buffer && (buffer->rd_l == 0 || buffer->i == buffer->rd_l + || buffer->rd_l == -1)) + ft_lstdelon(buffer, buf_srt); + return (0); +} + +int lst_str_len(t_result *lst) +{ + int i; + int res; + + res = 0; + while (lst) + { + i = 0; + while (lst->part[i]) + i++; + res += i; + lst = lst->next; + } + return (res); +} + +char *result_to_str(t_result *lst, t_buffer **buf_srt, t_buffer *buffer) +{ + char *res; + int res_i; + int p_i; + t_result *start; + + if (!lst) + return (ft_lstclr(&lst, buf_srt, buffer)); + res = malloc((lst_str_len(lst) + 1) * sizeof(char)); + start = lst; + res_i = 0; + while (res && lst) + { + p_i = 0; + while (lst->part[p_i]) + { + res[res_i] = lst->part[p_i]; + p_i++; + res_i++; + } + lst = lst->next; + } + if (res) + res[res_i] = 0; + ft_lstclr(&start, buf_srt, buffer); + return (res); +} diff --git a/2025/2/libft/gnl/get_next_line_utils_bonus.o b/2025/2/libft/gnl/get_next_line_utils_bonus.o new file mode 100644 index 0000000000000000000000000000000000000000..02c09c5d69a1ab8ffb37fe40d30842ef3e6cd940 GIT binary patch literal 2680 zcmb_ePiP!f7=OE)CfhV^qSQaA&^>r4who(uy4WCFbaW0~kxD>l!*(;7#L(H0yN&RuJRwd-L9AcGBMb;LZ2m z@B7~Gec$)Kx5?-F*>{tP1XGe=Z?V0VLK*80?alLInrFlCoHV>Y4R5h)cy7n=Cfi0s zZ;{#X^_Fp3Z`WSNtYi3v*7DIbrd^s|6VsMaUriXE-U@zGhC2gk+S#328$I@=I7RT+ zA7ya{_}#WQ`M@h+=VFJshjCb!ytW4sa(E5{VRL*H4o!AVzsE-bH;wv2mW_VB3Se2k z_d~)>21f+$=RvGDgS*1tz3@v8Y;B@6yxW4%qo6xRJr_Oh8*&h7hvRzyM3xx*@%U_yZY0*p`QZWqQ&|rulff)+7crx%Xy{uMVz1R2{E*-kZPr-U8=}n$4SiE)(m^Jh zB9m7H2Ug*eXu`0CC*kXxBEL;v-x8CpU_*F@`E`PuIH1Y+2tctXd@a2sHdNoCv#2T< z_4WMJ8Z+&ZGnctyRcrGVCv$3C8`n-zP$Wk~#S)*MV~K^a#ET7(q)o4x&?5e_*=pPs$Yvwuf8 zBo*aP{wwUEW&f9+<^cO^cfSQZEV&OR>Zc>P$Q9T{iIXM~IYQsS7$YDi8rH~Yuf*_Py$=iyr4O=MUaaw|V_v?>w5ny7G;S?$rkRy;*>X6mS~b_^ zMP4Bvv_G5`f8c< z|0F+wM_y4MqbC1PSnER>{!{3er?4c9?lvlUx%fUt9)Ck4@T1;P{&E{zr6z)OLdB@p z=#HsJNuCcCdk&h;&&st@_vN|IDnM!#ztSH7SM#Xr-?6xrE$;h8xc@T6)+dw{`=F&D+ZQ{qTQdH% L+(3#-5Jf-${K-F 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 literal 0 HcmV?d00001 diff --git a/2025/2/libft/libft.a b/2025/2/libft/libft.a new file mode 100644 index 0000000000000000000000000000000000000000..7f42ef789f659aa078b047f98fe52aaca07c0e06 GIT binary patch literal 162604 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

G9+JP#uv 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 +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/10/30 16:55:48 by tomoron #+# #+# */ +/* Updated: 2024/01/10 14:10:51 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef LIBFT_H +# define LIBFT_H +# include +# include +# include +# include "./ft_printf/ft_printf.h" +# include "./gnl/get_next_line_bonus.h" + +typedef struct s_list +{ + void *content; + struct s_list *next; +} t_list; + +int ft_atoi(const char *str); +void ft_bzero(void *s, size_t n); +int ft_isalnum(int c); +int ft_isalpha(int c); +int ft_isascii(int c); +int ft_isdigit(int c); +int ft_isprint(int c); +void *ft_memchr(const void *s, int c, size_t n); +int ft_memcmp(const void *s1, const void *s2, size_t n); +void *ft_memcpy(void *dest, const void *src, size_t n); +void *ft_memmove(void *dest, const void *src, size_t n); +void *ft_memset(void *s, int c, size_t n); +char *ft_strchr(const char *s, int c); +size_t ft_strlcat(char *dest, const char *src, size_t size); +size_t ft_strlcpy(char *dest, const char *src, size_t size); +size_t ft_strlen(const char *str); +int ft_strncmp(const char *s1, const char *s2, size_t n); +char *ft_strnstr(const char *str, const char *to_find, size_t len); +char *ft_strrchr(const char *s, int c); +int ft_tolower(int c); +int ft_toupper(int c); +void *ft_calloc(size_t nb, size_t size); +char *ft_strdup(const char *src); +char *ft_strjoin(char const *s1, char const *s2); +char *ft_strtrim(char const *s1, char const *set); +char *ft_substr(char const *s, unsigned int start, size_t len); +char **ft_split(char const *str, char charset); +char *ft_itoa(int n); +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); +void ft_striteri(char *s, void (*f)(unsigned int, char*)); +void ft_putchar_fd(char c, int fd); +void ft_putstr_fd(char *s, int fd); +void ft_putendl_fd(char *s, int fd); +void ft_putnbr_fd(int n, int fd); +t_list *ft_lstnew(void *content); +void ft_lstadd_front(t_list **lst, t_list *new); +int ft_lstsize(t_list *lst); +t_list *ft_lstlast(t_list *lst); +void ft_lstadd_back(t_list **lst, t_list *new); +void ft_lstdelone(t_list *lst, void (*del)(void*)); +void ft_lstclear(t_list **lst, void (*del)(void*)); +void ft_lstiter(t_list *lst, void (*f)(void *)); +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)); +char **ft_split_set(char *str, char *charset); +int ft_strcmp(char *s1, char *s2); +void ft_free_str_arr(char **arr); +void ft_swap(int *n1, int *n2); +void ft_set_color(int r, int g, int b); +void ft_reset_color(void); + +#endif diff --git a/2025/2/main.c b/2025/2/main.c new file mode 100644 index 0000000..4f9b609 --- /dev/null +++ b/2025/2/main.c @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include "libft/libft.h" + +long int resolve_part1(char *input, char **split); +long int resolve_part2(char *input, char **split); + +char *get_input(char *file) +{ + int fd; + int rd_len; + char buffer[1000]; + int len; + char *res; + + fd = open(file, O_RDONLY); + len = 0; + if(fd < 0) + return(0); + rd_len = -1; + while(rd_len) + { + rd_len = read(fd, buffer, 1000); + len+= rd_len; + } + close(fd); + res = malloc(len + 1); + if(!res) + return(0); + fd = open(file, O_RDONLY); + if(fd < 0) + return(0); + rd_len = read(fd,res, len); + res[len] = 0; + close(fd); + return(res); +} + +int main(void) +{ + char *input; + char *input_cpy; + char **split; + + input = get_input("cur_input"); + input_cpy = ft_strdup(input); + if(!input || !input_cpy) + { + fprintf(stderr, "file read error\n"); + return(1); + } + split = ft_split(input, '\n'); + if(!split) + return(1); + printf("result part 1: %ld\n", resolve_part1(input, split)); + ft_free_str_arr(split); + split = ft_split(input_cpy, '\n'); + if(!split) + return(1); + printf("result part 2: %ld\n", resolve_part2(input, split)); + ft_free_str_arr(split); + free(input); + free(input_cpy); + return(0); +} diff --git a/2025/2/main.o b/2025/2/main.o new file mode 100644 index 0000000000000000000000000000000000000000..fa3b5448ff78bda3af2a69c3b58d63d0e6ea137a GIT binary patch literal 5808 zcmb_gUu;`v6+idheAj=II7$Dc&7khos2i+y;$~ahr6JKU+@@u0g^m-1nR?RDG#hKASARg21Q7#8u7pj5A0z)R6>(n8bOfIR9H|r=ks@* zn~N<#a3uSj^E>A|=Y0P^`gmKi=3NWpQB@7CNn!c}sHC~%BB z*!T`q!|b%AoUB^)j`F#!YEa=YgtF8Y>aAi0RIGdBlIMGtN>_mr;Lot0&0H7)m@EPe5iiU4~R@ z;^fJR)2S~V`)V@v<=LlBRnx=i+)k%y3;Rl61B;wB5qj!r>N*Pu@(BAyn z7yqW8`Qyaxn}cVoc&-K1l19&qjaaow=QQ^NPj2RL5wa}}gXI5-CM@85X z!K)&GMiVvN{HgFCL^dkA&C{aK%!%$%;U5*|lvx$Ryoh@uF2dJ1s2|&5#K<*t9TokK z2st7!h3$`ukoh~|H;>C$0gR=aj?m2GW@u7?`7IF)-bM4fq90wlu)^>Z7I0jI%_$Ly zkrpzCFxge}ebM&|5kwFFRq27H$RgrD7mp#jcT(sVMK8MPsP$o@R=&$Ee0{R0N$d(0 zH;La`)eMd5CJy$$Te50p(}c98-8e@b@E3WddYuetPE*sAM@hpLOmuk=rD*yQXPvKi zOW^|zx8}MWR(RZllWMr)E3;%qn}fh;vu*GQaW`+u2H>&Xf(+oQw;Bz=quN8eQSWt) zkK9X$y@Q{K$CuPD>~Aal4{iMETx{k46ZEINoR3agqAU1mB z`!@dP+u%pq#0j*)@fwyyE3O+q_@0w=x&h0TLiI9Ub>TFdjKAW-dtEraf{48F-*3SG z692C*+#UZxH4n67@VVK{yIxNthFxy~;r{8NZ+ci~@g#iv;8|GX>C4i|pG zh2y)X>Hmfcr?KTYKXApT>z45!y8Q7~)5PC);j|an|CS4P=l#%y(^_j&NF(jW5Rvr2!&gU=~_ z$b*-ZKH|aYTp&8sU~+7zrf(>n`^R-&RQR~!jPri}tOtKx>6Qooj?#HvXc_qwMvTXw zamqu)fewdh+-%&gVDBAz!!uxNOzH2xtEX6;AbaDw$YJ z$&5#p&f~y&6%1Y7k)GadJ9h5s-#zfac8F!|>FP`>Jw08v&q1tg7t%4uzTmiCx3Nrd zZqBCHt&?gzSsQMRmKCR*D&}$(+o^Ccgjg)(=k1i#PsE5-oGkucqe!{3EiI`u>h6H) zY*sp;d$wBIV#?3wit^bG#S*@$WAjDFj(z^AQwJ(eI&&6cg~GYH6t%D9XCPN9~_7O z+Fy2qD0_Y1Y=KdeLuycWc^Y_B_&)l!>i-RO(4V1TNYsBCV{iYTK+GExA$W#@BAsZk z=C{}PF|@SG?^lPz71e<9Q*Lkmrw}6-KA%vO^j($z4F(kF{LJaRW!dd|Sp8<_bDnKp z-&fJls{ZfMV+o1pkLq{due^TtAx<&9^?yy}r#F$CI6w27Xk^*#_iCH}9K62t!wIpH zT5in{uc`J^O{5|4_%r->6k7FvNbO(l7xkYYZqNPy6Jp+)5P~}@|LY#3M}@oS+baJV zmEWRZNR*%6yWaft4yTx0CyJ5^>T=!Bfa08=`EL+6PHYsBy{KFyyP@){WgzpDf!nd~ W!w7iCo@`fC{&$p-+EFZT{r?1#Og&ow literal 0 HcmV?d00001 diff --git a/2025/2/part1.c b/2025/2/part1.c new file mode 100644 index 0000000..f54e463 --- /dev/null +++ b/2025/2/part1.c @@ -0,0 +1,71 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* part1.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/17 23:03:36 by tomoron #+# #+# */ +/* Updated: 2025/12/03 16:31:41 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include +#include "libft/libft.h" + +static long int is_rep(long int nb) +{ + long int tmp; + int len; + long int div; + + tmp = nb; + len = 1; + while(tmp > 9) + { + tmp /= 10; + len++; + } + + div = pow(10, len / 2); + if (nb / div == nb % div) + return(nb); + return(0); +} + +long int resolve_part1(char *input, char **split) +{ + (void)split; + long int start; + long int end; + long int res; + + res = 0; + while(*input) + { + start = atol(input); + while(ft_isdigit(*input)) + input++; + input++; + end = atol(input); + while(ft_isdigit(*input)) + input++; + input++; + + if(start > end) + { + res = start; + start = end; + end = res; + } + + while(start <= end) + { + res += is_rep(start); + start++; + } + } + return(res); +} diff --git a/2025/2/part1.o b/2025/2/part1.o new file mode 100644 index 0000000000000000000000000000000000000000..867b6c25c82ef366b882611259167505ba87cc55 GIT binary patch literal 4392 zcmbtWU2GI}5TD)ce|!DBqfjU!w3rqUar+@g1jG_Ny_RAK2~Z!%aqVr}ll#iuwt`6k zDVj7y1L}h$hJ+Z6@x`c#O8kJJ3HpXlV&VfNm>hw`!UGgFsWW>s*X?q|sFUo?%x`}4 zpZS06fA3JZ?^#{bKtzL0FzX2l@L|oY-R+v)un?I$Ba^>HCT?^@Cda2ElcQ6S3*k!? zjvNb5A6^H+qvu^`e7fMGli>nIg5R!l{fTLC>IsNUoYNwc;pyvFyk6wkY~JO6m4{_E zgfAa#!lVL@dkOVr)KvTu>dV)uL6>u=8LJcuYpG4c4HCJ)4Hd5ce64e4X2#8%_`YM$ zcSEjN!RDhhA@BUBkTgX_E`+br5=JJ*3snb~(r9O@$v+vnbC=@B!dG#+li{n^e?{|* zj?%oQn{^3?Iq|gI*ac)I|YtA8``kA8Saccdd$2*4JlNU#;U5HjMfXhEk10aHH zO8t^olGbi*p4QejUm0z=MWIDY+U6~3F!PH5bW0<%yUA!H?CPcH^A6zB}~ z%m=7gJI7V`CIOhOV6<(jsloG783f9LGx#Xb0@Q{EOJ~oQ4yXC7>2Q;Ry9`+I0UCyW zV!sJ1J}R2o0Ic{7%?ka*NEJLx1T^KnkSoRt zO_|lxs%k>%X0HmFZ>k#9RsE{b+^QCkxltMYs>*yp8D~_WL)CwUPOqxGKg0Z5)gq(X z98m$(wK!0<*^9sA8Rj<3w^R_#Ue#cBxb*^5VL};SDBVa~s>*2U$9`&h6`01hK(7i^ zpH-$iM(rpD`c)++nt|m?e_e&vVxJpT=!in18EC;m)L_FY)!3_or?57*j(~0sD{TS? z)lFQfe>y&L%w(bNqklrY0&dQf3mZ^c=2CbJEuHY<-W2zk#&CVynlfVC=Y=xLok+|# zfUeJb#Q@Jo$rCnUp2wRt4WQd-uG~hq!80%S3?udiKB2i(*IRiXoTgijznaIOm8iw% zFZ`I0toPt`9(=%qd-*vJ?&a^`b*G)78Z!QF#tEzU;PTGXih8d#Suw&*e1zACHVNTX zu2uYLW}9&03STtgmCPYUb0HC2#+5Y_d})zZx^D!3it#4af^TJC?jXUpGv4Ck?`FT% zhwov3l@FKwSmVP-*zfS+Y4+*=1c~$``?szLmvDN2NaT(b{(&M4-K+&4Xa5-={tEjM zAO0%)vM+Qj=&Xpy`j>D%H!Vycu9x5K$C>{S6Hwv(4Z z5E3()NZV1@cSqzR@pw)?rrx0v>7fk7oJ*lpBT%l4kms2nd|o&Ti`6DMWIalJ-%}aMtw*aj7@+EPceYzLuyvcc$ z_x&1TRKEcquN1gZ;Y&<>(RA1O=S18o1|3Oc?dKjr+>a48PR*ixQ&gp2KbPLya`T_! z`S0aSn!oq{mHE5>kC@|C%Xw4#ydc{C`dx^XtG}HW=p9a=`UJ_kN&Q|P(|;gSTz?Yd zUXl8uU&Nr;UfylampT&jb8QTi>%YJsCFzU$r+)?h{+A&}V+s#VSL$g{l!ZlA`jz^k z-@=I4B@!B~obScR_H!>3u`C~#5`7it_m_~OA^i({9*uJIZ{qh?=0)=l;v@O8uAd|3 z?+GC|%=LSGL7xksAh%ro2-lC$U?^0d{!94l??jBols?gP +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/17 23:03:36 by tomoron #+# #+# */ +/* Updated: 2025/12/03 16:31:23 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include +#include "libft/libft.h" + +static long int is_rep(long int nb_int) +{ + char nb[100]; + char search[100]; + int len; + int cur_len; + char *cur; + + len = sprintf(nb, "%ld", nb_int); + cur_len = 1; + while(cur_len <= len / 2) + { + strncpy(search, nb, cur_len); + search[cur_len] = 0; + cur = nb + cur_len; + while(cur - nb <= len) + { + if(!ft_strnstr(cur, search, cur_len)) + break; + cur += cur_len; + } + if(cur - nb >= len) + return(nb_int); + cur_len++; + } + return(0); +} + +long int resolve_part2(char *input, char **split) +{ + (void)split; + long int start; + long int end; + long int res; + + res = 0; + while(*input) + { + start = atol(input); + while(ft_isdigit(*input)) + input++; + input++; + end = atol(input); + while(ft_isdigit(*input)) + input++; + input++; + + if(start > end) + { + res = start; + start = end; + end = res; + } + + while(start <= end) + { + res += is_rep(start); + start++; + } + } + return(res); +} diff --git a/2025/2/part2.o b/2025/2/part2.o new file mode 100644 index 0000000000000000000000000000000000000000..ba9d3915e084e588f6922c2e08df0a404cb66e7f GIT binary patch literal 5024 zcmb_fYiu0V6+ScLJNvS|Ydek&Nos>)l~NdQwx;CaCQe~tVgictl1&wD*1NOziuLYl zc5H=~*h`(zZWoJ~hk#NQRe(g*ALS2%KtWJYla?R-Q?;p7sjgZiBd4nAk78Pcd(O+xi)s%npP=bZDM=Y8z;^=$I+U9u#BAPM%vx+YM7-qv+_$QFlSD|(*LYai-!SL1r^ z?5bXyTG1~huaH@9yqQ@}JzA zUSE$}{IBA$%)aE}Og9ECVcsjq7m-u(E65j@sX^Okwg;;$Ee%kciftt4CEn1|^6x&{ zwYIiq$IZPTKlNVDCN0`?jwa;H|KY1KTr*sP6@C6}Rj;2wej8a|0ehOY^Uav!()l2M zX>seeR6GCK=WA*! zGh}|bo^|=<&GJ4J#zk7OH*vc&LEO`t-RDOUDt#%riZilLhW_yTv|^{;>nmhIYLoi< zI+)UDcE!53^|ftlS1Vlr@&Fv_*c;gwk-GsDNjlU4&~yW0w?_cjPEh*xMkf4sxDFu5K;{r72@Pye!`B7@M50&-oBbya22zk3mte>GPeYat z(3T;|x6=1|`A4AaL80ku^Z}-*lG+pu1f-8qmrgR!{)j?QUN{p3?az)_4uMAd8Il(! z!mx`RP&^%h1Q$n|;VUFUSU!O3C7ldFJ5N(?am0|aP@QdsEq|q8W#Ph16gs*5=u8Z@ ze(K=gooR~wdpqp9%rm|p!x{i>#-hUQY8*75&O_@TvINm#Ln3a5~*qhj; z?a~rZPMcOj%Rv7`Y0~JoN|XHqiB#68JYbc|{pnJsKM_yd)}MgPMB0Q@>fq6%2S-!K z4&9$j9UncCOr^jyDy71-k+Ks(p;R1)d?jTXWylxHQx;Upg*<*OtOG_dOa4$COXZ6e zGN>47Gcy4NqloSnWTwm%$;e?l&YyvO2K-mTcRr5m79Jse^C(DXV$!zeK=1-?CFP_+ zL?;9ew#FWj?`TowtLWj_1_?)^t#8=I#LJx`fv+0qe z>cSb$7FSw#ni`H1bJwLb*lHU zEhG*yWrT&)QKnpE!8mJu6O~~W*xWegU0%cy+vsX*U)}`2v?s{D_tQY^BjI#*1&RG?;QU?tdf4X?@(cisr$4xh~eBQJ3Q_tx7c3hOYp#m?=L9TGkkw8c(Ii#!O=x zG}9=gHOn|-ftD#vP8#?S$XTg;C7U0|r-Ng5A}~R!l*?5Nt3oc64~NL-5)1jFL1xen zYc{iM@Uq#gDc&gV__5CW^{OTW}A2QM+51{%~+gpDWF>(?2EQ&Tw z@%ld%0Oz8<;8nzh>~`JBFRxxV=;Qk>#Qge?^Yg3oc +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2024/07/17 15:48:36 by tomoron #+# #+# # -# Updated: 2024/10/29 20:43:12 by tomoron ### ########.fr # +# Updated: 2025/12/02 14:14:04 by tomoron ### ########.fr # # # # **************************************************************************** # @@ -42,16 +42,16 @@ $(LIB): libft make -C libft libft: - cp -r ~/Desktop/aoc/libft . + cp -r ../../libft . main.c: - cp ~/Desktop/aoc/main.c . + cp ../../main.c . part1.c: - cp ~/Desktop/aoc/part1.c . + cp ../../part1.c . part2.c: - cp ~/Desktop/aoc/part2.c . + cp ../../part2.c . a.out: main.c $(OBJS) $(LIB) clang $(FLAGS) $(OBJS) $(LIB) diff --git a/Makefile b/Makefile index 808a501..5fad37f 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: tomoron +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2024/07/17 15:48:36 by tomoron #+# #+# # -# Updated: 2024/10/29 20:43:12 by tomoron ### ########.fr # +# Updated: 2025/12/02 14:14:04 by tomoron ### ########.fr # # # # **************************************************************************** # @@ -42,16 +42,16 @@ $(LIB): libft make -C libft libft: - cp -r ~/Desktop/aoc/libft . + cp -r ../../libft . main.c: - cp ~/Desktop/aoc/main.c . + cp ../../main.c . part1.c: - cp ~/Desktop/aoc/part1.c . + cp ../../part1.c . part2.c: - cp ~/Desktop/aoc/part2.c . + cp ../../part2.c . a.out: main.c $(OBJS) $(LIB) clang $(FLAGS) $(OBJS) $(LIB)