Bug 308175

Summary: The Solver sometimes incorrectly displays "no longer winnable" in status bar
Product: [Applications] kpat Reporter: Uli Bellgardt <uli_bellgardt>
Component: solverAssignee: Stephan Kulow <coolo>
Status: RESOLVED DUPLICATE    
Severity: normal CC: coates, kde-games-bugs-null, peter.maloney
Priority: NOR    
Version First Reported In: 3.6   
Target Milestone: ---   
Platform: Ubuntu   
OS: Linux   
Latest Commit: Version Fixed/Implemented In:
Sentry Crash Report:

Description Uli Bellgardt 2012-10-10 12:03:20 UTC
Playing game "Simple Simon",  sometimes when I move a card, the status bar display changes from "Solver: This game is winnable." to "Solver: This game is no longer winnable", even if this last move was e.g. shifting a "9" from one "10" to another "10" on a different stack, so that it is a perfectly legal move to put the card back so that the status line changes again to "Solver: This game is winnable". 

I would expect that if the display is "... no longer winnable", there is no legal move to change the condition back to "... winnable" (except 'undo', which I do not consider as a legal move in this context).
This is because I think if a situation has a "winnable" successor, the situation itself is "winnable", and if a situation is "not winnable", there is no "winnable" successor.

Reproducible: Sometimes

Steps to Reproduce:
1. Start kpat and load following example - it is a saved Game:

<!DOCTYPE kpat>
<dealer options="" started="1" number="842956548" moves="36" id="9">
 <pile z="0" index="1"/>
 <pile z="0" index="2"/>
 <pile z="0" index="3"/>
 <pile z="0" index="4"/>
 <pile z="0" index="5">
  <card faceup="1" value="1" suit="0"/>
  <card faceup="1" value="6" suit="2"/>
  <card faceup="1" value="5" suit="0"/>
  <card faceup="1" value="12" suit="2"/>
  <card faceup="1" value="6" suit="0"/>
  <card faceup="1" value="2" suit="2"/>
  <card faceup="1" value="8" suit="1"/>
  <card faceup="1" value="1" suit="2"/>
 </pile>
 <pile z="0.01" index="6">
  <card faceup="1" value="9" suit="2"/>
  <card faceup="1" value="3" suit="2"/>
  <card faceup="1" value="2" suit="0"/>
  <card faceup="1" value="9" suit="3"/>
 </pile>
 <pile z="0.02" index="7">
  <card faceup="1" value="12" suit="3"/>
  <card faceup="1" value="9" suit="0"/>
  <card faceup="1" value="7" suit="2"/>
  <card faceup="1" value="5" suit="1"/>
  <card faceup="1" value="11" suit="2"/>
  <card faceup="1" value="11" suit="1"/>
  <card faceup="1" value="3" suit="0"/>
  <card faceup="1" value="13" suit="2"/>
  <card faceup="1" value="12" suit="1"/>
  <card faceup="1" value="11" suit="3"/>
  <card faceup="1" value="10" suit="3"/>
 </pile>
 <pile z="0.03" index="8">
  <card faceup="1" value="13" suit="0"/>
  <card faceup="1" value="12" suit="0"/>
  <card faceup="1" value="7" suit="1"/>
  <card faceup="1" value="1" suit="1"/>
  <card faceup="1" value="11" suit="0"/>
  <card faceup="1" value="10" suit="0"/>
 </pile>
 <pile z="0.04" index="9">
  <card faceup="1" value="7" suit="3"/>
  <card faceup="1" value="13" suit="1"/>
  <card faceup="1" value="4" suit="0"/>
  <card faceup="1" value="4" suit="3"/>
  <card faceup="1" value="3" suit="1"/>
  <card faceup="1" value="8" suit="0"/>
  <card faceup="1" value="7" suit="0"/>
  <card faceup="1" value="6" suit="3"/>
  <card faceup="1" value="5" suit="3"/>
  <card faceup="1" value="4" suit="2"/>
  <card faceup="1" value="3" suit="3"/>
  <card faceup="1" value="2" suit="3"/>
 </pile>
 <pile z="0.05" index="10">
  <card faceup="1" value="8" suit="3"/>
  <card faceup="1" value="2" suit="1"/>
  <card faceup="1" value="1" suit="3"/>
 </pile>
 <pile z="0.06" index="11">
  <card faceup="1" value="5" suit="2"/>
  <card faceup="1" value="4" suit="1"/>
  <card faceup="1" value="6" suit="1"/>
  <card faceup="1" value="10" suit="2"/>
  <card faceup="1" value="9" suit="1"/>
 </pile>
 <pile z="0.07000000000000001" index="12">
  <card faceup="1" value="8" suit="2"/>
 </pile>
 <pile z="0.08" index="13">
  <card faceup="1" value="13" suit="3"/>
 </pile>
 <pile z="0.09" index="14">
  <card faceup="1" value="10" suit="1"/>
 </pile>
</dealer>





2. See the status line is "Solver: This game is winnable".
3. Move the "Diamonds 9" onto the "Diamonds 10". 
4. See the status line now is "Solver: This game is no longer winnable".
5. Move the "Diamonds 9" back onto the "Heats 10".
6. See the status line is "Solver: This game is winnable" again.
Actual Results:  
Just with legal card moves, I can switch the state from "winnable" to "not winnable" and back to "winnable".

Expected Results:  
In this situation, I would not expect that the status line changes to "...no longer winnable" because there is a way back to "winnable".
Comment 1 peter.maloney 2012-11-02 21:43:19 UTC
I have a similar problem; I didn't know I could save xml at the time, but I saved screenshots. Also version 3.6.
Comment 2 Parker Coates 2012-11-09 13:57:11 UTC
Thank you for the detailed report and example save file, but the issue has already been reported.

*** This bug has been marked as a duplicate of bug 198016 ***