-**.out
-**.o
+.obj
push_swap
checker
SRCS=cheatalloc.c clist.c main_pushswap.c ops.c ops_output.c ops_p.c ops_r.c ops_rr.c ops_s.c output.c psval.c stack.c stacks.c
-OBJS=${SRCS:.c=.o}
+OBJS=${SRCS:%.c=${OBJDIR}/%.o}
-CFLAGS=-Wall -Wextra -Werror
+OBJDIR=.obj
+
+CFLAGS=-Wall -Wextra -Werror -g
CC=cc
all : ${NAME}
-%.o : %.c
+${OBJDIR}/%.o : %.c | ${OBJDIR}
${CC} ${CFLAGS} -c -o $@ $<
+${OBJDIR} :
+ mkdir ${OBJDIR}
+
${NAME} : ${OBJS}
cc -o $@ $^
fclean : clean
rm -f ${NAME}
+ rmdir ${OBJDIR}
re : fclean all
-bonus : ${NAME}
-
remakefile :
sed -i "s/^SRCS=.*/$$(echo -n SRCS=; echo -n *.c)/" Makefile
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/12/02 11:02:13 by agilliar #+# #+# */
-/* Updated: 2025/12/02 23:05:13 by agilliar ### ########.fr */
+/* Updated: 2025/12/03 16:03:51 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
*src = NULL;
return (res);
}
+ *src = res->prev;
res->next->prev = res->prev;
res->prev->next = res->next;
return (res);
// *dst : Nullable
void clist_push_back(t_clist **dst, t_clist *lst)
{
- if (!*dst)
- *dst = lst;
- else
- clist_push(&(*dst)->prev, lst);
+ lst->next = lst;
+ lst->prev = lst;
+ if (*dst)
+ {
+ lst->prev = (*dst)->prev;
+ (*dst)->prev->next = lst;
+ lst->next = *dst;
+ (*dst)->prev = lst;
+ }
+ *dst = lst;
}
/* By: agilliar <agilliar@student.42mulhouse.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/12/02 22:15:12 by agilliar #+# #+# */
-/* Updated: 2025/12/03 12:52:57 by agilliar ### ########.fr */
+/* Updated: 2025/12/03 15:19:10 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
#include "pushswap.h"
+static void algorithm(const t_stacks *stacks, t_closure clos)
+{
+ (void) stacks;
+ for (t_op i = OP_SA; i <= OP_RRR; i++)
+ (clos.func)(clos.data, i);
+}
+
int main(int argc, char **argv)
{
t_stacks stacks;
+ t_ops ops;
stacks = stacks_new();
+ ops = ops_init();
+ ops_add_output(&ops);
for (int i = 1; i < argc; i++)
stack_push_back(&stacks.a, psval_parse(argv[i]));
- for (int i = 1; i < argc; i++)
- psval_output(psval_parse(argv[i]));
+ stacks_apply(&stacks, &ops, &algorithm);
output_flush();
cheatexit(!stacks_is_solved(&stacks));
}
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/12/03 10:57:30 by agilliar #+# #+# */
-/* Updated: 2025/12/03 13:12:42 by agilliar ### ########.fr */
+/* Updated: 2025/12/03 15:07:01 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
closure.data = data;
return (closure);
}
+
+t_ops ops_init(void)
+{
+ const t_ops res = {
+ .ops = {
+ ops_sa(),
+ ops_sb(),
+ ops_ss(),
+ ops_pa(),
+ ops_pb(),
+ ops_ra(),
+ ops_rb(),
+ ops_rr(),
+ ops_rra(),
+ ops_rrb(),
+ ops_rrr(),
+ }
+ };
+
+ return (res);
+}
+
+void ops_add_output(t_ops *ops)
+{
+ t_op op;
+
+ op = OP_SA;
+ while (op <= OP_RRR)
+ {
+ ops->ops[op] = ops_compose(ops->ops[op], ops_output(op));
+ op++;
+ }
+}
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/12/03 12:28:28 by agilliar #+# #+# */
-/* Updated: 2025/12/03 12:34:38 by agilliar ### ########.fr */
+/* Updated: 2025/12/03 15:01:10 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
#include "pushswap.h"
-static void ops_output_inner(void *data, t_op op)
+static void ops_output_inner(const char *data, t_stack stack)
{
- const char *const array[11] = {
+ (void) stack;
+ output_str_ln(data);
+}
+
+t_closure ops_output(t_op op)
+{
+ t_closure res;
+ static char *ops[11] = {
"sa",
"sb",
"ss",
"rrb",
"rrr",
};
- (void) data;
- output_str_ln(array[op]);
-}
-
-t_closure ops_output(void)
-{
- t_closure res;
- res.data = NULL;
+ res.data = ops[op];
res.func = &ops_output_inner;
return (res);
}
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/12/02 11:02:44 by agilliar #+# #+# */
-/* Updated: 2025/12/03 13:25:21 by agilliar ### ########.fr */
+/* Updated: 2025/12/03 15:08:03 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
t_psval psval_parse(const char *s);
void psval_output(t_psval val);
-t_closure ops_compose(t_closure first, t_closure second);
-t_closure ops_output(void);
t_closure ops_pa(void);
t_closure ops_pb(void);
t_closure ops_ra(void);
t_closure ops_sb(void);
t_closure ops_ss(void);
+t_closure ops_output(t_op op);
+
+t_closure ops_compose(t_closure first, t_closure second);
+t_ops ops_init(void);
+void ops_add_output(t_ops *ops);
+
#endif
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/12/03 12:53:25 by agilliar #+# #+# */
-/* Updated: 2025/12/03 13:08:25 by agilliar ### ########.fr */
+/* Updated: 2025/12/03 15:40:28 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */