all-up-in-your-elo 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. data/.document +5 -0
  2. data/Gemfile +14 -0
  3. data/Gemfile.lock +22 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.rdoc +42 -0
  6. data/Rakefile +54 -0
  7. data/VERSION +1 -0
  8. data/all-up-in-your-elo.gemspec +148 -0
  9. data/ext/bayeselo/.gitignore +4 -0
  10. data/ext/bayeselo/CBradleyTerry.cpp +670 -0
  11. data/ext/bayeselo/CBradleyTerry.h +137 -0
  12. data/ext/bayeselo/CCDistribution.cpp +135 -0
  13. data/ext/bayeselo/CCDistribution.h +44 -0
  14. data/ext/bayeselo/CCDistributionCUI.cpp +104 -0
  15. data/ext/bayeselo/CCDistributionCUI.h +38 -0
  16. data/ext/bayeselo/CCondensedResults.cpp +253 -0
  17. data/ext/bayeselo/CCondensedResults.h +64 -0
  18. data/ext/bayeselo/CDiscretization.h +40 -0
  19. data/ext/bayeselo/CDistribution.cpp +123 -0
  20. data/ext/bayeselo/CDistribution.h +58 -0
  21. data/ext/bayeselo/CDistributionCollection.cpp +34 -0
  22. data/ext/bayeselo/CDistributionCollection.h +29 -0
  23. data/ext/bayeselo/CEloRatingCUI.cpp +1046 -0
  24. data/ext/bayeselo/CEloRatingCUI.h +67 -0
  25. data/ext/bayeselo/CIndirectCompare.h +28 -0
  26. data/ext/bayeselo/CJointBayesian.cpp +111 -0
  27. data/ext/bayeselo/CJointBayesian.h +38 -0
  28. data/ext/bayeselo/CLUDecomposition.cpp +154 -0
  29. data/ext/bayeselo/CLUDecomposition.h +36 -0
  30. data/ext/bayeselo/CMatrix.cpp +48 -0
  31. data/ext/bayeselo/CMatrix.h +35 -0
  32. data/ext/bayeselo/CMatrixIO.cpp +27 -0
  33. data/ext/bayeselo/CMatrixIO.h +17 -0
  34. data/ext/bayeselo/CPredictionCUI.cpp +393 -0
  35. data/ext/bayeselo/CPredictionCUI.h +50 -0
  36. data/ext/bayeselo/CResultSet.cpp +245 -0
  37. data/ext/bayeselo/CResultSet.h +50 -0
  38. data/ext/bayeselo/CResultSetCUI.cpp +355 -0
  39. data/ext/bayeselo/CResultSetCUI.h +44 -0
  40. data/ext/bayeselo/CTimeIO.cpp +58 -0
  41. data/ext/bayeselo/CTimeIO.h +19 -0
  42. data/ext/bayeselo/CVector.cpp +110 -0
  43. data/ext/bayeselo/CVector.h +42 -0
  44. data/ext/bayeselo/EloDataFromFile.cpp +120 -0
  45. data/ext/bayeselo/EloDataFromFile.h +21 -0
  46. data/ext/bayeselo/README +8 -0
  47. data/ext/bayeselo/ReadLineToString.cpp +32 -0
  48. data/ext/bayeselo/ReadLineToString.h +18 -0
  49. data/ext/bayeselo/chtime.cpp +56 -0
  50. data/ext/bayeselo/chtime.h +61 -0
  51. data/ext/bayeselo/chtimer.h +27 -0
  52. data/ext/bayeselo/clktimer.cpp +178 -0
  53. data/ext/bayeselo/clktimer.h +29 -0
  54. data/ext/bayeselo/consolui.cpp +538 -0
  55. data/ext/bayeselo/consolui.h +154 -0
  56. data/ext/bayeselo/const.cpp +79 -0
  57. data/ext/bayeselo/const.h +42 -0
  58. data/ext/bayeselo/date.cpp +96 -0
  59. data/ext/bayeselo/date.h +44 -0
  60. data/ext/bayeselo/debug.h +58 -0
  61. data/ext/bayeselo/elomain.cpp +26 -0
  62. data/ext/bayeselo/eloratings.cpp +76 -0
  63. data/ext/bayeselo/extconf.rb +6 -0
  64. data/ext/bayeselo/list.h +367 -0
  65. data/ext/bayeselo/listi.h +125 -0
  66. data/ext/bayeselo/move.cpp +249 -0
  67. data/ext/bayeselo/move.h +139 -0
  68. data/ext/bayeselo/pgn.h +62 -0
  69. data/ext/bayeselo/pgnlex.cpp +432 -0
  70. data/ext/bayeselo/pgnlex.h +105 -0
  71. data/ext/bayeselo/pgnstr.cpp +126 -0
  72. data/ext/bayeselo/piece.h +44 -0
  73. data/ext/bayeselo/player.h +31 -0
  74. data/ext/bayeselo/position.h +89 -0
  75. data/ext/bayeselo/random.cpp +114 -0
  76. data/ext/bayeselo/random.h +63 -0
  77. data/ext/bayeselo/readstr.cpp +51 -0
  78. data/ext/bayeselo/readstr.h +19 -0
  79. data/ext/bayeselo/square.h +61 -0
  80. data/ext/bayeselo/str.cpp +81 -0
  81. data/ext/bayeselo/str.h +71 -0
  82. data/ext/bayeselo/version.cpp +30 -0
  83. data/ext/bayeselo/version.h +28 -0
  84. data/ext/bayeselo/version_number.h +1 -0
  85. data/lib/elo_ratings.rb +9 -0
  86. data/lib/elo_ratings/c_bayeselo.rb +5 -0
  87. data/lib/elo_ratings/results.rb +41 -0
  88. data/test/elo_ratings/test_c_bayeselo.rb +84 -0
  89. data/test/elo_ratings/test_results.rb +41 -0
  90. data/test/helper.rb +19 -0
  91. metadata +233 -0
