]> Untitled Git - axy/ft/pushswap.git/commitdiff
Embedded file attrocities
author= <=>
Wed, 10 Dec 2025 16:55:30 +0000 (17:55 +0100)
committer= <=>
Wed, 10 Dec 2025 16:55:30 +0000 (17:55 +0100)
.gitignore
Makefile
_res_leaf_sort_lookup.h [new file with mode: 0644]
main_pushswap.c
pushswap.h
slice.c [new file with mode: 0644]

index 93245e61edefece2f71611811e24fe486c2b2aed..08077beadd67879029505259b3a9a83aa0c6e13c 100644 (file)
@@ -1,3 +1,3 @@
-.obj
+.build
 push_swap
 checker
index 2ba885562932d3b64a6bd0b9e51f3aa645b910d6..538e5a20130baef2e1a4dbd8867fdb5c85234889 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,10 +1,14 @@
 NAME=push_swap
 
-SRCS=algorithm_quicksort.c algorithm_selection_sort.c cheatalloc.c clist.c list.c main_pushswap.c op_output.c op_p.c op_r.c op_rr.c op_s.c ops.c ops_groups.c ops_optimizer.c output.c psval.c stack.c stacks.c
+SRCS=algorithm_quicksort.c algorithm_selection_sort.c cheatalloc.c clist.c list.c main_pushswap.c op_output.c op_p.c op_r.c op_rr.c op_s.c ops.c ops_groups.c ops_optimizer.c output.c psval.c slice.c stack.c stacks.c
 
-OBJS=${SRCS:%.c=${OBJDIR}/%.o}
+RESSRCS=_res_leaf_sort_lookup.h
 
-OBJDIR=.obj
+BUILDDIR=.build
+
+RESDAT=${RESSRCS:_res_%.h=${BUILDDIR}/%.res}
+
+OBJS=${SRCS:%.c=${BUILDDIR}/%.o} ${RESDAT:%.res=%.o}
 
 CFLAGS=-Wall -Wextra -Werror -g
 
@@ -12,25 +16,34 @@ CC=cc
 
 all : ${NAME}
 
-${OBJDIR}/%.o : %.c | ${OBJDIR}
+%.o : %.res
+       ld -r -b binary -o $@ $<
+       
+${BUILDDIR}/%.res: _res_%.h | ${BUILDDIR}
+       sed -n '\?/\*?d; n; n; :x p; n; bx' $^ | head -n-1 > $@
+
+${BUILDDIR}/%.o : %.c | ${BUILDDIR}
        ${CC} ${CFLAGS} -c -o $@ $<
 
-${OBJDIR} :
-       mkdir ${OBJDIR}
+${BUILDDIR} :
+       mkdir ${BUILDDIR}
 
 ${NAME} : ${OBJS}
        cc -o $@ $^
 
 clean : 
-       rm -f ${OBJS}
+       rm -f ${OBJS} ${RESDAT}
 
 fclean : clean
        rm -f ${NAME}
-       rm -fd ${OBJDIR}
+       rm -fd ${BUILDDIR}
 
 re : fclean all
 
-remakefile :
+remakefile : clean
        sed -i "s/^SRCS=.*/$$(echo -n SRCS=; echo -n *.c)/" Makefile
+       sed -i "s/^BINSRCS=.*/$$(echo -n ASSETSRCS=; echo -n _res_*.h)/" Makefile
+
+.PHONY : all clean fclean re bonus remakefile
 
