From 0ead8d42d93ee5d91519f006a84a942109bf4f36 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Sat, 22 Dec 2018 23:11:39 +0100 Subject: fix endless loop --- node/groupnode.cpp | 41 ++++++++++++++++++++++++++++------------- node/groupnode.h | 2 +- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/node/groupnode.cpp b/node/groupnode.cpp index 5065987..c5b141d 100644 --- a/node/groupnode.cpp +++ b/node/groupnode.cpp @@ -165,27 +165,35 @@ bool GroupNode::composeWithPrevious(DieGroup previous, qint64 first, qint64 curr dieG.append(va); possibleUnion.append(dieG); } + while(!hasReachMax) { auto tmpValues = previous; QList possibleTmp; for(auto& diaG : possibleUnion) { + if(tmpValues.isEmpty()) + break; tmpValues.removeValue(diaG); + for(auto& value : tmpValues) { DieGroup dia; dia.append(diaG); dia.append(value); - possibleTmp.append(dia); if(dia.size() >= maxComboLength-1) hasReachMax = true; + else + possibleTmp.append(dia); } } if(possibleTmp.isEmpty()) hasReachMax = true; - possibleUnion.append(possibleTmp); - + else + { + possibleTmp.append(possibleUnion); + possibleUnion = possibleTmp; + } } std::sort(possibleUnion.begin(),possibleUnion.end(),[=](const DieGroup& a, const DieGroup& b){ return a.getLost() > b.getLost(); @@ -250,23 +258,30 @@ QList GroupNode::getGroup(DieGroup values) { DieGroup group; group.setExceptedValue(m_groupValue); - composeWithPrevious(previousValue,first, *it, group); - loseMap[group.getLost()]= group; + auto b = composeWithPrevious(previousValue,first, *it, group); + if(b) + loseMap[group.getLost()]= group; } previousValue << *it; cumuledValue += *it; ++it; } } - DieGroup die = loseMap.first(); - result.append(die); - DieGroup valueToRemove = die; - valueToRemove.removeFirst(); - values.removeValue(valueToRemove); - - if(values.getSum() >= m_groupValue) + if(!loseMap.isEmpty()) { - result.append(getGroup(values)); + DieGroup die = loseMap.first(); + result.append(die); + DieGroup valueToRemove = die; + if(!valueToRemove.isEmpty()) + { + valueToRemove.removeFirst(); + values.removeValue(valueToRemove); + + if(values.getSum() >= m_groupValue) + { + result.append(getGroup(values)); + } + } } return result; diff --git a/node/groupnode.h b/node/groupnode.h index 64a13ef..4c1b74c 100644 --- a/node/groupnode.h +++ b/node/groupnode.h @@ -38,7 +38,7 @@ public: void setExceptedValue(qint64 exceptedValue); private: - qint64 m_exceptedValue; + qint64 m_exceptedValue = 0; }; /** -- cgit v1.2.3-70-g09d2