added experimental plural result lookup
This commit is contained in:
parent
da2aa89059
commit
dbf29d194b
@ -37,6 +37,16 @@ Age::Age(const QDate &birth, const QDate &reference)
|
||||
m_months = months;
|
||||
}
|
||||
|
||||
bool Age::operator<(const Age &cmp) const
|
||||
{
|
||||
if (m_years == cmp.m_years)
|
||||
{
|
||||
return m_months < cmp.m_months;
|
||||
}
|
||||
|
||||
return m_years < cmp.m_years;
|
||||
}
|
||||
|
||||
unsigned int Age::years() const
|
||||
{
|
||||
return m_years;
|
||||
|
@ -13,6 +13,8 @@ public:
|
||||
Age(unsigned int years, unsigned int months);
|
||||
Age(const QDate &birth, const QDate &reference);
|
||||
|
||||
bool operator<(const Age &cmp) const;
|
||||
|
||||
unsigned int years() const;
|
||||
unsigned int months() const;
|
||||
};
|
||||
|
@ -34,6 +34,55 @@ QVariant ResultModel::data(const QModelIndex &index, int role) const
|
||||
return static_cast<uint>(points);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
switch (index.column())
|
||||
{
|
||||
case 8:
|
||||
{
|
||||
auto pR = getPluralPR();
|
||||
if (pR >= 84)
|
||||
{
|
||||
return pR;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
switch (index.column())
|
||||
{
|
||||
case 8:
|
||||
{
|
||||
auto pR = getPluralPR();
|
||||
if (pR < 84 && pR > 16)
|
||||
{
|
||||
return pR;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
switch (index.column())
|
||||
{
|
||||
case 8:
|
||||
{
|
||||
auto pR = getPluralPR();
|
||||
if (pR <= 16)
|
||||
{
|
||||
return pR;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -84,6 +133,7 @@ void ResultModel::setAge(const Age &age)
|
||||
{
|
||||
qDebug() << "Age:" << age.years() << "years" << age.months() << "months";
|
||||
m_age = age;
|
||||
emit dataChanged(index(1, 0), index(4, 8));
|
||||
}
|
||||
|
||||
void ResultModel::setPluralResult(size_t points)
|
||||
@ -94,3 +144,13 @@ void ResultModel::setPluralResult(size_t points)
|
||||
emit dataChanged(index(0, 8), index(4, 8));
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int ResultModel::getPluralPoints() const
|
||||
{
|
||||
return m_results[8].points();
|
||||
}
|
||||
|
||||
unsigned int ResultModel::getPluralPR() const
|
||||
{
|
||||
return PluralPR().lookup(m_age, getPluralPoints());
|
||||
}
|
||||
|
@ -4,6 +4,72 @@
|
||||
#include <vector>
|
||||
#include <QAbstractTableModel>
|
||||
|
||||
class PluralPR
|
||||
{
|
||||
// clang-format off
|
||||
const std::vector<Age> m_ages = {
|
||||
{ 4, 0 },
|
||||
{ 4, 6 },
|
||||
{ 5, 6 },
|
||||
{ 9, 0 }
|
||||
};
|
||||
|
||||
const std::vector<std::vector<unsigned int>> m_PRs = {
|
||||
{ 0, 0, 0 },
|
||||
{ 0, 1, 0 },
|
||||
{ 0, 1, 0 },
|
||||
{ 1, 1, 0 },
|
||||
{ 7, 2, 1 },
|
||||
{ 10, 4, 1},
|
||||
{ 26, 10, 2 },
|
||||
{ 57, 25, 7 },
|
||||
{ 79, 56, 27 },
|
||||
{ 100, 100, 100 }
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
public:
|
||||
unsigned int lookup(const Age &age, const unsigned int &points)
|
||||
{
|
||||
if (points >= m_PRs.size())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
auto ageIndex = [&]() -> size_t {
|
||||
if (m_ages.empty())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (age < m_ages.front())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (m_ages.back() < age)
|
||||
{
|
||||
return m_ages.size() - 1;
|
||||
}
|
||||
|
||||
for (size_t index = 1; index < m_ages.size(); ++index)
|
||||
{
|
||||
if (age < m_ages.at(index))
|
||||
{
|
||||
return index - 1;
|
||||
}
|
||||
}
|
||||
}();
|
||||
|
||||
if (ageIndex >= m_PRs.at(points).size())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return m_PRs.at(points).at(ageIndex);
|
||||
}
|
||||
};
|
||||
|
||||
class TestResult
|
||||
{
|
||||
private:
|
||||
@ -55,4 +121,8 @@ public:
|
||||
|
||||
void setAge(const Age &age);
|
||||
void setPluralResult(size_t points);
|
||||
|
||||
private:
|
||||
unsigned int getPluralPoints() const;
|
||||
unsigned int getPluralPR() const;
|
||||
};
|
||||
|
Reference in New Issue
Block a user