elo-ratings 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +23 -0
  6. data/Rakefile +54 -0
  7. data/VERSION +1 -0
  8. data/elo-ratings.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/extconf.rb +6 -0
  63. data/ext/bayeselo/list.h +367 -0
  64. data/ext/bayeselo/listi.h +125 -0
  65. data/ext/bayeselo/move.cpp +249 -0
  66. data/ext/bayeselo/move.h +139 -0
  67. data/ext/bayeselo/pgn.h +62 -0
  68. data/ext/bayeselo/pgnlex.cpp +432 -0
  69. data/ext/bayeselo/pgnlex.h +105 -0
  70. data/ext/bayeselo/pgnstr.cpp +126 -0
  71. data/ext/bayeselo/piece.h +44 -0
  72. data/ext/bayeselo/player.h +31 -0
  73. data/ext/bayeselo/position.h +89 -0
  74. data/ext/bayeselo/random.cpp +114 -0
  75. data/ext/bayeselo/random.h +63 -0
  76. data/ext/bayeselo/rb_bayeselo.cpp +76 -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/bayeselo.rb +6 -0
  86. data/lib/bayeselo/bayeselo.rb +11 -0
  87. data/lib/bayeselo/c_bayeselo.rb +7 -0
  88. data/test/bayeselo/test_bayeselo.rb +33 -0
  89. data/test/bayeselo/test_c_bayeselo.rb +84 -0
  90. data/test/helper.rb +18 -0
  91. metadata +226 -0
