diff options
| author | Dominik Kaiser | 2024-04-17 11:51:17 +0200 |
|---|---|---|
| committer | Dominik Kaiser | 2024-04-17 11:51:17 +0200 |
| commit | 26e76f9d7ad46948b0548c41375f81cacf20b47c (patch) | |
| tree | df03d1bca11299b81587282f8b474ad4400df29b | |
| parent | 61c619f2d24cadd53defe1cfa74b71f644c49010 (diff) | |
| download | push_swap-26e76f9d7ad46948b0548c41375f81cacf20b47c.tar.gz push_swap-26e76f9d7ad46948b0548c41375f81cacf20b47c.zip | |
Add score calculation
| -rw-r--r-- | sorting.c | 57 |
1 files changed, 56 insertions, 1 deletions
@@ -6,7 +6,7 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/13 15:04:19 by dkaiser #+# #+# */ -/* Updated: 2024/04/17 10:50:01 by dkaiser ### ########.fr */ +/* Updated: 2024/04/17 11:50:56 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -37,7 +37,62 @@ static void presort(t_psdata *data) } } +static int calculate_score(t_psdata *data, int pos) +{ + int moves_to_top; + int moves_to_spot; + int i; + + if (pos < (data->b->size + 1) / 2) + moves_to_top = pos; + else + moves_to_top = data->b->size - pos; + i = 0; + while (i < data->a->size && data->a->stack[i] < data->b->stack[pos]) + i++; + if (i < (data->a->size + 1) / 2) + moves_to_spot = 2 * i + 1; + else + moves_to_spot = 2 * ((data->a->size - i) + 1); + return moves_to_top + moves_to_spot; +} + +static void move_to_right_spot(t_psdata *data, int idx) +{ + +} + +static void scoresort(t_psdata *data) +{ + int *scores; + int i; + int min_score; + + scores = malloc(sizeof(int) * data->b->size); + // Error if allocation fails + i = 0; + while (i < data->b->size) + { + scores[i] = calculate_score(data, i); + i++; + } + i = 0; + min_score = 0; + while (i < data->b->size) + { + if (scores[i] < scores[min_score]) + min_score = i; + i++; + } + move_to_right_spot(data, min_score); + + free(scores); + if (data->b->size > 0) + scoresort(data); +} + void stack_sort(t_psdata *data) { presort(data); + scoresort(data); } |