-.PHONY : all clean fclean re bonus
+.SECONDARY : ${RESDAT}
diff --git a/_res_leaf_sort_lookup.h b/_res_leaf_sort_lookup.h
new file mode 100644 (file)
index 0000000..365fde3
--- /dev/null
@@ -0,0 +1,82 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   _res_leaf_sort_lookup.h                            :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2025/12/10 16:53:22 by agilliar          #+#    #+#             */
+/*   Updated: 2025/12/10 17:07:25 by agilliar         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+/*
+
+ra
+ra ra
+sa ra ra
+ra ra ra
+ra sa ra ra
+sa ra ra ra
+pb sa ra pa ra ra
+pb sa ra ra pa ra
+sa ra sa ra ra
+ra ra ra ra
+ra ra sa ra ra
+ra sa ra ra ra
+ra pb sa ra pa ra ra
+ra pb sa ra ra pa ra
+ra sa ra sa ra ra
+sa ra ra ra ra
+sa ra ra sa ra ra
+pb sa ra pa ra ra ra
+pb pb sa ra pa pa ra ra ra
+pb pb ss ra pa ra ra pa ra
+sa pb sa ra ra ra pa ra
+pb sa ra ra pa ra ra
+pb pb sa ra pa ra pa ra ra
+sa ra sa ra ra ra
+pb ra sa ra pa ra ra
+pb sa ra sa ra pa ra ra
+pb pb sa ra ra pa pa ra ra
+pb pb sa ra pa ra ra pa ra
+pb sa ra ra ra pa ra
+pb pb sa ra ra pa ra pa ra
+pb sa ra sa ra ra pa ra
+pb ra sa ra ra pa ra
+pb ra ra ra pa ra
+
+pb
+sa pb pb
+pb pb
+sa pb sa pb sb pb
+sa pb sa pb pb
+pb sa pb sb pb
+sa pb pb pb
+pb pb pb
+pb sa pb pb
+sa pb rr sa pb pb rrr pb
+sa pb rr pb pb rrr pb
+pb pb ss rb pb sb pb rrb
+sa pb sa pb ss pb pb
+pb rb pb pb pb rrb
+pb pb ss pb sb pb sb
+pb rr sa pb pb rrr pb
+pb rr pb pb rrr pb
+sa pb pb rr pb sb rrr pb
+sa pb sa pb sb pb pb
+sa pb sa pb pb pb
+pb pb ss pb sb pb
+pb pb rr pb sb rrr pb
+pb sa pb sb pb pb
+pb sa pb rr pb sb rrr pb
+pb sa pb ss pb pb
+pb pb ss pb pb
+sa pb pb pb pb
+pb sa pb pb pb
+pb pb sa pb sb pb
+pb pb pb pb
+pb pb sa pb pb
+pb sa pb sa pb pb
+pb sa pb sa pb sb pb
+*/
index 8fc7ba6ed871a4b8705c0788a541ab3896a92fb7..224bedd74d446fc0a30dfaad870f5b60d02c05af 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: clefrere <clefrere@student.42.fr>          +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/12/02 22:15:12 by agilliar          #+#    #+#             */
-/*   Updated: 2025/12/09 16:06:44 by clefrere         ###   ########.fr       */
+/*   Updated: 2025/12/10 17:45:36 by agilliar         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -44,6 +44,10 @@ int  main(int argc, char **argv)
        t_ops           ops;
        t_optimizer     opt;
 
+       slice_output(slice_new_range(
+               &_binary__build_leaf_sort_lookup_res_start,
+               &_binary__build_leaf_sort_lookup_res_end
+       ));
        args.state = stacks_new();
        args.bench = false;
        args.algo = NULL;
index c4b98cabb38f9136e16e8ef090b903fe833abc14..41bdfeb28cbb0e58b6c9b945675312d77409be3b 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: clefrere <clefrere@student.42.fr>          +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/12/02 11:02:44 by agilliar          #+#    #+#             */
-/*   Updated: 2025/12/09 15:54:48 by clefrere         ###   ########.fr       */
+/*   Updated: 2025/12/10 17:44:35 by agilliar         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -58,6 +58,7 @@ typedef struct s_args
 
 typedef enum e_op
 {
+       OP_SENTINEL = -1,
        OP_SA = 0,
        OP_SB = 1,
        OP_SS = 2,
@@ -89,6 +90,15 @@ typedef struct s_optimizer
        t_ops   commit;
 }      t_optimizer;
 
+typedef struct s_slice
+{
+       size_t          len;
+       const char      *ptr;
+}      t_slice;
+
+extern void    _binary__build_leaf_sort_lookup_res_start(void);
+extern void    _binary__build_leaf_sort_lookup_res_end(void);
+
 void           cheatexit(int errcode);
 void           *cheatalloc(size_t len);
 
@@ -146,6 +156,12 @@ t_list             list_new(t_stack stack);
 t_list         list_sub(t_list self, size_t start, size_t end);
 void           list_sort(t_list list);
 
+t_slice                slice_new(const char *s);
+t_slice                slice_new_range(void *start, void *end);
+bool           slice_eq(t_slice lhs, t_slice rhs);
+t_slice                slice_split_first(t_slice *rem, char at);
+void           slice_output(t_slice s);
+
 void           algorithm_selection_sort(const t_stacks *stacks, t_closure cb);
 void           algorithm_quicksort(const t_stacks *stacks, t_closure cb);
 
diff --git a/slice.c b/slice.c
new file mode 100644 (file)
index 0000000..1f102a9
--- /dev/null
+++ b/slice.c
@@ -0,0 +1,73 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   slice.c                                            :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2025/12/10 17:08:21 by agilliar          #+#    #+#             */
+/*   Updated: 2025/12/10 17:45:51 by agilliar         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "pushswap.h"
+
+t_slice        slice_new(const char *s)
+{
+       t_slice res;
+
+       res.ptr = s;
+       res.len = 0;
+       while (res.ptr[res.len])
+               res.len++;
+       return (res);
+}
+
+t_slice        slice_new_range(void *start, void *end)
+{
+       t_slice res;
+
+       res.len = (size_t) (end - start);
+       res.ptr = start;
+       return (res);
+}
+
+bool   slice_eq(t_slice lhs, t_slice rhs)
+{
+       size_t  i;
+
+       if (lhs.len != rhs.len)
+               return (false);
+       i = 0;
+       while (i < lhs.len && lhs.ptr[i] == rhs.ptr[i])
+               i++;
+       return (i == lhs.len);
+}
+
+t_slice        slice_split_first(t_slice *rem, char at)
+{
+       t_slice res;
+
+       res.len = 0;
+       res.ptr = rem->ptr;
+       while (rem->len)
+       {
+               if (*rem->ptr == at)
+                       break ;
+               rem->len--;
+               rem->ptr++;
+               res.len++;
+       }
+       if (rem->len)
+       {
+               rem->len--;
+               rem->ptr++;
+       }
+       return (res);
+}
+
+void   slice_output(t_slice s)
+{
+       while (s.len--)
+               output_char(*(s.ptr++));
+}