@@ -0,0 +1,126 @@
1
+ ////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // pgnstr.cpp
4
+ //
5
+ // PGN input/output functions
6
+ //
7
+ // Remi Coulom
8
+ //
9
+ // August, 1996
10
+ //
11
+ ////////////////////////////////////////////////////////////////////////////
12
+ #include <iostream>
13
+ #include <sstream>
14
+ #include <cstring>
15
+
16
+ #include "pgn.h"
17
+ #include "str.h" // CSTR
18
+ #include "date.h" // CDate
19
+ #include "player.h" // CPlayer
20
+ #include "pgnlex.h" // CPGNLex
21
+
22
+ //
23
+ // Tag identifiers
24
+ //
25
+ const char * const CPGN::tszTag[] =
26
+ {
27
+ "Event",
28
+ "Site",
29
+ "Date",
30
+ "Round",
31
+ "White",
32
+ "Black",
33
+ "Result",
34
+ "SetUp",
35
+ "FEN"
36
+ };
37
+
38
+ //
39
+ // Result strings (CSTR for the enumeration)
40
+ //
41
+ const char * const CPGN::tszResult[] = {"0-1", "1/2-1/2", "1-0", "*"};
42
+
43
+ ////////////////////////////////////////////////////////////////////////////
44
+ // WriteString
45
+ ////////////////////////////////////////////////////////////////////////////
46
+ static void WriteString(const char *psz, std::ostream &ostr)
47
+ {
48
+ ostr << '"';
49
+ for(; *psz; psz++)
50
+ if (*psz == '"' || *psz == '\\')
51
+ ostr << '\\' << *psz;
52
+ else
53
+ ostr << *psz;
54
+ ostr << '"';
55
+ }
56
+
57
+ ////////////////////////////////////////////////////////////////////////////
58
+ // WriteTag
59
+ ////////////////////////////////////////////////////////////////////////////
60
+ void CPGN::WriteTag(int Tag, const char *psz, std::ostream &ostr)
61
+ {
62
+ ostr << '[' << tszTag[Tag] << ' ';
63
+ WriteString(psz, ostr);
64
+ ostr << "]\n";
65
+ }
66
+
67
+ ////////////////////////////////////////////////////////////////////////////
68
+ // ReadTAG
69
+ ////////////////////////////////////////////////////////////////////////////
70
+ static int ReadTAG(CPGNLex &pgnlex)
71
+ {
72
+ int i;
73
+
74
+ if (pgnlex.WaitForToken(CPGNLex::TOK_Symbol))
75
+ return CPGN::TAGs;
76
+
77
+ for (i = CPGN::TAGs; --i >= 0;)
78
+ if (!strcmp(pgnlex.TokenString(), CPGN::tszTag[i]))
79
+ break;
80
+
81
+ if (pgnlex.WaitForToken(CPGNLex::TOK_TagClose))
82
+ return CPGN::TAGs;
83
+
84
+ return i;
85
+ }
86
+
87
+ ////////////////////////////////////////////////////////////////////////////
88
+ // ReadSTR
89
+ ////////////////////////////////////////////////////////////////////////////
90
+ int CPGN::ReadSTR(CSTR &str, CPGNLex &pgnlex)
91
+ {
92
+ if (pgnlex.WaitForToken(CPGNLex::TOK_TagOpen))
93
+ return 1;
94
+
95
+ int TAGS = 0;
96
+ do
97
+ {
98
+ TAGS++;
99
+ switch (ReadTAG(pgnlex))
100
+ {
101
+ case TAG_Event: str.SetEvent(pgnlex.TokenString()); break;
102
+ case TAG_Site: str.SetSite(pgnlex.TokenString()); break;
103
+ case TAG_Date: str.SetDate(pgnlex.TokenString()); break;
104
+ case TAG_Round: str.SetRound(pgnlex.TokenString()); break;
105
+ case TAG_White: str.SetWhite(pgnlex.TokenString()); break;
106
+ case TAG_Black: str.SetBlack(pgnlex.TokenString()); break;
107
+ case TAG_Result:
108
+ {
109
+ int j;
110
+
111
+ for (j = CSTR::Results; --j >= 0;)
112
+ if (!strcmp(pgnlex.TokenString(), tszResult[j]))
113
+ break;
114
+
115
+ if (j >= 0)
116
+ str.SetResult(j);
117
+ }
118
+ break;
119
+ default:
120
+ TAGS--;
121
+ }
122
+ }
123
+ while (pgnlex.ReadNextToken() == CPGNLex::TOK_TagOpen && TAGS < 7);
124
+
125
+ return 0;
126
+ }
@@ -0,0 +1,44 @@
1
+ ////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // piece.h
4
+ //
5
+ // CPiece class definition
6
+ //
7
+ // Remi Coulom
8
+ //
9
+ // june 1996
10
+ //
11
+ ////////////////////////////////////////////////////////////////////////////
12
+ #ifndef PIECE_H
13
+ #define PIECE_H
14
+
15
+ class CPiece // piece
16
+ {
17
+ private: //////////////////////////////////////////////////////////////////
18
+ int piece;
19
+ static char tcPiece[];
20
+
21
+ public: ///////////////////////////////////////////////////////////////////
22
+ enum
23
+ {
24
+ King = 0x00,
25
+ Queen = 0x01,
26
+ Rook = 0x02,
27
+ Bishop = 0x04,
28
+ Knight = 0x06,
29
+ Pawn = 0x08,
30
+ Black = 0x10,
31
+ Undef = 0x20,
32
+ Empty = 0xff
33
+ };
34
+
35
+ CPiece(int pieceValue) {piece = pieceValue;};
36
+ CPiece(const char *pcPiece);
37
+
38
+ operator int() const {return piece;};
39
+ int GetNature() const {return piece & 0x0f;};
40
+ int GetColor() const {return (piece & 0x30) >> 4;};
41
+ char GetChar() const;
42
+ };
43
+
44
+ #endif
@@ -0,0 +1,31 @@
1
+ ////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // player.h
4
+ //
5
+ // CPlayer class definition
6
+ //
7
+ // Remi Coulom
8
+ //
9
+ // june 1996
10
+ //
11
+ ////////////////////////////////////////////////////////////////////////////
12
+ #ifndef PLAYER_H
13
+ #define PLAYER_H
14
+
15
+ class CPlayer // player
16
+ {
17
+ private: //////////////////////////////////////////////////////////////////
18
+ int player;
19
+
20
+ public: ///////////////////////////////////////////////////////////////////
21
+ enum
22
+ {
23
+ White = 0,
24
+ Black = 1
25
+ };
26
+
27
+ CPlayer(int i) {player = i;}
28
+ int Opponent() const {return player ^ Black;}
29
+ };
30
+
31
+ #endif
@@ -0,0 +1,89 @@
1
+ ////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // position.h
4
+ //
5
+ // CPosition class definition
6
+ //
7
+ // Remi Coulom
8
+ //
9
+ // june 1996
10
+ //
11
+ ////////////////////////////////////////////////////////////////////////////
12
+ #ifndef POSITION_H
13
+ #define POSITION_H
14
+
15
+ class CMove;
16
+ class CHashCodeComputer;
17
+
18
+ class CPosition // pos
19
+ {
20
+ private: //////////////////////////////////////////////////////////////////
21
+ static CHashCodeComputer hcc;
22
+
23
+ unsigned char tpiece[64];
24
+ unsigned char player;
25
+ char fBlackOO;
26
+ char fWhiteOO;
27
+ char fBlackOOO;
28
+ char fWhiteOOO;
29
+ unsigned char sqEnPassant;
30
+ int nhmReversible;
31
+ int nm;
32
+
33
+ int IsAttackedDir(int sqFrom, int piece1, int piece2, int DirFlag) const;
34
+
35
+ public: ///////////////////////////////////////////////////////////////////
36
+ //
37
+ // Default constructor to prevent uninitialized data
38
+ //
39
+ CPosition();
40
+
41
+ //
42
+ // Test for equality
43
+ //
44
+ int operator==(const CPosition &pos) const;
45
+ int operator!=(const CPosition &pos) const {return !operator==(pos);}
46
+
47
+ //
48
+ // Gets
49
+ //
50
+ int GetPiece(int sq) const {return tpiece[sq];}
51
+ int GetPlayer() const {return player;}
52
+ int GetOpponent() const {return player ^ 1;}
53
+ int GetBlackOO() const {return fBlackOO;}
54
+ int GetWhiteOO() const {return fWhiteOO;}
55
+ int GetBlackOOO() const {return fBlackOOO;}
56
+ int GetWhiteOOO() const {return fWhiteOOO;}
57
+ int GetEnPassant() const {return sqEnPassant;}
58
+ int GetReversible() const {return nhmReversible;}
59
+ int GetMoves() const {return nm;}
60
+
61
+ int IsAttacked(int sq, int player) const;
62
+ int Check() const;
63
+ int IsLegal() const;
64
+ void Symmetrical(CPosition &pos) const;
65
+
66
+ //
67
+ // Sets
68
+ //
69
+ void SetPiece(int sq, int piece) {tpiece[sq] = piece;}
70
+ void SetPlayer(int playerNew) {player = playerNew;}
71
+ void SetBlackOO(int f) {fBlackOO = f;}
72
+ void SetWhiteOO(int f) {fWhiteOO = f;}
73
+ void SetBlackOOO(int f) {fBlackOOO = f;}
74
+ void SetWhiteOOO(int f) {fWhiteOOO = f;}
75
+ void SetEnPassant(int sq) {sqEnPassant = sq;}
76
+ void SetReversible(int nhm) {nhmReversible = nhm;}
77
+ void SetMoves(int nmNew) {nm = nmNew;}
78
+
79
+ void Reset();
80
+ void Clear();
81
+ void PlayMove(CMove move);
82
+
83
+ //
84
+ // Access to the hashcode computer
85
+ //
86
+ static const CHashCodeComputer &GetHashCodeComputer() {return hcc;}
87
+ };
88
+
89
+ #endif
@@ -0,0 +1,114 @@
1
+ // ////////////////////////////////////////////////////////////////////////////
2
+ // //
3
+ // // random.cpp
4
+ // //
5
+ // // CRandom class
6
+ // //
7
+ // // Remi Coulom
8
+ // //
9
+ // // August 1996
10
+ // //
11
+ // ////////////////////////////////////////////////////////////////////////////
12
+ // #include <cmath>
13
+ //
14
+ // ////////////////////////////////////////////////////////////////////////////
15
+ // // New seed
16
+ // ////////////////////////////////////////////////////////////////////////////
17
+ // template<class TYPE>
18
+ // void CRandom<TYPE>::Seed(TYPE ulSeed)
19
+ // {
20
+ // Index1 = 23;
21
+ // Index2 = 54;
22
+ // fNextGaussian = 0;
23
+ //
24
+ // //
25
+ // // The array is initialized with random values
26
+ // //
27
+ // {
28
+ // for (int i = 55; --i >= 0;)
29
+ // tulArray[i] = ulSeed = (ulSeed * 7) + 123456789L;
30
+ // }
31
+ //
32
+ // //
33
+ // // These are scrambled a little
34
+ // //
35
+ // {
36
+ // for (int i = 200; --i >= 0;)
37
+ // NewValue();
38
+ // }
39
+ // }
40
+ //
41
+ // ////////////////////////////////////////////////////////////////////////////
42
+ // // Next double (??? very bad)
43
+ // ////////////////////////////////////////////////////////////////////////////
44
+ // template<class TYPE>
45
+ // double CRandom<TYPE>::NextDouble()
46
+ // {
47
+ // return double(NewValue() & 0x7fffffff) / double(1U << 31);
48
+ // }
49
+ //
50
+ // ////////////////////////////////////////////////////////////////////////////
51
+ // // Next N(0,1)
52
+ // ////////////////////////////////////////////////////////////////////////////
53
+ // template<class TYPE>
54
+ // double CRandom<TYPE>::NextGaussian()
55
+ // {
56
+ // if (fNextGaussian)
57
+ // {
58
+ // fNextGaussian = 0;
59
+ // return NextGaussianValue;
60
+ // }
61
+ // else
62
+ // {
63
+ // fNextGaussian = 1;
64
+ // double x, y, n2;
65
+ // do
66
+ // {
67
+ // x = 2 * NextDouble() - 1;
68
+ // y = 2 * NextDouble() - 1;
69
+ // n2 = x * x + y * y;
70
+ // }
71
+ // while (n2 >= 1 || n2 == 0);
72
+ // double m = std::sqrt(-2 * std::log(n2) / n2);
73
+ // NextGaussianValue = y * m;
74
+ // return x * m;
75
+ // }
76
+ // }
77
+ //
78
+ // ////////////////////////////////////////////////////////////////////////////
79
+ // // Exponential law
80
+ // ////////////////////////////////////////////////////////////////////////////
81
+ // template<class TYPE>
82
+ // double CRandom<TYPE>::NextExponential()
83
+ // {
84
+ // double x;
85
+ // do
86
+ // x = NextDouble();
87
+ // while (x == 0);
88
+ // return -std::log(x);
89
+ // }
90
+ //
91
+ // ////////////////////////////////////////////////////////////////////////////
92
+ // // Binary I/O
93
+ // ////////////////////////////////////////////////////////////////////////////
94
+ // #include <iostream>
95
+ //
96
+ // template<class TYPE>
97
+ // void CRandom<TYPE>::BinaryWrite(std::ostream &out) const
98
+ // {
99
+ // out.write((const char *)&Index1, sizeof(Index1));
100
+ // out.write((const char *)&Index2, sizeof(Index2));
101
+ // out.write((const char *)tulArray, sizeof(tulArray));
102
+ // out.write((const char *)&fNextGaussian, sizeof(fNextGaussian));
103
+ // out.write((const char *)&NextGaussianValue, sizeof(NextGaussianValue));
104
+ // }
105
+ //
106
+ // template<class TYPE>
107
+ // void CRandom<TYPE>::BinaryRead(std::istream &in)
108
+ // {
109
+ // in.read((char *)&Index1, sizeof(Index1));
110
+ // in.read((char *)&Index2, sizeof(Index2));
111
+ // in.read((char *)tulArray, sizeof(tulArray));
112
+ // in.read((char *)&fNextGaussian, sizeof(fNextGaussian));
113
+ // in.read((char *)&NextGaussianValue, sizeof(NextGaussianValue));
114
+ // }
@@ -0,0 +1,63 @@
1
+ ////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // random.h
4
+ //
5
+ // CRandom class declaration
6
+ // (Algorithm from "The Art Of Computer Programming")
7
+ //
8
+ // Remi Coulom
9
+ //
10
+ // August 1996
11
+ //
12
+ ////////////////////////////////////////////////////////////////////////////
13
+ #ifndef RANDOM_H
14
+ #define RANDOM_H
15
+
16
+ #include <iosfwd>
17
+
18
+ template<class TYPE>
19
+ class CRandom // rnd
20
+ {
21
+ private: //////////////////////////////////////////////////////////////////
22
+ int Index1;
23
+ int Index2;
24
+ TYPE tulArray[55];
25
+
26
+ int fNextGaussian;
27
+ double NextGaussianValue;
28
+
29
+ public: ///////////////////////////////////////////////////////////////////
30
+ CRandom(TYPE n = 0) : fNextGaussian(0) {Seed(n);}
31
+
32
+ //
33
+ // Seed
34
+ //
35
+ void Seed(TYPE ulSeed);
36
+
37
+ //
38
+ // Random number generation
39
+ //
40
+ TYPE NewValue()
41
+ {
42
+ if (--Index1 < 0)
43
+ Index1 = 54;
44
+
45
+ if (--Index2 < 0)
46
+ Index2 = 54;
47
+
48
+ return tulArray[Index2] += tulArray[Index1];
49
+ }
50
+ double NextDouble();
51
+ double NextGaussian();
52
+ double NextExponential();
53
+
54
+ //
55
+ // Binary I/O
56
+ //
57
+ void BinaryWrite(std::ostream &out) const;
58
+ void BinaryRead(std::istream &in);
59
+ };
60
+
61
+ #include "random.cpp"
62
+
63
+ #endif