@@ -0,0 +1,44 @@
1
+ ////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // CResultSetCUI.h
4
+ //
5
+ // Remi Coulom
6
+ //
7
+ // December, 2004
8
+ //
9
+ ////////////////////////////////////////////////////////////////////////////
10
+ #ifndef CResultSetCUI_Declared
11
+ #define CResultSetCUI_Declared
12
+
13
+ #include "consolui.h" // CConsoleUI
14
+
15
+ #include <vector>
16
+
17
+ class CResultSet;
18
+
19
+ class CResultSetCUI : public CConsoleUI // rscui
20
+ {
21
+ private: //////////////////////////////////////////////////////////////////
22
+ static const char * const tszCommands[];
23
+
24
+ CResultSet &rs;
25
+ std::vector<std::string> &vecName;
26
+
27
+ unsigned ComputePlayerWidth() const;
28
+
29
+ protected: ////////////////////////////////////////////////////////////////
30
+ virtual int ProcessCommand(const char *pszCommand,
31
+ const char *pszParameters,
32
+ std::istream &in,
33
+ std::ostream &out);
34
+
35
+ virtual void PrintLocalPrompt(std::ostream &out);
36
+
37
+ public: ///////////////////////////////////////////////////////////////////
38
+ CResultSetCUI(CResultSet &rsInit,
39
+ std::vector<std::string> &vecNameInit,
40
+ CConsoleUI *pcui = 0,
41
+ int openmode = OpenModal);
42
+ };
43
+
44
+ #endif
@@ -0,0 +1,58 @@
1
+ ////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // CTimeIO.cpp
4
+ //
5
+ // Remi Coulom
6
+ //
7
+ // August 1996
8
+ //
9
+ ////////////////////////////////////////////////////////////////////////////
10
+ #include "CTimeIO.h"
11
+ #include "chtime.h"
12
+
13
+ #include <iostream>
14
+ #include <iomanip>
15
+ #include <sstream>
16
+
17
+ ////////////////////////////////////////////////////////////////////////////
18
+ // output operator
19
+ ////////////////////////////////////////////////////////////////////////////
20
+ std::ostream &operator<<(std::ostream &ostr, const CTime &time)
21
+ {
22
+ char cOldFill = ostr.fill('0');
23
+ int OldWidth = ostr.width(2);
24
+
25
+ ostr << std::setw(2) << time.GetHours() << ':';
26
+ ostr << std::setw(2) << time.GetMinutes() << ':';
27
+ ostr << std::setw(2) << time.GetSeconds() << ',';
28
+ ostr << std::setw(2) << time.GetHundredths();
29
+
30
+ ostr.width(OldWidth);
31
+ ostr.fill(cOldFill);
32
+
33
+ return ostr;
34
+ }
35
+
36
+ ////////////////////////////////////////////////////////////////////////////
37
+ // input operator
38
+ ////////////////////////////////////////////////////////////////////////////
39
+ std::istream &operator>>(std::istream &istr, CTime &time)
40
+ {
41
+ char szBuffer[12];
42
+
43
+ {
44
+ int i = 0;
45
+ for (; i < (int)sizeof(szBuffer) - 1; i++)
46
+ {
47
+ int c = istr.peek();
48
+ if (c == ' ' || c == '\n' || istr.eof())
49
+ break;
50
+ szBuffer[i] = c;
51
+ istr.ignore();
52
+ }
53
+ szBuffer[i] = 0;
54
+ }
55
+
56
+ time.Set(szBuffer);
57
+ return istr;
58
+ }
@@ -0,0 +1,19 @@
1
+ ////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // CTimeIO.h
4
+ //
5
+ // Remi Coulom
6
+ //
7
+ // August, 1996
8
+ //
9
+ ////////////////////////////////////////////////////////////////////////////
10
+ #ifndef CTimeIO_Declared
11
+ #define CTimeIO_Declared
12
+
13
+ #include <iosfwd>
14
+ class CTime;
15
+
16
+ std::ostream &operator<<(std::ostream &ostr, const CTime &time);
17
+ std::istream &operator>>(std::istream &istr, CTime &time);
18
+
19
+ #endif
@@ -0,0 +1,110 @@
1
+ ////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // CVector.cpp
4
+ //
5
+ // Remi Coulom
6
+ //
7
+ // September, 2000
8
+ //
9
+ ////////////////////////////////////////////////////////////////////////////
10
+ #include "CVector.h"
11
+
12
+ ////////////////////////////////////////////////////////////////////////////
13
+ // Constructor
14
+ ////////////////////////////////////////////////////////////////////////////
15
+ CVector::CVector(int SizeInit) :
16
+ Size(0)
17
+ {
18
+ SetSize(SizeInit);
19
+ }
20
+
21
+ ////////////////////////////////////////////////////////////////////////////
22
+ // Set Size
23
+ ////////////////////////////////////////////////////////////////////////////
24
+ void CVector::SetSize(int NewSize)
25
+ {
26
+ if (Size)
27
+ {
28
+ delete[] pd;
29
+ Size = 0;
30
+ }
31
+ if (NewSize > 0)
32
+ pd = new double[Size = NewSize];
33
+ }
34
+
35
+ ////////////////////////////////////////////////////////////////////////////
36
+ // Assignment operator
37
+ ////////////////////////////////////////////////////////////////////////////
38
+ CVector &CVector::operator=(const CVector &v)
39
+ {
40
+ if (&v != this)
41
+ {
42
+ if (Size != v.GetSize())
43
+ SetSize(v.GetSize());
44
+ for (int i = Size; --i >= 0;)
45
+ pd[i] = v[i];
46
+ }
47
+ return *this;
48
+ }
49
+
50
+ ////////////////////////////////////////////////////////////////////////////
51
+ // Copy constructor
52
+ ////////////////////////////////////////////////////////////////////////////
53
+ CVector::CVector(const CVector &v) :
54
+ Size(0)
55
+ {
56
+ *this = v;
57
+ }
58
+
59
+ ////////////////////////////////////////////////////////////////////////////
60
+ // Zero
61
+ ////////////////////////////////////////////////////////////////////////////
62
+ void CVector::Zero()
63
+ {
64
+ for (int i = Size; --i >= 0;)
65
+ pd[i] = 0;
66
+ }
67
+
68
+ ////////////////////////////////////////////////////////////////////////////
69
+ // Scale
70
+ ////////////////////////////////////////////////////////////////////////////
71
+ void CVector::Scale(double x)
72
+ {
73
+ for (int i = Size; --i >= 0;)
74
+ pd[i] *= x;
75
+ }
76
+
77
+ ////////////////////////////////////////////////////////////////////////////
78
+ // Add
79
+ ////////////////////////////////////////////////////////////////////////////
80
+ void CVector::Add(const double *pdp)
81
+ {
82
+ for (int i = Size; --i >= 0;)
83
+ pd[i] += pdp[i];
84
+ }
85
+
86
+ ////////////////////////////////////////////////////////////////////////////
87
+ // Add scaled
88
+ ////////////////////////////////////////////////////////////////////////////
89
+ void CVector::AddScaled(const double *pdp, double x)
90
+ {
91
+ for (int i = Size; --i >= 0;)
92
+ pd[i] += x * pdp[i];
93
+ }
94
+
95
+ ////////////////////////////////////////////////////////////////////////////
96
+ // Set from a pointer
97
+ ////////////////////////////////////////////////////////////////////////////
98
+ void CVector::Set(const double *px)
99
+ {
100
+ for (int i = Size; --i >= 0;)
101
+ pd[i] = px[i];
102
+ }
103
+
104
+ ////////////////////////////////////////////////////////////////////////////
105
+ // Destructor
106
+ ////////////////////////////////////////////////////////////////////////////
107
+ CVector::~CVector()
108
+ {
109
+ SetSize(0);
110
+ }
@@ -0,0 +1,42 @@
1
+ ////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // CVector.h
4
+ //
5
+ // Remi Coulom
6
+ //
7
+ // September, 2000
8
+ //
9
+ ////////////////////////////////////////////////////////////////////////////
10
+ #ifndef Math_CVector_Declared
11
+ #define Math_CVector_Declared
12
+
13
+ class CVector // v
14
+ {
15
+ private: /////////////////////////////////////////////////////////////////
16
+ double *pd;
17
+ int Size;
18
+
19
+ public: //////////////////////////////////////////////////////////////////
20
+ CVector(int SizeInit = 0);
21
+ CVector(const CVector &v);
22
+ CVector &operator=(const CVector &v);
23
+
24
+ int GetSize() const {return Size;}
25
+ void SetSize(int NewSize);
26
+
27
+ operator double * () {return pd;}
28
+ operator const double * () const {return pd;}
29
+
30
+ double operator[](int i) const {return pd[i];}
31
+ double &operator[](int i) {return pd[i];}
32
+
33
+ void Zero();
34
+ void Scale(double x);
35
+ void Add(const double *pdp);
36
+ void AddScaled(const double *pdp, double x);
37
+ void Set(const double *px);
38
+
39
+ ~CVector();
40
+ };
41
+
42
+ #endif
@@ -0,0 +1,120 @@
1
+ /////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // R�mi Coulom
4
+ //
5
+ // December, 2004
6
+ //
7
+ /////////////////////////////////////////////////////////////////////////////
8
+ #include "EloDataFromFile.h"
9
+ #include "pgnlex.h"
10
+ #include "pgn.h"
11
+ #include "str.h"
12
+ #include "CResultSet.h"
13
+
14
+ #include <map>
15
+ #include <string>
16
+ #include <iostream>
17
+
18
+ /////////////////////////////////////////////////////////////////////////////
19
+ // Skip a game
20
+ /////////////////////////////////////////////////////////////////////////////
21
+ static void SkipGame(CPGNLex &pgnlex)
22
+ {
23
+ int Token = pgnlex.GetToken();
24
+
25
+ while (Token != CPGNLex::TOK_EOF)
26
+ {
27
+ int TokenPrev = Token;
28
+ Token = pgnlex.ReadNextToken();
29
+
30
+ if (TokenPrev == CPGNLex::TOK_GameTermination ||
31
+ Token == CPGNLex::TOK_EOF ||
32
+ (TokenPrev != CPGNLex::TOK_TagClose &&
33
+ TokenPrev != CPGNLex::TOK_BOF &&
34
+ Token == CPGNLex::TOK_TagOpen))
35
+ return;
36
+ }
37
+
38
+ return;
39
+ }
40
+
41
+ /////////////////////////////////////////////////////////////////////////////
42
+ // Read all data for Elo calculation
43
+ /////////////////////////////////////////////////////////////////////////////
44
+ void EloDataFromFile(CPGNLex &pgnlex,
45
+ CResultSet &rs,
46
+ std::vector<std::string> &vNames)
47
+ {
48
+ int Players = 0;
49
+ int Ignored = 0;
50
+
51
+ //
52
+ // Add current players to the name map
53
+ //
54
+ std::map<std::string, int> NameMap;
55
+ for (int i = vNames.size(); --i >= 0;)
56
+ {
57
+ std::pair<const std::string, int> Pair(vNames[i], i);
58
+ NameMap.insert(Pair);
59
+ Players++;
60
+ }
61
+
62
+ //
63
+ // Loop over games
64
+ //
65
+ while (1)
66
+ {
67
+ CSTR str;
68
+ int fTheEnd = CPGN::ReadSTR(str, pgnlex);
69
+ SkipGame(pgnlex);
70
+
71
+ if (!fTheEnd)
72
+ {
73
+ //
74
+ // Ignore unknown results
75
+ //
76
+ int r = str.GetResult();
77
+ if (r < 0 || r > 2)
78
+ Ignored++;
79
+ else
80
+ {
81
+ std::string sWhite(str.GetWhite());
82
+ std::string sBlack(str.GetBlack());
83
+
84
+ {
85
+ std::pair<const std::string, int> Pair(sWhite, Players);
86
+ if (NameMap.insert(Pair).second)
87
+ {
88
+ Players++;
89
+ vNames.push_back(sWhite);
90
+ }
91
+ }
92
+ {
93
+ std::pair<const std::string, int> Pair(sBlack, Players);
94
+ if (NameMap.insert(Pair).second)
95
+ {
96
+ Players++;
97
+ vNames.push_back(sBlack);
98
+ }
99
+ }
100
+
101
+ int WhitePlayer = NameMap.find(sWhite)->second;
102
+ int BlackPlayer = NameMap.find(sBlack)->second;
103
+
104
+ rs.Append(WhitePlayer, BlackPlayer, r);
105
+ }
106
+ }
107
+
108
+ if (rs.GetGames() % 1000 == 0 || fTheEnd)
109
+ {
110
+ std::cerr << rs.GetGames() << " game(s) loaded, ";
111
+ std::cerr << Ignored << " game(s) with unknown result ignored.\r";
112
+ }
113
+
114
+ if (fTheEnd)
115
+ {
116
+ std::cerr << '\n';
117
+ break;
118
+ }
119
+ }
120
+ }
@@ -0,0 +1,21 @@
1
+ /////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // R�mi Coulom
4
+ //
5
+ // December, 2004
6
+ //
7
+ /////////////////////////////////////////////////////////////////////////////
8
+ #ifndef EloDataFromFile_Declared
9
+ #define EloDataFromFile_Declared
10
+
11
+ #include <vector>
12
+ #include <string>
13
+
14
+ class CPGNLex;
15
+ class CResultSet;
16
+
17
+ void EloDataFromFile(CPGNLex &pgnlex,
18
+ CResultSet &rs,
19
+ std::vector<std::string> &vNames);
20
+
21
+ #endif
@@ -0,0 +1,8 @@
1
+ bayeselo
2
+ by Rémi Coulom
3
+ http://remi.coulom.free.fr/Bayesian-Elo/
4
+
5
+ To compile, "cd" into the BayesElo directory and "make".
6
+
7
+ This software is protected under the terms of the GNU GPL
8
+ See http://www.gnu.org/copyleft/gpl.html
@@ -0,0 +1,32 @@
1
+ /////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // ReadLineToString.cpp
4
+ //
5
+ // R�mi Coulom
6
+ //
7
+ // April, 2006
8
+ //
9
+ /////////////////////////////////////////////////////////////////////////////
10
+ #include "ReadLineToString.h"
11
+
12
+ #include <iostream>
13
+
14
+ /////////////////////////////////////////////////////////////////////////////
15
+ // Read a line to a string
16
+ /////////////////////////////////////////////////////////////////////////////
17
+ void ReadLineToString(std::string &s, std::istream &in)
18
+ {
19
+ s.clear();
20
+ while (1)
21
+ {
22
+ char c;
23
+ if (in.get(c))
24
+ {
25
+ if (c == '\n')
26
+ break;
27
+ s += c;
28
+ }
29
+ else
30
+ break;
31
+ }
32
+ }