Cockatrice 2026-01-14-Development-2.11.0-beta.46
A cross-platform virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
deck_list_statistics_analyzer.h
Go to the documentation of this file.
1#ifndef COCKATRICE_DECK_LIST_STATISTICS_ANALYZER_H
2#define COCKATRICE_DECK_LIST_STATISTICS_ANALYZER_H
3
4#include "deck_list_model.h"
5
6#include <QHash>
7#include <QObject>
8#include <unordered_map>
9
10class DeckListModel;
11
21
22class DeckListStatisticsAnalyzer : public QObject
23{
24 Q_OBJECT
25
26public:
27 explicit DeckListStatisticsAnalyzer(QObject *parent,
30
31 void analyze();
32
33 [[nodiscard]] const QHash<QString, int> &getManaBase() const
34 {
35 return manaBaseMap;
36 }
37 [[nodiscard]] const std::unordered_map<int, int> &getManaCurve() const
38 {
39 return manaCurveMap;
40 }
41 [[nodiscard]] const std::unordered_map<char, int> &getDevotion() const
42 {
43 return manaDevotionMap;
44 }
45
46 const QHash<QString, int> &getDevotionPipCount() const
47 {
48 return devotionPipCount;
49 }
50 const QHash<QString, int> &getDevotionCardCount() const
51 {
52 return devotionCardCount;
53 }
54
55 const QHash<QString, int> &getProductionPipCount() const
56 {
57 return productionPipCount;
58 }
59 const QHash<QString, int> &getProductionCardCount() const
60 {
62 }
63
64 const QHash<QString, int> &getTypeCount() const
65 {
66 return typeCount;
67 }
68 const QHash<QString, int> &getSubtypeCount() const
69 {
70 return subtypeCount;
71 }
72 const QHash<QString, int> &getColorCount() const
73 {
74 return colorCount;
75 }
76 const QHash<QString, int> &getRarityCount() const
77 {
78 return rarityCount;
79 }
80 const QHash<int, int> &getManaValueCount() const
81 {
82 return manaValueCount;
83 }
84
85 const QHash<QString, QHash<int, int>> &getManaCurveByType() const
86 {
87 return manaCurveByType;
88 }
89 const QHash<QString, QHash<int, int>> &getManaCurveBySubtype() const
90 {
91 return manaCurveBySubtype;
92 }
93 const QHash<QString, QHash<int, int>> &getManaCurveByColor() const
94 {
95 return manaCurveByColor;
96 }
97 const QHash<QString, QHash<int, int>> &getManaCurveByPower() const
98 {
99 return manaCurveByPower;
100 }
101 const QHash<QString, QHash<int, int>> &getManaCurveByToughness() const
102 {
104 }
105
106 const QHash<QString, QHash<int, QStringList>> &getManaCurveCardsByType() const
107 {
109 }
110
111 const QHash<QString, QHash<int, QStringList>> &getManaCurveCardsBySubtype() const
112 {
114 }
115
116 const QHash<QString, QHash<int, QStringList>> &getManaCurveCardsByColor() const
117 {
119 }
120
121 const QHash<QString, QHash<int, QStringList>> &getManaCurveCardsByPower() const
122 {
124 }
125
126 const QHash<QString, QHash<int, QStringList>> &getManaCurveCardsByToughness() const
127 {
129 }
130
132 {
133 return model;
134 }
135
136signals:
138
139private:
142
143 QHash<QString, int> manaBaseMap;
144 std::unordered_map<int, int> manaCurveMap;
145 std::unordered_map<char, int> manaDevotionMap;
146
147 QHash<QString, int> devotionPipCount; // W/U/B/R/G total symbols
148 QHash<QString, int> devotionCardCount; // how many cards provide devotion
149
150 QHash<QString, int> productionPipCount; // mana produced by cards
151 QHash<QString, int> productionCardCount; // number of producers
152
153 QHash<QString, int> typeCount;
154 QHash<QString, int> subtypeCount;
155 QHash<QString, int> colorCount;
156 QHash<QString, int> rarityCount;
157 QHash<int, int> manaValueCount;
158
159 QHash<QString, QHash<int, int>> manaCurveByType;
160 QHash<QString, QHash<int, int>> manaCurveBySubtype;
161 QHash<QString, QHash<int, int>> manaCurveByColor;
162 QHash<QString, QHash<int, int>> manaCurveByPower;
163 QHash<QString, QHash<int, int>> manaCurveByToughness;
164
165 QHash<QString, QHash<int, QStringList>> manaCurveCardsByType;
166 QHash<QString, QHash<int, QStringList>> manaCurveCardsBySubtype;
167 QHash<QString, QHash<int, QStringList>> manaCurveCardsByColor;
168 QHash<QString, QHash<int, QStringList>> manaCurveCardsByPower;
169 QHash<QString, QHash<int, QStringList>> manaCurveCardsByToughness;
170
171 // Not storing card info — only numeric results.
172 QHash<QString, QHash<int, QHash<int, double>>> probabilityExact;
173 QHash<QString, QHash<int, QHash<int, double>>> probabilityAtLeast;
174
175 QHash<QString, int> determineManaProduction(const QString &);
176 std::unordered_map<char, int> countManaSymbols(const QString &);
177 double hypergeometric(int N, int K, int n, int k);
178 void clearData();
179};
180
181#endif // COCKATRICE_DECK_LIST_STATISTICS_ANALYZER_H
Qt model representing a decklist for use in views (tree/table).
Definition deck_list_model.h:214
std::unordered_map< int, int > manaCurveMap
Definition deck_list_statistics_analyzer.h:144
DeckListModel * getModel() const
Definition deck_list_statistics_analyzer.h:131
const QHash< QString, QHash< int, int > > & getManaCurveByType() const
Definition deck_list_statistics_analyzer.h:85
QHash< QString, QHash< int, int > > manaCurveByPower
Definition deck_list_statistics_analyzer.h:162
const QHash< QString, QHash< int, int > > & getManaCurveBySubtype() const
Definition deck_list_statistics_analyzer.h:89
std::unordered_map< char, int > manaDevotionMap
Definition deck_list_statistics_analyzer.h:145
const QHash< QString, QHash< int, QStringList > > & getManaCurveCardsBySubtype() const
Definition deck_list_statistics_analyzer.h:111
QHash< QString, int > determineManaProduction(const QString &)
Definition deck_list_statistics_analyzer.cpp:114
const QHash< QString, int > & getSubtypeCount() const
Definition deck_list_statistics_analyzer.h:68
const QHash< QString, QHash< int, QStringList > > & getManaCurveCardsByPower() const
Definition deck_list_statistics_analyzer.h:121
QHash< int, int > manaValueCount
Definition deck_list_statistics_analyzer.h:157
double hypergeometric(int N, int K, int n, int k)
Definition deck_list_statistics_analyzer.cpp:181
QHash< QString, int > rarityCount
Definition deck_list_statistics_analyzer.h:156
std::unordered_map< char, int > countManaSymbols(const QString &)
Definition deck_list_statistics_analyzer.cpp:141
const QHash< QString, QHash< int, int > > & getManaCurveByPower() const
Definition deck_list_statistics_analyzer.h:97
QHash< QString, QHash< int, int > > manaCurveBySubtype
Definition deck_list_statistics_analyzer.h:160
const QHash< QString, int > & getDevotionPipCount() const
Definition deck_list_statistics_analyzer.h:46
QHash< QString, int > devotionCardCount
Definition deck_list_statistics_analyzer.h:148
DeckListStatisticsAnalyzer(QObject *parent, DeckListModel *model, DeckListStatisticsAnalyzerConfig _config=DeckListStatisticsAnalyzerConfig())
Definition deck_list_statistics_analyzer.cpp:10
const QHash< QString, int > & getTypeCount() const
Definition deck_list_statistics_analyzer.h:64
const QHash< QString, int > & getManaBase() const
Definition deck_list_statistics_analyzer.h:33
DeckListModel * model
Definition deck_list_statistics_analyzer.h:140
QHash< QString, QHash< int, QHash< int, double > > > probabilityExact
Definition deck_list_statistics_analyzer.h:172
const QHash< QString, QHash< int, QStringList > > & getManaCurveCardsByType() const
Definition deck_list_statistics_analyzer.h:106
QHash< QString, QHash< int, QStringList > > manaCurveCardsByColor
Definition deck_list_statistics_analyzer.h:167
const QHash< QString, int > & getProductionCardCount() const
Definition deck_list_statistics_analyzer.h:59
QHash< QString, QHash< int, QHash< int, double > > > probabilityAtLeast
Definition deck_list_statistics_analyzer.h:173
QHash< QString, QHash< int, int > > manaCurveByType
Definition deck_list_statistics_analyzer.h:159
QHash< QString, int > devotionPipCount
Definition deck_list_statistics_analyzer.h:147
const std::unordered_map< int, int > & getManaCurve() const
Definition deck_list_statistics_analyzer.h:37
QHash< QString, int > colorCount
Definition deck_list_statistics_analyzer.h:155
QHash< QString, QHash< int, QStringList > > manaCurveCardsByType
Definition deck_list_statistics_analyzer.h:165
const std::unordered_map< char, int > & getDevotion() const
Definition deck_list_statistics_analyzer.h:41
const QHash< QString, int > & getRarityCount() const
Definition deck_list_statistics_analyzer.h:76
QHash< QString, int > manaBaseMap
Definition deck_list_statistics_analyzer.h:143
QHash< QString, int > typeCount
Definition deck_list_statistics_analyzer.h:153
const QHash< QString, QHash< int, int > > & getManaCurveByToughness() const
Definition deck_list_statistics_analyzer.h:101
QHash< QString, QHash< int, QStringList > > manaCurveCardsBySubtype
Definition deck_list_statistics_analyzer.h:166
const QHash< QString, int > & getColorCount() const
Definition deck_list_statistics_analyzer.h:72
QHash< QString, QHash< int, QStringList > > manaCurveCardsByPower
Definition deck_list_statistics_analyzer.h:168
QHash< QString, QHash< int, QStringList > > manaCurveCardsByToughness
Definition deck_list_statistics_analyzer.h:169
const QHash< QString, QHash< int, int > > & getManaCurveByColor() const
Definition deck_list_statistics_analyzer.h:93
const QHash< int, int > & getManaValueCount() const
Definition deck_list_statistics_analyzer.h:80
QHash< QString, int > productionCardCount
Definition deck_list_statistics_analyzer.h:151
const QHash< QString, int > & getDevotionCardCount() const
Definition deck_list_statistics_analyzer.h:50
QHash< QString, QHash< int, int > > manaCurveByToughness
Definition deck_list_statistics_analyzer.h:163
const QHash< QString, QHash< int, QStringList > > & getManaCurveCardsByToughness() const
Definition deck_list_statistics_analyzer.h:126
DeckListStatisticsAnalyzerConfig config
Definition deck_list_statistics_analyzer.h:141
QHash< QString, int > productionPipCount
Definition deck_list_statistics_analyzer.h:150
QHash< QString, QHash< int, int > > manaCurveByColor
Definition deck_list_statistics_analyzer.h:161
void analyze()
Definition deck_list_statistics_analyzer.cpp:18
void clearData()
Definition deck_list_statistics_analyzer.cpp:203
QHash< QString, int > subtypeCount
Definition deck_list_statistics_analyzer.h:154
const QHash< QString, QHash< int, QStringList > > & getManaCurveCardsByColor() const
Definition deck_list_statistics_analyzer.h:116
const QHash< QString, int > & getProductionPipCount() const
Definition deck_list_statistics_analyzer.h:55
Definition deck_list_statistics_analyzer.h:13
bool computeCategories
Definition deck_list_statistics_analyzer.h:17
bool computeManaCurve
Definition deck_list_statistics_analyzer.h:15
bool computeProbabilities
Definition deck_list_statistics_analyzer.h:19
bool computeCurveBreakdowns
Definition deck_list_statistics_analyzer.h:18
bool computeManaBase
Definition deck_list_statistics_analyzer.h:14
bool computeDevotion
Definition deck_list_statistics_analyzer.h:16