File Fix-the-Forty_Eight-solver-making-illegal-moves.patch of Package kpat4
From 81b9e3eb8deabcd0faae19ca5aaa6f2a65d33365 Mon Sep 17 00:00:00 2001
From: Ian Wadham <iandw.au@gmail.com>
Date: Fri, 24 Jul 2020 23:56:29 +0200
Subject: [PATCH] Fix the Forty & Eight solver making illegal moves
BUGS: 302140
---
patsolve/fortyeightsolver.cpp | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/patsolve/fortyeightsolver.cpp b/patsolve/fortyeightsolver.cpp
index 0e244c28..5678226d 100644
--- a/patsolve/fortyeightsolver.cpp
+++ b/patsolve/fortyeightsolver.cpp
@@ -411,7 +411,14 @@ int FortyeightSolver::get_possible_moves(int *a, int *numout)
}
if ( Wlen[w] > 1 && d.freestores )
{
- if ( SUIT( *Wp[w] ) == SUIT( W[w][Wlen[w]-2] ) )
+ // Column w has two or more cards and there is at least one empty
+ // column, so we can try for multi-card moves from w to other cols.
+ // This is valid only if ALL the cards to move are of the same
+ // suit and in ascending sequence, starting with the top two cards.
+ const card_t nextw = W[w][Wlen[w]-2]; // Next card after top.
+ const bool possMultiMove = ( SUIT( nextw ) == SUIT( *Wp[w] ) ) &&
+ ( ( RANK( nextw ) - RANK( *Wp[w] ) ) == 1 );
+ if ( possMultiMove )
{
//print_layout();
--
GitLab