This commit is contained in:
Willem Haffmans 2024-11-17 10:44:21 +00:00
parent e160b4ed63
commit 2c3769be68
3 changed files with 79 additions and 32 deletions

View File

@ -21,8 +21,11 @@ typedef struct s_state
t_list *b; t_list *b;
} t_state; } t_state;
void rotate_a_to(int index, t_state *state);
void rotate_b_to(int index, t_state *state);
int index_of(int number, t_list *stack); int index_of(int number, t_list *stack);
int put_at_index(int number, t_list *stack); int put_at_index_asc(int number, t_list *stack);
int put_at_index_desc(int number, t_list *stack);
int rotate_a_to_top(t_state *state); int rotate_a_to_top(t_state *state);
int shortest_rotate(int index, int size); int shortest_rotate(int index, int size);
int new_element(t_list **stack, const char *str); int new_element(t_list **stack, const char *str);

View File

@ -16,33 +16,15 @@
int rotate_a_to_top(t_state *state) int rotate_a_to_top(t_state *state)
{ {
while (*(int *) state->a->content != stack_min(state->a)) rotate_a_to(index_of(stack_min(state->a), state->a), state);
ra(state);
return (1); return (1);
} }
int merge_to_a(t_state *state) int merge_to_a(t_state *state)
{ {
int n; const int b = *(int *) state->b->content;
n = ft_lstsize(state->a); rotate_a_to(put_at_index_asc(b, state->a), state);
if (*(int *) state->b->content < stack_min(state->a))
{
pa(state);
return (0);
}
else if (*(int *) state->b->content > stack_max(state->a))
{
rotate_a_to_top(state);
pa(state);
ra(state);
return (0);
}
while (*((int *) state->b->content) > *((int *) state->a->content) && n > 0)
{
ra(state);
n--;
}
pa(state); pa(state);
return (1); return (1);
} }
@ -51,12 +33,12 @@ int sort5(t_state *state)
{ {
pb(state); pb(state);
pb(state); pb(state);
if (*(int *)state->b->content < *(int *)state->b->next->content) if (*(int *)state->b->content > *(int *)state->b->next->content)
sb(state); sb(state);
sort3(state); sort3(state);
merge_to_a(state); merge_to_a(state);
merge_to_a(state); merge_to_a(state);
while (*(int *) state->a->content > *(int *) ft_lstlast(state->a)->content) rotate_a_to_top(state);
rra(state);
return (1); return (1);
} }

View File

@ -20,11 +20,36 @@ int shortest_rotate(int index, int size)
} }
//TODO //TODO
void rotate_to(int index, t_state state, char c) void rotate_a_to(int index, t_state *state)
{ {
if (c == 'a') int n;
n = shortest_rotate(index, ft_lstsize(state->a));
while (n > 0)
{ {
return ; ra(state);
n--;
}
while (n < 0)
{
rra(state);
n++;
}
}
void rotate_b_to(int index, t_state *state)
{
int n;
n = shortest_rotate(index, ft_lstsize(state->b));
while (n > 0)
{
rb(state);
n--;
}
while (n < 0)
{
rrb(state);
n++;
} }
} }
@ -38,11 +63,45 @@ int index_of(int number, t_list *stack)
if (*(int *) stack->content == number) if (*(int *) stack->content == number)
return (i); return (i);
stack = stack->next; stack = stack->next;
i++;
} }
return (-1); return (-1);
} }
int put_at_index(int number, t_list *stack) int ft_min(int a, int b)
{
if (a < b)
return (a);
return (b);
}
int put_at_index_desc(int number, t_list *stack)
{
int i;
i = 0;
if (number < stack_min(stack) || number > stack_max(stack))
i = ft_min(
index_of(stack_min(stack), stack),
index_of(stack_max(stack), stack));
else
{
while (number < *(int *) ft_lstat(stack, i)->content)
i++;
while (number < *(int *) ft_lstat(stack, i)->content
&& number < *(int *) ft_lstat(stack, i + 1)->content
&& i < ft_lstsize(stack))
{
i++;
}
ft_printf("%d\n", i);
}
if (i == ft_lstsize(stack))
return (0);
return (i);
}
int put_at_index_asc(int number, t_list *stack)
{ {
int i; int i;
@ -51,12 +110,15 @@ int put_at_index(int number, t_list *stack)
i = index_of(stack_min(stack), stack); i = index_of(stack_min(stack), stack);
else else
{ {
while (number > *(int *) ft_lstat(stack, i)->content while (number < *(int *) ft_lstat(stack, i)->content)
i++;
while (i + 1 < ft_lstsize(stack)
&&number > *(int *) ft_lstat(stack, i)->content &&number > *(int *) ft_lstat(stack, i)->content
&& i < ft_lstsize(stack)) && number > *(int *) ft_lstat(stack, i + 1)->content)
{ {
i++; i++;
} }
i++;
} }
if (i == ft_lstsize(stack)) if (i == ft_lstsize(stack))
return (0); return (0);