104 lines
2.3 KiB
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);
|
|
}
|