h48

A prototype for an optimal Rubik's cube solver, work in progress.
git clone https://git.tronto.net/h48
Download | Log | Files | Refs | README | LICENSE

commit 0f4931c8de298b0f97aba1757c9538f48adb30c6
parent 9154476ba6bf400c1eb379f0a3aa6caae2d06d4d
Author: Sebastiano Tronto <sebastiano@tronto.net>
Date:   Tue, 25 Mar 2025 15:17:00 +0100

Tiny bugfix in solution writing

Diffstat:
Msrc/core/io_moves.h | 23+++++++++--------------
Msrc/solvers/solutions.h | 9+++++----
Atest/130_appendsolution/09_fullinverse_niss.in | 5+++++
Atest/130_appendsolution/09_fullinverse_niss.out | 4++++
4 files changed, 23 insertions(+), 18 deletions(-)

diff --git a/src/core/io_moves.h b/src/core/io_moves.h @@ -79,36 +79,31 @@ writemoves( char buf[buf_size] ) { - size_t i, len, written; + size_t i, len, w; const char *s; - char *b; if (buf_size == 0) { LOG("Error: cannot write moves to buffer of size 0.\n"); return NISSY_ERROR_BUFFER_SIZE; } - for (i = 0, b = buf, written = 0; i < nmoves; i++, b++, written++) { + for (i = 0, w = 0; i < nmoves; i++, w++) { s = movestr[m[i]]; len = strlen(s); - if (len + written >= buf_size) { + if (len + w >= buf_size) { LOG("Error: the given buffer is too small for " "writing the given moves.\n"); goto writemoves_error; } - memcpy(b, s, len); - written += len; - b += len; - *b = ' '; + memcpy(buf+w, s, len); + w += len; + buf[w] = ' '; } - if (b == buf) - written = 1; /* Nothing written, only NULL-terminator */ - else - b--; /* Remove last space */ - *b = '\0'; + if (w > 0) w--; /* Remove last space */ + buf[w] = '\0'; - return (int64_t)written; + return (int64_t)w; writemoves_error: *buf = '\0'; diff --git a/src/solvers/solutions.h b/src/solvers/solutions.h @@ -152,12 +152,13 @@ appendsolution( list->size - list->used, list->buf + list->used); if (strl < 0) goto appendsolution_error_buffer; - list->used += (size_t)(strl-1); + list->used += strl; /* Write moves on inverse with NISS notation */ if (tsol[r].npremoves > 0) { - if (!appendchar(list, ' ')) - goto appendsolution_error_buffer; + if (strl > 0) + if (!appendchar(list, ' ')) + goto appendsolution_error_buffer; if (!appendchar(list, '(')) goto appendsolution_error_buffer; @@ -165,7 +166,7 @@ appendsolution( list->size - list->used, list->buf + list->used); if (strl < 0) goto appendsolution_error_buffer; - list->used += (size_t)(strl-1); + list->used += strl; if (!appendchar(list, ')')) goto appendsolution_error_buffer; diff --git a/test/130_appendsolution/09_fullinverse_niss.in b/test/130_appendsolution/09_fullinverse_niss.in @@ -0,0 +1,5 @@ + +F +0 +1 +rotation UF diff --git a/test/130_appendsolution/09_fullinverse_niss.out b/test/130_appendsolution/09_fullinverse_niss.out @@ -0,0 +1,4 @@ +(F) +Number of solutions: 1 +Shortest solution length: 1 +Used bytes: 4