Push_swap/srcs/calc_cheap_utils.c

104 lines
2.3 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* calc_cheap_utils.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/11/02 01:37:25 by lfirmin #+# #+# */
/* Updated: 2024/11/03 18:07:37 by lfirmin ### ########.fr */
/* */
/* ************************************************************************** */
#include "../include/pushswap.h"
int calc_index_min(t_stack *stack_a)
{
t_node *curr;
int min;
curr = stack_a->top;
min = curr->value;
curr = curr->next;
while (curr)
{
if (curr->value < min)
min = curr->value;
curr = curr->next;
}
return (min);
}
int calc_index_max(t_stack *stack_a)
{
t_node *curr;
int max;
curr = stack_a->top;
max = curr->value;
curr = curr->next;
while (curr)
{
if (curr->value > max)
max = curr->value;
curr = curr->next;
}
return (max);
}
int return_index(t_stack *stack, int value)
{
t_node *curr;
int i;
i = 1;
curr = stack->top;
while (curr)
{
if (curr->value == value)
return (i);
i++;
curr = curr->next;
}
return (0);
}
int calc_index_a(t_stack *stack_a, int value)
{
t_node *curr;
int i;
i = 2;
curr = stack_a->top;
if (value > calc_index_max(stack_a) || value < calc_index_min(stack_a))
return (return_index(stack_a, calc_index_min(stack_a)));
while (curr && curr->next)
{
if (curr->value < value && curr->next->value > value)
return (i);
i++;
curr = curr->next;
}
if (curr->value < value && stack_a->top->value > value)
return (1);
return (0);
}
int return_value(t_stack *stack, int index)
{
t_node *curr;
if (!stack || !stack->top || index <= 0)
return (0);
if (index > stack->size)
return (0);
curr = stack->top;
while (index > 1 && curr)
{
if (!curr->next)
return (0);
curr = curr->next;
index--;
}
return (curr->value);
}