2017-12-06 16:25:13 +01:00
|
|
|
#include "../../header.h"
|
2018-01-07 14:16:57 +01:00
|
|
|
bool SetBestOrMoreLayersArithmetical(vector<LogEntry>& log, qualityVector& cqVector);
|
2017-12-22 22:55:55 +01:00
|
|
|
void calculateTrueDestructionPower(vector<LogEntry>& log, Puzzle& puzzleMat, float Layerworth);
|
2018-01-07 14:16:57 +01:00
|
|
|
void cut(vector<LogEntry>& log, int& cutID);
|
2017-12-23 21:46:41 +01:00
|
|
|
float capLogElements(vector<LogEntry>& log);
|
2018-01-07 14:16:57 +01:00
|
|
|
void CalculateNewCombinedQuality(vector<LogEntry>& log, qualityVector& qVector, qualityVector& cqVector);
|
2017-11-18 08:16:05 +01:00
|
|
|
|
2018-01-07 14:16:57 +01:00
|
|
|
bool next(vector<LogEntry>& log,Puzzle& puzzleMat)
|
2017-11-18 08:16:05 +01:00
|
|
|
{
|
2017-12-12 11:42:31 +01:00
|
|
|
//last log element is set, create new log element or log not yet started
|
2017-12-03 20:12:32 +01:00
|
|
|
if(!(log.size()) || log.back().isSet())
|
2018-01-08 18:33:30 +01:00
|
|
|
if((puzzleMat.allSet()))
|
|
|
|
return false; //puzzle solved
|
2018-01-07 14:16:57 +01:00
|
|
|
else createNextLogElement(log,puzzleMat);
|
2018-01-07 20:08:50 +01:00
|
|
|
|
2017-11-19 22:53:00 +01:00
|
|
|
//last log element is empty, backtrack
|
2018-01-07 20:08:50 +01:00
|
|
|
else if(!(log.back().PieceCollector.size()))
|
|
|
|
{
|
|
|
|
if(!(backtrack(log,puzzleMat)))
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2017-11-19 22:53:00 +01:00
|
|
|
//case last log element has multiple entries
|
2017-11-18 22:48:40 +01:00
|
|
|
else if(log.back().PieceCollector.size() > 1)
|
2017-12-22 22:55:55 +01:00
|
|
|
//moreLayers is 0, setbest is 1
|
2018-01-07 14:16:57 +01:00
|
|
|
if (SetBestOrMoreLayersArithmetical(log, puzzleMat.combinedQualityVector)) setsolution(log, puzzleMat);
|
|
|
|
else solve(log, puzzleMat);
|
2018-01-07 20:08:50 +01:00
|
|
|
|
2017-11-18 22:48:40 +01:00
|
|
|
//case last log exactly one solution
|
|
|
|
else if(log.back().PieceCollector.size() == 1)
|
2017-11-19 22:53:00 +01:00
|
|
|
if(log.back().hasRandomed())
|
2017-12-21 12:20:57 +01:00
|
|
|
if(log.back().abstractionLevel < 2)//do 2 at least two best abstractions to check if part is okay
|
2018-01-07 14:16:57 +01:00
|
|
|
solve(log,puzzleMat);
|
2017-11-19 22:53:00 +01:00
|
|
|
else
|
2018-01-07 14:16:57 +01:00
|
|
|
setsolution(log,puzzleMat);
|
2017-12-13 10:47:15 +01:00
|
|
|
else
|
2018-01-07 14:16:57 +01:00
|
|
|
setsolution(log,puzzleMat);
|
2018-01-19 21:36:31 +01:00
|
|
|
if(log.back().myCoor.row==26)
|
|
|
|
cout << log.back().myCoor.row << ", " << log.back().myCoor.col << endl;
|
2017-12-13 10:47:15 +01:00
|
|
|
return true;
|
2018-01-19 21:36:31 +01:00
|
|
|
|
2017-11-18 22:48:40 +01:00
|
|
|
}
|
2017-11-18 08:16:05 +01:00
|
|
|
|
2018-01-07 14:16:57 +01:00
|
|
|
void createNextLogElement(vector<LogEntry>& log, Puzzle& puzzleMat)
|
2017-12-12 11:42:31 +01:00
|
|
|
{
|
2017-12-21 12:43:31 +01:00
|
|
|
log.emplace_back(LogEntry(coor(0, 0)));
|
2018-01-07 14:16:57 +01:00
|
|
|
log.back().myCoor = calculateNextCoor(log, puzzleMat);
|
2017-12-22 23:09:23 +01:00
|
|
|
puzzleMat.dp.DestructionOfSurrounding(log.back().myCoor);//calculate dp from surrounding
|
2018-01-07 20:08:50 +01:00
|
|
|
//get all not set pieces
|
2018-01-07 14:16:57 +01:00
|
|
|
for(auto it:puzzleMat.p_myBox)
|
2018-01-07 20:08:50 +01:00
|
|
|
if(!it->set)
|
|
|
|
log.back().PieceCollector.emplace_back(pair<float,Part*>(0,it));
|
2018-01-07 14:16:57 +01:00
|
|
|
solve(log,puzzleMat);
|
2017-12-12 11:42:31 +01:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2018-01-07 14:16:57 +01:00
|
|
|
coor calculateNextCoor(vector<LogEntry>& log, Puzzle& puzzleMat)
|
2017-11-18 08:16:05 +01:00
|
|
|
{
|
2017-11-18 22:48:40 +01:00
|
|
|
//level 1:
|
|
|
|
//go left to right, then increase current row
|
2017-12-03 20:12:32 +01:00
|
|
|
if (log.size() == 1)
|
2017-12-13 10:47:15 +01:00
|
|
|
return {0,0};
|
2017-12-03 20:12:32 +01:00
|
|
|
|
|
|
|
|
2018-01-07 20:08:50 +01:00
|
|
|
unsigned int col= log.rbegin()[1].myCoor.col;
|
|
|
|
unsigned int row= log.rbegin()[1].myCoor.row;
|
2017-12-03 20:12:32 +01:00
|
|
|
|
|
|
|
|
2018-01-07 20:08:50 +01:00
|
|
|
if(row<puzzleMat.getSizeAsCoor().row-1) row++;
|
|
|
|
else if(col<puzzleMat.getSizeAsCoor().col-1){ row=0; col++;}
|
|
|
|
return {col,row};
|
2017-11-18 22:48:40 +01:00
|
|
|
}
|
|
|
|
|
2018-01-07 20:08:50 +01:00
|
|
|
void solve(vector<LogEntry>& log,Puzzle& puzzleMat)
|
2017-11-18 22:48:40 +01:00
|
|
|
{
|
2018-01-06 23:23:42 +01:00
|
|
|
log.back().abstractionLevel = puzzleMat.dp.getNextAbstractionLayer(log.back().myCoor,log.back().abstractionLevel); //sets in abstractionLevel
|
2017-11-19 22:53:00 +01:00
|
|
|
//status(log,p_Box,puzzleMat);
|
2018-01-19 21:36:31 +01:00
|
|
|
//TODO!! Add more layers here
|
2017-11-19 17:52:02 +01:00
|
|
|
switch(log.back().abstractionLevel)
|
2017-11-18 22:48:40 +01:00
|
|
|
{
|
2018-01-07 20:08:50 +01:00
|
|
|
case 0://pömpel
|
2017-12-22 22:47:14 +01:00
|
|
|
puzzleMat.a1.EvaluateQuality(log.back().myCoor, log.back().PieceCollector);
|
2017-11-19 17:52:02 +01:00
|
|
|
break;
|
2018-01-19 21:36:31 +01:00
|
|
|
case 1://
|
|
|
|
puzzleMat.a3.EvaluateQuality(log.back().myCoor,log.back().PieceCollector);
|
|
|
|
break;
|
2018-01-07 20:08:50 +01:00
|
|
|
case -1://random
|
|
|
|
setsolution(log,puzzleMat);
|
|
|
|
return;
|
2017-11-19 17:52:02 +01:00
|
|
|
default:
|
2017-11-18 22:48:40 +01:00
|
|
|
break;
|
|
|
|
}
|
2017-12-12 11:42:31 +01:00
|
|
|
|
2017-12-23 21:46:41 +01:00
|
|
|
float worth = capLogElements(log);
|
|
|
|
calculateTrueDestructionPower(log,puzzleMat, worth);
|
2018-01-07 14:16:57 +01:00
|
|
|
CalculateNewCombinedQuality(log, log.back().PieceCollector, puzzleMat.combinedQualityVector);
|
2017-12-12 11:42:31 +01:00
|
|
|
|
2017-11-18 08:16:05 +01:00
|
|
|
}
|
|
|
|
|
2017-12-20 18:23:39 +01:00
|
|
|
//removes from box and makes log "set"
|
2018-01-07 14:16:57 +01:00
|
|
|
void setsolution(vector<LogEntry>& log, Puzzle& puzzleMat)
|
2017-11-18 08:16:05 +01:00
|
|
|
{
|
2017-12-12 11:42:31 +01:00
|
|
|
//advance number of randomed part count
|
|
|
|
if(log.back().PieceCollector.size()>1) log.back().advanceRandomed();
|
2018-01-08 18:44:32 +01:00
|
|
|
|
2018-01-07 20:08:50 +01:00
|
|
|
//'set=true' all 4 rotations of pieces in puzzleBox
|
|
|
|
for(int i=0;i<puzzleMat.p_myBox.size();i++)
|
|
|
|
if(puzzleMat.p_myBox[i]->GetPartID()==log.back().PieceCollector.begin()->second->GetPartID())
|
|
|
|
puzzleMat.p_myBox[i]->set=true;
|
2017-12-03 20:12:32 +01:00
|
|
|
|
2018-01-07 20:08:50 +01:00
|
|
|
puzzleMat.combinedQualityVector.clear(); //clear data from temp variable
|
2017-11-19 22:53:00 +01:00
|
|
|
//tell log entry that it is set
|
|
|
|
log.back().Set();
|
2018-01-19 21:36:31 +01:00
|
|
|
if(log.back().myCoor.row==27)
|
|
|
|
cout << "hello" << endl;
|
2018-01-07 20:08:50 +01:00
|
|
|
puzzleMat.setConstraints(log.back().myCoor,log.back().PieceCollector.begin()->second);
|
2018-01-16 22:53:05 +01:00
|
|
|
//cout << "set:" << log.back().myCoor.col << "," << log.back().myCoor.row << endl;
|
2017-12-03 20:12:32 +01:00
|
|
|
}
|
2017-11-18 08:16:05 +01:00
|
|
|
|
2018-01-07 14:16:57 +01:00
|
|
|
bool backtrack(vector<LogEntry>& log, Puzzle& puzzleMat)
|
2017-11-18 08:16:05 +01:00
|
|
|
{
|
2018-01-07 20:08:50 +01:00
|
|
|
if(log.empty())
|
|
|
|
{
|
|
|
|
cout << "Puzzle not solveable!" << endl;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
puzzleMat.combinedQualityVector.clear(); //remove all data from temp quality save
|
2018-01-08 18:33:30 +01:00
|
|
|
//if more pieces possible, tset piece as not logged
|
2017-12-20 18:23:39 +01:00
|
|
|
if((log.back().PieceCollector.size())>1)
|
|
|
|
{
|
2018-01-08 18:33:30 +01:00
|
|
|
for(int i=0;i<puzzleMat.p_myBox.size();i++)
|
|
|
|
if(puzzleMat.p_myBox[i]->GetPartID()==log.back().PieceCollector.begin()->second->GetPartID())//sets all with partid
|
|
|
|
puzzleMat.p_myBox[i]->set=false;
|
2017-12-03 20:12:32 +01:00
|
|
|
log.back().PieceCollector.erase(log.back().PieceCollector.begin());
|
|
|
|
|
2017-11-28 21:35:49 +01:00
|
|
|
if(log.back().PieceCollector.size()==1)
|
|
|
|
log.back().decreaseRandomed();
|
2017-12-03 20:12:32 +01:00
|
|
|
|
2018-01-07 14:16:57 +01:00
|
|
|
setsolution(log,puzzleMat);
|
2017-11-28 21:35:49 +01:00
|
|
|
|
2017-12-20 18:23:39 +01:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
//else remove log element and backtrack once more
|
|
|
|
else
|
|
|
|
{
|
2017-12-21 12:20:57 +01:00
|
|
|
puzzleMat.removeConstrains(log.back().myCoor); //this should remove constraints from all layers
|
|
|
|
if((log.back().PieceCollector.size()))
|
2018-01-07 20:08:50 +01:00
|
|
|
for(int i=0;i<puzzleMat.p_myBox.size();i++)
|
|
|
|
if(puzzleMat.p_myBox[i]->GetPartID()==log.back().PieceCollector.begin()->second->GetPartID())//sets all with partid
|
|
|
|
puzzleMat.p_myBox[i]->set=false;
|
2017-12-20 18:23:39 +01:00
|
|
|
log.pop_back();
|
2018-01-07 20:08:50 +01:00
|
|
|
if(!backtrack(log,puzzleMat))
|
|
|
|
return false;
|
|
|
|
return true;
|
2017-12-20 18:23:39 +01:00
|
|
|
}
|
2017-11-19 22:53:00 +01:00
|
|
|
}
|
|
|
|
|
2017-12-13 10:47:15 +01:00
|
|
|
|
2017-12-23 21:46:41 +01:00
|
|
|
//this is addon stuff that should later all be extracted into a sererate cpp as it is not core dispatcher functionality
|
2017-12-22 22:55:55 +01:00
|
|
|
|
2017-12-23 21:46:41 +01:00
|
|
|
void calculateTrueDestructionPower(vector<LogEntry>& log, Puzzle& puzzleMat, float Layerworth) {
|
|
|
|
float destructionPower = sqrt(
|
2018-01-08 18:44:32 +01:00
|
|
|
Layerworth * puzzleMat.dp.m_constraintMatrix[0][0].SpeedTable[log.back().abstractionLevel]);
|
2018-01-07 21:58:16 +01:00
|
|
|
|
|
|
|
//save destructionArray for when coor is done
|
|
|
|
if(puzzleMat.tmp_destructionArray.empty())
|
|
|
|
for(auto it:puzzleMat.dp.m_constraintMatrix[log.back().myCoor.col][log.back().myCoor.row].DestructionArray)
|
|
|
|
puzzleMat.tmp_destructionArray.emplace_back(it);
|
|
|
|
|
|
|
|
puzzleMat.tmp_destructionArray[log.back().abstractionLevel]=destructionPower;
|
|
|
|
|
2017-12-22 22:55:55 +01:00
|
|
|
}
|
|
|
|
|
2017-12-23 21:46:41 +01:00
|
|
|
// PART RAUER_WEIDINGER
|
|
|
|
float capLogElements(vector<LogEntry>& log)
|
2017-12-22 22:55:55 +01:00
|
|
|
{
|
|
|
|
// Till Now only ground structure -> incorrect variable ans vector names
|
|
|
|
double limit = 0.6;
|
|
|
|
double diff = 0;
|
2018-01-07 14:16:57 +01:00
|
|
|
|
|
|
|
int id=0;
|
|
|
|
|
2017-12-22 22:55:55 +01:00
|
|
|
double maxdiff = 0;
|
|
|
|
int vectorsizeBefore = 0;
|
|
|
|
int vectorsizeAfter = 0;
|
|
|
|
double destroyed = 0; // destroyed parts in %
|
|
|
|
|
|
|
|
vectorsizeBefore = log.back().PieceCollector.size();
|
|
|
|
|
2018-01-07 14:16:57 +01:00
|
|
|
sort(log.back().PieceCollector.begin(),log.back().PieceCollector.end()); // Sort the vector after probabilities
|
|
|
|
reverse(log.back().PieceCollector.begin(),log.back().PieceCollector.end());
|
|
|
|
for(;id<log.back().PieceCollector.size();id++)
|
|
|
|
{
|
|
|
|
if(log.back().PieceCollector[id].first < limit)
|
2017-12-22 22:55:55 +01:00
|
|
|
break;
|
2018-01-07 14:16:57 +01:00
|
|
|
}
|
2018-01-07 20:08:50 +01:00
|
|
|
int newid=0;
|
2018-01-19 21:36:31 +01:00
|
|
|
//check if all over
|
|
|
|
if(id==log.back().PieceCollector.size())
|
|
|
|
return 0;
|
2018-01-07 20:08:50 +01:00
|
|
|
if(id>0)
|
|
|
|
newid = --id; //set to the one just over limit
|
2017-12-22 22:55:55 +01:00
|
|
|
|
2018-01-07 20:08:50 +01:00
|
|
|
while(id<(log.back().PieceCollector.size()-1)) //find maximum difference in function
|
2017-12-22 22:55:55 +01:00
|
|
|
{
|
2018-01-07 20:08:50 +01:00
|
|
|
if(!log.back().PieceCollector[id].first)
|
|
|
|
break;
|
2018-01-07 14:16:57 +01:00
|
|
|
|
|
|
|
diff = log.back().PieceCollector[id].first - log.back().PieceCollector[++id].first;
|
2017-12-22 22:55:55 +01:00
|
|
|
if(diff > maxdiff)
|
|
|
|
{
|
|
|
|
maxdiff = diff;
|
2018-01-07 14:16:57 +01:00
|
|
|
newid = id;
|
2017-12-22 22:55:55 +01:00
|
|
|
}
|
|
|
|
}
|
2018-01-07 14:16:57 +01:00
|
|
|
cut(log,newid);
|
2017-12-22 22:55:55 +01:00
|
|
|
|
2017-12-23 21:46:41 +01:00
|
|
|
vectorsizeAfter = log.back().PieceCollector.size();
|
2018-01-07 14:16:57 +01:00
|
|
|
destroyed = ((double)vectorsizeBefore - (double)vectorsizeAfter) / (double)vectorsizeBefore;
|
2017-12-23 21:46:41 +01:00
|
|
|
return (float)sqrt(destroyed*maxdiff);
|
2017-12-22 22:55:55 +01:00
|
|
|
|
|
|
|
|
2017-12-23 21:46:41 +01:00
|
|
|
}
|
|
|
|
|
2018-01-07 14:16:57 +01:00
|
|
|
void cut(vector<LogEntry>& log, int& cutID)
|
2017-12-23 21:46:41 +01:00
|
|
|
{
|
2018-01-07 14:16:57 +01:00
|
|
|
while(cutID<log.back().PieceCollector.size())
|
|
|
|
log.back().PieceCollector.erase(log.back().PieceCollector.begin()+cutID);
|
2017-12-23 21:46:41 +01:00
|
|
|
}
|
2017-12-22 22:55:55 +01:00
|
|
|
|
2018-01-05 01:18:23 +01:00
|
|
|
// -------------------- Part David: SetBest and CalculateCombinedQuality --------------------
|
|
|
|
// pruefen, ob mehr als X combinedQualities ueber dem Grenzwert sind. Wenn nur noch Y Pieces ueber bleiben, dann setBest!
|
|
|
|
// geeignete Threshold values muessen noch getestet werden
|
2018-01-07 14:16:57 +01:00
|
|
|
bool SetBestOrMoreLayersArithmetical(vector<LogEntry>& log, qualityVector& cqVector)
|
2017-12-22 22:55:55 +01:00
|
|
|
{
|
2018-01-07 20:08:50 +01:00
|
|
|
float threshold, tempBest = 0.0;
|
2018-01-05 01:18:23 +01:00
|
|
|
unsigned int countHigherThreshold = 0;
|
2017-12-22 22:55:55 +01:00
|
|
|
|
2018-01-07 14:16:57 +01:00
|
|
|
if(cqVector.empty())
|
2017-12-22 22:55:55 +01:00
|
|
|
{
|
2018-01-07 20:08:50 +01:00
|
|
|
//cerr << "combinedQualityVector is empty." << endl; // should not be empty => backtrack?
|
2018-01-05 01:18:23 +01:00
|
|
|
return false; // Warning: can only return true or false. What return for error?
|
2017-12-22 22:55:55 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-01-08 18:44:32 +01:00
|
|
|
switch(log.back().abstractionLevel)
|
2018-01-05 01:18:23 +01:00
|
|
|
{
|
2018-01-08 18:44:32 +01:00
|
|
|
case 0: threshold = 0.90; break;
|
|
|
|
case 1: threshold = 0.80; break;
|
|
|
|
case 2: threshold = 0.75; break;
|
|
|
|
case 3: threshold = 0.66; break;
|
|
|
|
case 4: threshold = 0.60; break;
|
2018-01-05 01:18:23 +01:00
|
|
|
default: threshold = 0.5; break;
|
|
|
|
}
|
2018-01-19 21:36:31 +01:00
|
|
|
//TODO!! add more layers here!
|
2017-12-23 21:46:41 +01:00
|
|
|
|
2018-01-07 20:08:50 +01:00
|
|
|
// check Quality of current Puzzle Piece in combinedQualityVector with Threshold value
|
2018-01-07 14:16:57 +01:00
|
|
|
for (qualityVector::iterator it = cqVector.begin(); it != cqVector.end(); it++)
|
|
|
|
if ((cqVector.back().first / log.back().abstractionLevel) >= threshold) // const threshold values
|
2018-01-05 01:18:23 +01:00
|
|
|
// count how many Pieces are greater than the threshold value
|
|
|
|
countHigherThreshold++;
|
|
|
|
else
|
2018-01-07 14:16:57 +01:00
|
|
|
if ((cqVector.back().first / log.back().abstractionLevel) > tempBest)
|
|
|
|
tempBest = cqVector.back().first; // could be used, for additional constraints
|
2017-12-22 22:55:55 +01:00
|
|
|
|
2018-01-05 01:18:23 +01:00
|
|
|
// return true if only one piece is left
|
|
|
|
if (1 == countHigherThreshold)
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
2017-12-22 22:55:55 +01:00
|
|
|
}
|
|
|
|
|
2018-01-05 01:18:23 +01:00
|
|
|
// jede Quality vom Piececollector zu einer combinedQuality aufsummieren (von jedem bereits verwendetem Layer)
|
|
|
|
// Achtung: Es muss noch der Mittelwert gebildet werden => SetBestOrMoreLayersArithmetical
|
2018-01-07 14:16:57 +01:00
|
|
|
void CalculateNewCombinedQuality(vector<LogEntry>& log, qualityVector& qVector, qualityVector& cqVector)
|
2017-12-22 22:55:55 +01:00
|
|
|
{
|
2018-01-05 01:18:23 +01:00
|
|
|
bool summarizedVectors = false;
|
|
|
|
int countSummarizedVectors = 0;
|
2018-01-19 21:36:31 +01:00
|
|
|
bool removePart=true;
|
2017-12-22 22:55:55 +01:00
|
|
|
|
2018-01-05 01:18:23 +01:00
|
|
|
// check if both qualityVectors are not empty
|
|
|
|
if(qVector.empty())
|
|
|
|
{
|
2018-01-07 20:08:50 +01:00
|
|
|
//cerr << "qualityVector is empty." << endl; // should not be empty => backtrack?
|
2018-01-05 01:18:23 +01:00
|
|
|
return;
|
|
|
|
}
|
2018-01-07 20:08:50 +01:00
|
|
|
if(cqVector.empty())
|
2018-01-05 01:18:23 +01:00
|
|
|
{
|
2018-01-07 20:08:50 +01:00
|
|
|
//cout << "combinedQualityVector was initialized." << endl; //first layer stuff eh
|
|
|
|
for(auto it:qVector)
|
|
|
|
cqVector.emplace_back(it);
|
2017-12-22 22:55:55 +01:00
|
|
|
}
|
2018-01-07 20:08:50 +01:00
|
|
|
else
|
|
|
|
{
|
|
|
|
for (unsigned int i = 0; i < cqVector.size(); i++) {
|
|
|
|
for (unsigned int j = 0; j < qVector.size(); j++) {
|
|
|
|
// search same PuzzlePart of qualityVector and combinedQualityVector
|
2018-01-19 21:36:31 +01:00
|
|
|
if (cqVector.at(i).second->GetPartID() == qVector.at(j).second->GetPartID() && cqVector.at(i).second->GetNumOfRotations() == qVector.at(j).second->GetNumOfRotations()) {
|
2018-01-07 20:08:50 +01:00
|
|
|
// sum Quality of PieceCollector (qualityVector) to combinedQualityVector
|
|
|
|
cqVector.at(j).first += qVector.at(i).first;
|
|
|
|
countSummarizedVectors++;
|
2018-01-19 21:36:31 +01:00
|
|
|
removePart=false;
|
2018-01-07 20:08:50 +01:00
|
|
|
break; // skip remaining for loop => save time!
|
|
|
|
}
|
|
|
|
// remove element at poisition X in combinedQualityVector, because it was not summarized
|
|
|
|
// inefficient way to delete element X
|
|
|
|
//cqVector->erase(cqVector->begin()+i);
|
|
|
|
// efficient way, but no sorted cqVector => wayne //echt? lol
|
2018-01-19 21:36:31 +01:00
|
|
|
|
|
|
|
}
|
|
|
|
if(removePart)
|
|
|
|
{
|
|
|
|
swap(cqVector.at(i), cqVector.back());
|
|
|
|
cqVector.pop_back();
|
2018-01-07 20:08:50 +01:00
|
|
|
}
|
2018-01-19 21:36:31 +01:00
|
|
|
|
2018-01-07 20:08:50 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// cqVector should have the same size now as newest qVector
|
|
|
|
if (cqVector.size() != qVector.size()) {
|
|
|
|
cerr << "Size of combinedQualityVector doenst match with size of qualityVector!" << endl;
|
|
|
|
cout << "Size of combinedQualityVector: " << cqVector.size() << endl;
|
|
|
|
cout << "Size of qualityVector: " << qVector.size() << endl;
|
|
|
|
cout << "Size of countSummarizedVectors: " << countSummarizedVectors << endl;
|
|
|
|
}
|
|
|
|
}
|
2018-01-05 01:18:23 +01:00
|
|
|
}
|