From 93f14b82613aef92f9a264f9207c3f3b2a4eee33 Mon Sep 17 00:00:00 2001 From: Geraud Chavialle Date: Mon, 8 Sep 2025 22:39:24 +0200 Subject: [PATCH] tu connqis --- Makefile | 31 ++++++++++++ checker_linux | Bin 0 -> 38192 bytes include/push_swap.h | 41 ++++++++++++++++ push_swap | Bin 0 -> 21336 bytes src/normalize.c | 81 +++++++++++++++++++++++++++++++ src/normalize.o | Bin 0 -> 2024 bytes src/ops.c | 91 +++++++++++++++++++++++++++++++++++ src/ops.o | Bin 0 -> 2096 bytes src/parse.c | 115 ++++++++++++++++++++++++++++++++++++++++++++ src/parse.o | Bin 0 -> 2840 bytes src/push_swap.c | 49 +++++++++++++++++++ src/push_swap.o | Bin 0 -> 2168 bytes src/radix.c | 90 ++++++++++++++++++++++++++++++++++ src/radix.o | Bin 0 -> 2448 bytes src/sort_small.c | 105 ++++++++++++++++++++++++++++++++++++++++ src/sort_small.o | Bin 0 -> 3352 bytes src/utils.c | 41 ++++++++++++++++ src/utils.o | Bin 0 -> 1440 bytes 18 files changed, 644 insertions(+) create mode 100644 Makefile create mode 100755 checker_linux create mode 100644 include/push_swap.h create mode 100755 push_swap create mode 100644 src/normalize.c create mode 100644 src/normalize.o create mode 100644 src/ops.c create mode 100644 src/ops.o create mode 100644 src/parse.c create mode 100644 src/parse.o create mode 100644 src/push_swap.c create mode 100644 src/push_swap.o create mode 100644 src/radix.c create mode 100644 src/radix.o create mode 100644 src/sort_small.c create mode 100644 src/sort_small.o create mode 100644 src/utils.c create mode 100644 src/utils.o diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..55b1873 --- /dev/null +++ b/Makefile @@ -0,0 +1,31 @@ +NAME = push_swap +CC = cc +CFLAGS = -Wall -Wextra -Werror +INCLUDES = -I include +SRC_DIR = src +SRCS = $(SRC_DIR)/push_swap.c \ + $(SRC_DIR)/parse.c \ + $(SRC_DIR)/utils.c \ + $(SRC_DIR)/normalize.c \ + $(SRC_DIR)/ops.c \ + $(SRC_DIR)/sort_small.c \ + $(SRC_DIR)/radix.c +OBJS = $(SRCS:.c=.o) + +all: $(NAME) + +$(NAME): $(OBJS) + $(CC) $(CFLAGS) $(OBJS) -o $(NAME) + +%.o: %.c + $(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ + +clean: + rm -f $(OBJS) + +fclean: clean + rm -f $(NAME) + +re: fclean all + +.PHONY: all clean fclean re diff --git a/checker_linux b/checker_linux new file mode 100755 index 0000000000000000000000000000000000000000..002d5930236c65f1a695bf2fe08489bec0c49745 GIT binary patch literal 38192 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 Z+eg>0QN!_&s{El1isOi86qsE8{{pOBm#zQ+ literal 0 HcmV?d00001 diff --git a/include/push_swap.h b/include/push_swap.h new file mode 100644 index 0000000..4b0a6b9 --- /dev/null +++ b/include/push_swap.h @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* push_swap.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gechavia +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/09/04 17:36:00 by gechavia #+# #+# */ +/* Updated: 2025/09/04 17:36:26 by gechavia ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef PUSH_SWAP_H +# define PUSH_SWAP_H +# include +# include +# include + +typedef struct s_stack +{ + int *array; + int size; + int capacity; +} t_stack; + +void init_stacks(t_stack *a, t_stack *b); +void error_exit(t_stack *a, t_stack *b); +int parse_and_validate(char **argv, t_stack *a, t_stack *b); +void free_stacks(t_stack *a, t_stack *b); +int has_duplicates(t_stack *a); +void write_op(const char *s); +void normalize_stack(t_stack *a); +void swap(t_stack *s); +void push(t_stack *from, t_stack *to); +void rotate(t_stack *s); +void rrotate(t_stack *s); +void sort_three(t_stack *a); +void sort_five(t_stack *a, t_stack *b); +void sort_stack(t_stack *a, t_stack *b); + +#endif diff --git a/push_swap b/push_swap new file mode 100755 index 0000000000000000000000000000000000000000..93610ecb58e28b893631104f39aee731d6f6be46 GIT binary patch literal 21336 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 literal 0 HcmV?d00001 diff --git a/src/normalize.c b/src/normalize.c new file mode 100644 index 0000000..f6dd36f --- /dev/null +++ b/src/normalize.c @@ -0,0 +1,81 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* normalize.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gechavia +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/09/04 17:32:38 by gechavia #+# #+# */ +/* Updated: 2025/09/04 17:32:39 by gechavia ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "push_swap.h" + +static void swap_vals(int *a, int *b) +{ + int tmp; + + tmp = *a; + *a = *b; + *b = tmp; +} + +static void sort_int_array(int *arr, int n) +{ + int i; + int j; + + i = 0; + while (i < n) + { + j = i + 1; + while (j < n) + { + if (arr[j] < arr[i]) + swap_vals(&arr[i], &arr[j]); + j = j + 1; + } + i = i + 1; + } +} + +static int index_in_array(int *arr, int n, int v) +{ + int i; + + i = 0; + while (i < n) + { + if (arr[i] == v) + return (i); + i = i + 1; + } + return (-1); +} + +void normalize_stack(t_stack *a) +{ + int *tmp; + int j; + int idx; + + tmp = (int *)malloc(sizeof(int) * a->size); + if (!tmp) + exit(1); + j = 0; + while (j < a->size) + { + tmp[j] = a->array[j]; + j = j + 1; + } + sort_int_array(tmp, a->size); + j = 0; + while (j < a->size) + { + idx = index_in_array(tmp, a->size, a->array[j]); + a->array[j] = idx; + j = j + 1; + } + free(tmp); +} diff --git a/src/normalize.o b/src/normalize.o new file mode 100644 index 0000000000000000000000000000000000000000..9a30202cb85c5518b015a82682581ff505da545f GIT binary patch literal 2024 zcmb_c&1(}u6rZHAjh`t}K~ZQxK@hvxdQl=0KUVk9cqjx!TGDO0t-*Y;+0?XHDnzC0 z5>Pzo&10_~J*lN)@GtP%LyD>7utE<#6yopA&ZOy*qrbBA=KbEA_cfEQsN?s7fdG>T zu$ydOlPqJ85AE;cd>dy+;F;9yEv?#$YWDK3=BT?`x)Rpbe+Qf7quHvfRhL~Bd3glt zR|?Dxb+tuyM{Q|NVmEdx9I0J|&I341OD9^+&?+>Sw)W5}9IM{~w%XeM*>1NrXW1oJ zrx~02;Xs;CB8}HZ^?P(`V=gj$mmTQWF7MP;7qQTY z8&h{8wW7E8YDLkUOn~HhsI3s%N?=M!Hx_yush#IGj4q8{*EfS&psqP(Qd^$-qxqW0 zl>M)vFl6Hy-0c@sCa*3s`~rTWK6}}<%Pl+Etg8(o9kmftTanrb_NauW+CU{SwHbMN z)U(^_-u5YP%VRgT>xf-f_pl=2-huw6D&{}44geS5PpOAat=Iwgg><0 zIx+Yvc;|S3a0?!u?FR9{2U3OHV&xO1@wj%KZn)5usJ<9X4eyJC+>DB*3K~4)t>YrvT&&&R2!1ax{3lPuob?{l7m-j;F3I6&& Tg7eo-eo^r# +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/09/04 17:32:45 by gechavia #+# #+# */ +/* Updated: 2025/09/04 17:32:46 by gechavia ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "push_swap.h" + +void write_op(const char *s) +{ + int len; + + len = 0; + while (s[len]) + len = len + 1; + write(1, s, len); +} + +void swap(t_stack *s) +{ + int t; + + if (s->size < 2) + return ; + t = s->array[0]; + s->array[0] = s->array[1]; + s->array[1] = t; +} + +void push(t_stack *from, t_stack *to) +{ + int i; + + if (from->size == 0) + return ; + i = to->size; + while (i > 0) + { + to->array[i] = to->array[i - 1]; + i = i - 1; + } + to->array[0] = from->array[0]; + to->size = to->size + 1; + i = 0; + while (i + 1 < from->size) + { + from->array[i] = from->array[i + 1]; + i = i + 1; + } + from->size = from->size - 1; +} + +void rotate(t_stack *s) +{ + int t; + int i; + + if (s->size < 2) + return ; + t = s->array[0]; + i = 0; + while (i + 1 < s->size) + { + s->array[i] = s->array[i + 1]; + i = i + 1; + } + s->array[s->size - 1] = t; +} + +void rrotate(t_stack *s) +{ + int t; + int i; + + if (s->size < 2) + return ; + t = s->array[s->size - 1]; + i = s->size - 1; + while (i > 0) + { + s->array[i] = s->array[i - 1]; + i = i - 1; + } + s->array[0] = t; +} diff --git a/src/ops.o b/src/ops.o new file mode 100644 index 0000000000000000000000000000000000000000..c1b54cf51a21b648a15b6c934d341cfaf4e12ca8 GIT binary patch literal 2096 zcmb_cOKTHR6h4ziJBpeh6$C{CF5KwY+Kr+}icTG|5fQTxl$yq|E#_r1v8`Avq-uvz z@dvo*)}2dNK2WIs0~aoIAsCp&2w8L?#P8hPJ4wgr$^-Y_bH8)Wch6&z`{u-WOw&k- zMyIHIQz+5POY6c&oW) ztNFFvZd+a*_H647zw<*xG(IG+y-(~vLmfVFF-c=yk0qY)!_7n31g}RPfk^3ATxzcF zWfbaKab{a$YLOrFx%EJDQsRN&dsvM;k0JvwmVsPdt%tiD0}1 zZ}k>KJ#TUA{N`)<7BeF+^asq>-rqD5`>R?0a{t!MfJ2bpUo#5&WE6<% zImR^uk&%~GUFW*Ib0W9=C;0IQ(%t@VoM)k%&xSZJz9OfKsfZ>Ajm4llm`<~T-oeOb zsnmEdff!8B2Z26OcB)=->ZyDoSDH@Uv8%P&aw#=()EG8K4v!qK3+pHiaa$nT-Akm+ zC$&A>2K8t7Q1=4k#d4mvu^q{WvD4c($Hw8&v7KZba*nsqekQbEWgPO2x6uA2wBKVK z@|d^K{wTCRXB^`47TTAEouPh`2NKi1ZY8P^bW6wKe!Xa@RFjmZD^g@{d#J481_V~o#UNz2QN-eCZX&YEL+mQh)i;BINyf|IH6(-NZa zZMZSVa0d?erhNBch;$T{zd8>9R(h{%vR_mB_+IH?l}MSS;$QWWLRa}K_%f7!^}mwf zymaLHxyLGA)qf1wz(kw>&zG=58J6=?wQ)R)x_53wx1mIHXWK_v|7YpQaSTP@{|& +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/09/04 17:32:51 by gechavia #+# #+# */ +/* Updated: 2025/09/04 17:34:24 by gechavia ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "push_swap.h" + +static int is_space(char c) +{ + if (c == ' ') + return (1); + if (c == '\t') + return (1); + if (c == '\n') + return (1); + if (c == '\r') + return (1); + if (c == '\v') + return (1); + if (c == '\f') + return (1); + return (0); +} + +static int is_digit(char c) +{ + if (c >= '0' && c <= '9') + return (1); + return (0); +} + +static long read_num(const char *s, int *i, int *ok) +{ + long sign; + long res; + + sign = 1; + res = 0; + *ok = 1; + if (s[*i] == '+' || s[*i] == '-') + { + if (s[*i] == '-') + sign = -1; + *i = *i + 1; + } + if (!is_digit(s[*i])) + *ok = 0; + while (is_digit(s[*i])) + { + res = res * 10 + (s[*i] - '0'); + if ((sign == 1 && res > INT_MAX) || (sign == -1 && (-res) < INT_MIN)) + *ok = 0; + *i = *i + 1; + } + return (res * sign); +} + +static int push_val(t_stack *a, int v) +{ + int *new_arr; + int i; + + if (a->size >= a->capacity) + { + a->capacity = a->capacity * 2 + 8; + new_arr = (int *)malloc(sizeof(int) * a->capacity); + if (!new_arr) + return (0); + i = 0; + while (i < a->size) + { + new_arr[i] = a->array[i]; + i = i + 1; + } + free(a->array); + a->array = new_arr; + } + a->array[a->size] = v; + a->size = a->size + 1; + return (1); +} + +int parse_and_validate(char **argv, t_stack *a, t_stack *b) +{ + int i; + int ok; + long v; + + i = 0; + while (argv[1][i]) + { + while (argv[1][i] && is_space(argv[1][i])) + i = i + 1; + if (!argv[1][i]) + break ; + v = read_num(argv[1], &i, &ok); + if (!ok || v < INT_MIN || v > INT_MAX || !push_val(a, (int)v)) + return (0); + } + if (a->size == 0 || has_duplicates(a)) + return (0); + b->capacity = a->size; + b->array = (int *)malloc(sizeof(int) * b->capacity); + if (!b->array) + return (0); + b->size = 0; + return (1); +} diff --git a/src/parse.o b/src/parse.o new file mode 100644 index 0000000000000000000000000000000000000000..99d2a90e39e73858e8ef11061b24cd7af3b996b8 GIT binary patch literal 2840 zcmb_ePi)&%7=KQ?)h*dxsfq+*u$;ET)Q|##RTRiH3=e4qG${uVRpvQv8#PIz{3!tu zwcvEBajWgXq#Z!o0Rac3af4IUY7=Fr^_W8r0SV2KCKMzNL8}zL@A=ua-Erfq;_vhC z`}4l%@AvGkC>P$0ND^^HBCnByI~OJ7hJ0WrxtSy*5Se1;AIx}=WM;j~%&N`IRC`xx zVFa_3F0+y{(`H($(=wrr-vRA}U34odPi`CkkaguAZ9E%Fq+8Rn{W5f9^a#Da4KZIR z_r90t+7YaE94?m9GPWgCX?4Es_xpzybpjW>vNf4)R$FW{)wHicS!ODGM!gBmy@(;7 z)%QTH(v4H%4oa@jt55Rux((I$%wO!EB2GVRQNVYVeYld&6}-q!3${_i{f+^|th#Mu z0B)e+Pe^gEVp~jxx^0t1Q8BF+WjpsHJcpS(95Z1n{W`d;(6TY__Ykv0KnhP)IC$m$MYC9(LmSSl zLihw-d(O!W#siK|4p)H5arRiUu_Hm@E`R6;;lRUN&;^chZN%#W43E-*SVP1%su;Vd zG)JIOh)6-RW5D^xjZT7TcbW7nP_W62dK*ZMdo61g4lonz*4rUMeh&HK_`|t$%F1-}v?$9gf^P$Bd>!fn)n{7f`1-*CzAHw+ ztg{aNt(i79z)aan@m{e2pZD7`WTFpFk2^0W2Mz%4`5L~T{QOVQji;a)hx1ePsyLAR zFogL?QkScRN;RhC)WUphSud5dONH3v^YKJ{a$<6-%Dpc@HIQ*f5$ThQM5>KSPe+Gj ze81q}@Q3m>u5#}9=#|L%V@C&WND#t()7(qQ52#&#;D%AND)}Km`774muuQ6HI)Oa2$IC;d=r768sSVaR5<5 zc#ohb;D`8o@G3>&dvi=O0C-qd02mE}aF5@MN8y|QfzJXy=Bv+V0@x|hH*O2x2>U=q z6t^$Lhkf|pVn1R0eFQ*IA)nkjF|bi^XGgi^T#~|e@tdNLOCj8SPOBl@eXch{xI3SL zBZKmAWQfE|dQOd3^jd|)wWWMsFH}gjoX%wDvlX(Sf>kZ%vYJ}a%cP{MnRKC=C&g-c zA-$~TNW8FA(c^EulbR@3RBe&ObGhYwTFqqONX(O>S}N;lwUEKsYzAtG<@AO0TuIIA zWUi#^xLmoYYC6fQx!jWGq{TH7FIP$x^)l#>^Qiw9LC%X21?t_$p@6vjbnXcMnz%M< zoDq(~KP$wOcmZjNIXicUIf%KT5FRRv^)HD;xIfsH@FBE()VT}ad_~Zos-ve^m zQQlS1#@om1;Bhf82#oV0-;bdkj>WGQU`6cBFHGeB><7Vi`*-0Y7?0Zjg4lme1mgbj u8N2!J{@(>`;6i^1)GGWuX^VWJ_?bj!xc_ee3-`{8h=Ix?0TtE?um3NP$Y1OL literal 0 HcmV?d00001 diff --git a/src/push_swap.c b/src/push_swap.c new file mode 100644 index 0000000..1dc94bc --- /dev/null +++ b/src/push_swap.c @@ -0,0 +1,49 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* push_swap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gechavia +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/09/04 17:32:54 by gechavia #+# #+# */ +/* Updated: 2025/09/08 16:42:06 by gechavia ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "push_swap.h" + +void init_stacks(t_stack *a, t_stack *b) +{ + a->array = NULL; + a->size = 0; + a->capacity = 0; + b->array = NULL; + b->size = 0; + b->capacity = 0; +} + +void error_exit(t_stack *a, t_stack *b) +{ + write(2, "Error\n", 6); + free_stacks(a, b); + exit(1); +} + +int main(int argc, char **argv) +{ + t_stack a; + t_stack b; + + if (argc != 2) + { + write(2, "Usage: ./push_swap \"numbers\"\n", 29); + return (1); + } + init_stacks(&a, &b); + if (!parse_and_validate(argv, &a, &b)) + error_exit(&a, &b); + normalize_stack(&a); + sort_stack(&a, &b); + free_stacks(&a, &b); + return (0); +} diff --git a/src/push_swap.o b/src/push_swap.o new file mode 100644 index 0000000000000000000000000000000000000000..a7c86542a3f4c3d1d430abd19d1b2df54bd6b6d8 GIT binary patch literal 2168 zcmbu9&1(}u7{(__zdwU02vt}Lq6fPs^-`ruM4}585h38g8n)>+4Q6-4ex$LqC`N@6 zi#>SoBzO|UlNY52d#F;q`4>npLIuHi%b`%;XEW1`X>#&`*?H$T&-?D|&d%OXPF)Fy zLQE*cF0#f*P{uxVHsVAOCRjf?Q`*W8ZDqNpt@u@~lB{W4!6d@1L=WP6IKabd!%%G) zC=3kKn?b$uuc)ZG5k`rR$cEOt=(2-ItI$m=el-|uV97zm^J81dUAXwl%FDIz@S_t1 zn(G}GiIjjMKkv{*TV3APR{d|{MpYURNYz2P#)cmc9wBPrD0xK^e7tbH;Go(LTmfGrr~dN+z#cS*1uYXIn~qT#c#m zvG_SZm_5r5(|VxL;!PGRMMEP4-92mcK*xxoK{s%@G!%UjzC73!zD5qljuM&#CnazZ z^Asx7Zc&5Y;v(k4uY+8mc6vz@9qi9utN94SrXEy;GMaUSz#;MnYo|ED4I|V?c`SFQ z+i-IjK?6P&N{iQqXY)~L0rzto0bXv2$bc$PSXZ!Qu<^^4DAya^nM-MzXVN*rfE z@TU^T5f%JB=c0Z$AAgqoa{ccThga13Ephr7_jxA@ldw)S;UAKCuf#_r-Y@Y}5|^J# zArFKdYwTKM{{KJ)l^^B6o)QoMKhUGB>2QY1vavsZB zIWO&cdgiXn<{ZNiv8m@Q=GqRQWR~ridOo+v4NSFc&rq*kPmKl1OwH$uW?G+}rE{8P z3r@~6SV4DOBduGr=^~}h>V)d6G3L{Aj&71eoP0IIRM&GneTMpbX3#q}rRczMHO?RN zzq>b7LH_PU!5w}CzY4&6zD@fSdj*DGR)P;En-ZGO5~lgB +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/09/04 17:32:56 by gechavia #+# #+# */ +/* Updated: 2025/09/08 17:26:26 by gechavia ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "push_swap.h" + +static int get_max_bits(t_stack *a) +{ + int max; + int i; + int bits; + + i = 0; + max = 0; + bits = 0; + while (i < a->size) + { + if (a->array[i] > max) + max = a->array[i]; + i++; + } + while ((max >> bits) != 0) + bits++; + return (bits); +} + +static void push_radix(t_stack *a, t_stack *b) +{ + while (b->size) + { + push(b, a); + write_op("pa\n"); + } +} + +static void radix_sort_2(t_stack *a, t_stack *b, int bit) +{ + int size; + int j; + + size = a->size; + j = 0; + while (j < size) + { + if (((a->array[0] >> bit) & 1) == 1) + { + rotate(a); + write_op("ra\n"); + } + else + { + push(a, b); + write_op("pb\n"); + } + j++; + } +} + +static void radix_sort(t_stack *a, t_stack *b) +{ + int bits; + int i; + + i = 0; + bits = get_max_bits(a); + while (i < bits) + { + radix_sort_2(a, b, i); + push_radix(a, b); + i++; + } +} + +void sort_stack(t_stack *a, t_stack *b) +{ + if (a->size <= 1) + return ; + if (a->size <= 5) + sort_five(a, b); + else + radix_sort(a, b); +} diff --git a/src/radix.o b/src/radix.o new file mode 100644 index 0000000000000000000000000000000000000000..4b571947ef92ec98f9df8f328cc83cc79a727c42 GIT binary patch literal 2448 zcmbtW!D}N`7=M$ryV>w zGtAv-Vhv_#kkGWbdrqu~7`BIfI2oMLkvtaN+xg}FHOsts9R%gSp!^?jvC$5%jrt|B z_jnZY{ydM&oyTYi9NxonzyF=K?mth5B4T&X=<)vGm+^Q^kqXQEB7e&LfDehz4){^5 zBB+qld6q`=3psP=Nm}D1cF64N(lDI5InR&GkM6w#?(rkqCjt!zKT@DU?CL07ivAdN zN6fr_R``wtCmQ@koRCM$`{u>c9p~+pBSZ~LIm-KhAI828=Xu}UagSq%EcX7V(H$A) zjSIp;B?8_42_qz~`GYi5b(%y7`Ju?{aPVnTrnOW*^nMSi-*l*lVz*SW_T;#~$KI&D zzI&Q&uFyl8l~>x0pk1hLxQ+F~mgl!>%|@X(XI-+2v&E;{!umM75BZZAZ@M0I`2l5(*g|qqhGtZqlk$Hs}vF#b)Boz#a{q@BD25^!OF(md668k&ANj}4n z*gr|^UjQfJ7!rF)*a1zFT>_`rKjX9wmpDV8J!ud*(VUJd@F6B7A{OcM^nhO>4XKEc zv9C!3e_8TH?$VYee3E1-qqLwlcrVj(m4Hcj^Dg)T;peotqF01nz6<|p!Xe0rE(!aW zE)V3EJP+_w8vd2Up-$4H68z_sA61cGHNNiWyeuVnx}OUY$2Q~x z8{`poCjrHe4(4Isp@a(`xzwv#QN{-D?DF-3y$$+i_NEL5scR*8augC1Q+Lp)sX5a>%jOkr*)_k{4C=#)%%xVRG;I5Fq zT8BQ)$C;x&%~dyW!6{lrdBFdv@SbER_{hno?5Aw8=w zeM&EqUCnjsH*&v@VV>sRh_THyUG4uN+ l@in$Bsj-p`Rq;@NNIL&pgr#!_uOctiWw`+gzLY-||34;yqILiP literal 0 HcmV?d00001 diff --git a/src/sort_small.c b/src/sort_small.c new file mode 100644 index 0000000..7538999 --- /dev/null +++ b/src/sort_small.c @@ -0,0 +1,105 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* sort_small.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gechavia +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/09/04 17:33:02 by gechavia #+# #+# */ +/* Updated: 2025/09/04 17:33:03 by gechavia ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "push_swap.h" + +static int min_index(t_stack *a) +{ + int i; + int m; + int idx; + + i = 0; + m = a->array[0]; + idx = 0; + while (i < a->size) + { + if (a->array[i] < m) + { + m = a->array[i]; + idx = i; + } + i++; + } + return (idx); +} + +static void op1(t_stack *s, void (*f)(t_stack *), const char *name) +{ + f(s); + write_op(name); +} + +void sort_three(t_stack *a) +{ + int x; + int y; + int z; + + x = a->array[0]; + y = a->array[1]; + z = a->array[2]; + if (x > y && y > z) + { + op1(a, swap, "sa\n"); + op1(a, rrotate, "rra\n"); + } + else if (x > y && x < z) + op1(a, swap, "sa\n"); + else if (x > z && y < z) + op1(a, rotate, "ra\n"); + else if (x < y && x > z) + op1(a, rrotate, "rra\n"); + else + { + op1(a, swap, "sa\n"); + op1(a, rotate, "ra\n"); + } +} + +static void push_min_to_b(t_stack *a, t_stack *b) +{ + int idx; + int steps; + + idx = min_index(a); + if (idx <= a->size / 2) + steps = idx; + else + steps = a->size - idx; + while (steps-- > 0) + { + if (idx <= a->size / 2) + op1(a, rotate, "ra\n"); + else + op1(a, rrotate, "rra\n"); + } + push(a, b); + write_op("pb\n"); +} + +void sort_five(t_stack *a, t_stack *b) +{ + if (a->size == 2 && a->array[0] > a->array[1]) + { + op1(a, swap, "sa\n"); + return ; + } + while (a->size > 3) + push_min_to_b(a, b); + sort_three(a); + while (b->size) + { + push(b, a); + write_op("pa\n"); + } +} diff --git a/src/sort_small.o b/src/sort_small.o new file mode 100644 index 0000000000000000000000000000000000000000..e111e9da3c9ebc3187551441086a15b5ed700436 GIT binary patch literal 3352 zcmbtX-)mb{96w3wny#(44t0Ym%>;2Gy)4^Pt<%(UZNOEAP>^XGZ<^a5nB>Ofrp;u- zN@npA8t0n@ANJ;hPom%thPHIDJx>3E3KJ8|L)5}5sPX$b_nh?fn)JnQx#xV(=ll8o zI6q0>H7>jq37*}JgpP18e_vd)I5sAB3_u>_UK2~9_u`Bgh zk83pBgRpBfD#q@Z(bTFhQj53kgF@V2@<$*|4(9ErwZ$vytdo{fr(RiH;Vz^&Ddlqa>2RJFl`pX((`Vpf`M-?(k!T;e)Kvn2kR;v=*Eg zJQ8{@Koo96^^g%X(!L0*=lce5lACCxJ@^$TAodmDBzP|N?Z3C}p8zK*plSPOy#&BI z2x9iI-&%eXrVymR)sSc5F-iSY;FvRn&xQI8`ZyoQl!VvlsVqd6P7s|0mUGR&9AEUgRqRyK%hP+K5a4CGRXmFaoPI>WUb;1!Jg75=e^BU9x0e*yQUXu|z z@ID1!QE>3(ieQ}~{`jAJ@PFd}q~JJDQhpVRtViZP34jEh#4vtR!PR=sE4Vt}Nd;Hu zdr867dQu7wzRdlFz%hS3XMfRch5W7X)x5o83t?9CP6!-v@IuNsvkKm;;3;1mVZY|1JzJ#VE=-LXmz)936= z#>zTuCBNiY2|LFMD`t-AS=+Jn$ycUF3XVDV7Rwb2i%d_amoo`7m7=$Jffek$lbByx zw&?A)9n-NySZgscpEom>M{pMNmQV{BGo9Awm|k%5j+vzXat1wOCs3SYCz8z0MJbS- zG944ds2&v)`=6al{$fcEMA{ICp#AeuSjBR;xp;H@XB);C8j?SJ!ToO(&b~ZT+(9%Y zaanGNeZQHbV_wX>|aR`v3|Ix(qFFMi-d(Pv~22D>1)e% e;V(KS|1FX8mc)-p@z)O9X>pk^3I}wZ^8X7ani%~6 literal 0 HcmV?d00001 diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 0000000..2f3ce39 --- /dev/null +++ b/src/utils.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* utils.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gechavia +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/09/04 17:33:05 by gechavia #+# #+# */ +/* Updated: 2025/09/04 17:35:51 by gechavia ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "push_swap.h" + +void free_stacks(t_stack *a, t_stack *b) +{ + if (a && a->array) + free(a->array); + if (b && b->array) + free(b->array); +} + +int has_duplicates(t_stack *a) +{ + int i; + int j; + + i = 0; + while (i < a->size) + { + j = i + 1; + while (j < a->size) + { + if (a->array[i] == a->array[j]) + return (1); + j++; + } + i++; + } + return (0); +} diff --git a/src/utils.o b/src/utils.o new file mode 100644 index 0000000000000000000000000000000000000000..e8d5478b6142506cbc699f77c7d8a0848dab66f5 GIT binary patch literal 1440 zcmb_bPiqrV5T8v#ZKawZ3Zfn&9z1nv?4?qXEwcI!Z4XMMAR*aowrzBil>Jj`At*$} zWvSF}px?lQA3&(kPa-4`B;Ile#F@A6ZNfI*9N0H+e!t($n|ZtYM&EdxQWTJ;z(bfs z5(UVoCwq-=HMoe%A`5=8PCv(j_K*esfOXnK$iBOQ5*F%1)>*}9QAXivmvT`wn20cE zN;F`x=x45U%IgR1!I|Et%uw&MaC5M>KA$}{qqy@!3G{BLcVprK9TDnS37EOr4>KQ$ zV&MWai`})%=j?lG=u98cpuIc1OgAdi`#v6z@em&Md&d}|4i$LvsB{X&s^9edylETF z-TZ;&xb;>uU%00(tA(Y)eV?-{B)>`vnsW3Ml*62IbMeCb37&TgF?z@RE>#sAj9tu$mt1IF?m*J;QwE!k*!l zYyQ4nHx18nL2b4?OMS9cT;e>awtdhj8?_p~t6fpd+AHrkM#JKD!1wC5tD2y?p5qx+ z^sgJ_|BJoEDs(SN`znS%N)X9^Zw`6F$WNOlg5T31?vwA7a_QY9O%vxY3t|C1LHG%B zyDmKaDO5x11PrQZ^sWSi7ckEui1H*RB-|BefitwvB5Yr@8<*G?`P(rPZDjuv-onkS z`DH;l7tK$1Ec5038e-{