/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/01/24 13:17:32 by ljiriste #+# #+# */
-/* Updated: 2024/02/23 11:58:08 by ljiriste ### ########.fr */
+/* Updated: 2024/02/24 11:15:29 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
i = 0;
while (i < s->stack.size)
{
- if (min > stack_top(s))
+ if (min >= stack_top(s))
{
minind = i;
min = stack_top(s);
return (minind);
}
+int max_or_min(t_stack *stack, int val)
+{
+ int max;
+ int min;
+ size_t i;
+
+ i = 0;
+ max = INT_MIN;
+ min = INT_MAX;
+ while (i < stack->stack.size)
+ {
+ if (stack_top(stack) > max)
+ {
+ max = stack_top(stack);
+ }
+ if (stack_top(stack) < min)
+ {
+ min = stack_top(stack);
+ }
+ stack_rotate(stack, 1);
+ ++i;
+ }
+ return (val < min || val > max);
+}
+
size_t find_target_ind(t_stack *stack, int val)
{
- size_t cur_step;
- const size_t initial_ind = stack->ind;
- size_t res;
-
- stack_rotate(stack, find_minind(stack));
- cur_step = stack->stack.size / 2 + 1;
- stack_rotate(stack, cur_step);
- while (cur_step > 1)
+ size_t i;
+ size_t res;
+ const int minind = find_minind(stack);
+
+ i = 0;
+ if (max_or_min(stack, val))
+ return (minind);
+ while (i < stack->stack.size && val < stack_top(stack))
{
- cur_step /= 2;
- if (stack_top(stack) < val)
- stack_rotate(stack, cur_step);
- else
- stack_rotate(stack, -cur_step);
+ stack_rotate(stack, 1);
+ ++i;
+ }
+ while (i < stack->stack.size && val > stack_top(stack))
+ {
+ stack_rotate(stack, 1);
+ ++i;
+ }
+ res = i;
+ while (i < stack->stack.size)
+ {
+ stack_rotate(stack, 1);
+ ++i;
}
- if (stack->ind > initial_ind)
- res = (stack->ind - initial_ind);
- else
- res = stack->stack.size + stack->ind - initial_ind;
- stack->ind = initial_ind;
return (res);
}
t_action *print_action;
minind = find_minind(&s->a);
- if (minind < s->a.stack.size / 2)
+ if (minind <= s->a.stack.size / 2)
print_action = print_rotate;
else
{