diff --git a/program/source/algorithms/backtrack.c b/program/source/algorithms/backtrack.c index 438eacd..131a32e 100644 --- a/program/source/algorithms/backtrack.c +++ b/program/source/algorithms/backtrack.c @@ -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) { @@ -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) { @@ -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) { diff --git a/program/source/gui/interface/grid.c b/program/source/gui/interface/grid.c index ed15845..f19f8cf 100644 --- a/program/source/gui/interface/grid.c +++ b/program/source/gui/interface/grid.c @@ -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; } diff --git a/program/source/gui/interface/solver.c b/program/source/gui/interface/solver.c index 06e17f6..8575d30 100644 --- a/program/source/gui/interface/solver.c +++ b/program/source/gui/interface/solver.c @@ -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(); @@ -100,11 +102,15 @@ 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); @@ -112,7 +118,7 @@ thrd_start_t _solver(void * data) { } 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; } @@ -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; }