Skip to content

Commit

Permalink
fixed backtracking and centered values
Browse files Browse the repository at this point in the history
  • Loading branch information
TheGAzed committed Jul 17, 2024
1 parent 8dff3cf commit 46dd422
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 15 deletions.
18 changes: 8 additions & 10 deletions program/source/algorithms/backtrack.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ bool backtrack(board_s board, state_array_s current_state) {

free(checks);

return invalid_state_backtrack_stat(is_backtrack);
return (is_backtrack);
}

bool _backtrack_row_sum(board_s board, state_array_s current_state, size_t index) {
Expand All @@ -52,11 +52,10 @@ bool _backtrack_row_sum(board_s board, state_array_s current_state, size_t index
}

return
(filled_blocks == blocks) ? filled_sums != sums : false ||
((filled_blocks == blocks) ? filled_sums != sums : false) ||
(filled_sums > sums) ||
(blocks - filled_blocks) ? get_sums(blocks - filled_blocks, UPPER_EDGE_E) < (sums - filled_sums) : false ||
(blocks - filled_blocks) ? get_sums(blocks - filled_blocks, LOWER_EDGE_E) > (sums - filled_sums) : false ||
_backtrack_row_repeat(board, current_state, index);
((blocks - filled_blocks) ? get_sums(blocks - filled_blocks, UPPER_EDGE_E) < (sums - filled_sums) : false) ||
((blocks - filled_blocks) ? get_sums(blocks - filled_blocks, LOWER_EDGE_E) > (sums - filled_sums) : false);
}

bool _backtrack_col_sum(board_s board, state_array_s current_state, size_t index) {
Expand All @@ -70,11 +69,10 @@ bool _backtrack_col_sum(board_s board, state_array_s current_state, size_t index
}

return
(blocks == filled_blocks) ? filled_sums != sums : false ||
(filled_sums > sums) ||
(blocks - filled_blocks) ? get_sums(blocks - filled_blocks, UPPER_EDGE_E) < (sums - filled_sums) : false ||
(blocks - filled_blocks) ? get_sums(blocks - filled_blocks, LOWER_EDGE_E) > (sums - filled_sums) : false ||
_backtrack_col_repeat(board, current_state, index);
((blocks == filled_blocks) ? filled_sums != sums : false) ||
(filled_sums > sums) ||
((blocks - filled_blocks) ? get_sums(blocks - filled_blocks, UPPER_EDGE_E) < (sums - filled_sums) : false) ||
((blocks - filled_blocks) ? get_sums(blocks - filled_blocks, LOWER_EDGE_E) > (sums - filled_sums) : false);
}

bool _backtrack_valid_sums(board_s board, state_array_s current_state) {
Expand Down
1 change: 1 addition & 0 deletions program/source/gui/interface/grid.c
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,7 @@ void _draw_value(struct nk_context * context, struct nk_rect position, struct nk
float temp_height = context->style.font->height;
struct nk_user_font * font = context->style.font;
font->height = position.h;
position.x += (position.w / 2) - (font->width(font->userdata, font->height, string_num, strnlen(string_num, sizeof("-2147483647"))) / 2);
nk_draw_text(&context->current->buffer, position, string_num, strnlen(string_num, sizeof("-2147483647")), font, bg, fg);
font->height = temp_height;
}
16 changes: 11 additions & 5 deletions program/source/gui/interface/solver.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,8 @@ state_array_s state_provider(const ds_action_e action) {
}

thrd_start_t _solver(void * data) {
get_player_singleton()->solve_state = SOLVE_RUNNING_E;

struct nk_solver * input = data;

stack_s stack = create_stack();
Expand All @@ -100,19 +102,23 @@ thrd_start_t _solver(void * data) {
reduce(input->board, &initial);
push_stack(&stack, initial);

get_player_singleton()->solve_state = SOLVE_RUNNING_E;
while (!is_empty_stack(stack)) {
get_stat_singleton()->dfs_iteration_count++;

state_array_s guess = pop_stack(&stack);
{
state_array_s temp = copy_state_array(guess);
expect(-1 != write(pipefd[WRITE_PIPE_E], &temp, sizeof(state_array_s)),
NO_ACTION, "[ERROR] Write to pipe failed: %s", strerror(errno));
}

if (!look_ahead(input->board, &guess) || backtrack(input->board, guess)) {
destroy_state_array(&guess);
continue;
}

if (is_end_state(guess)) {
expect(-1 != write(pipefd[WRITE_PIPE_E], &guess, sizeof(state_array_s)), NO_ACTION, "Write to pipe failed: %s", strerror(errno));
destroy_state_array(&guess);
break;
}

Expand All @@ -124,14 +130,14 @@ thrd_start_t _solver(void * data) {
else destroy_state_array(&next.elements[i]);
}

destroy_state_array(&guess);
set_dfs_stack_max_size(stack.size);
LOOP_END:
expect(-1 != write(pipefd[WRITE_PIPE_E], &guess, sizeof(state_array_s)), NO_ACTION, "[ERROR] Write to pipe failed: %s", strerror(errno));
}

destroy_stack(&stack, destroy_state_array);
expect(0 == close(pipefd[WRITE_PIPE_E]), NO_ACTION, "[ERROR] Write pipe failed to close with error: %s", strerror(errno));
get_player_singleton()->solve_state = SOLVE_FINISHED_E;

get_player_singleton()->solve_state = SOLVE_FINISHED_E;
return 0;
}

Expand Down

0 comments on commit 46dd422

Please sign in to comment.