chess 0.1.3 → 0.1.4

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 (107) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/README.md +44 -0
  4. data/Rakefile +6 -7
  5. data/chess.gemspec +1 -1
  6. data/ext/bitboard.c +24 -0
  7. data/ext/board.c +78 -24
  8. data/ext/board.h +4 -2
  9. data/ext/chess.c +216 -196
  10. data/ext/chess.h +1 -0
  11. data/ext/common.c +10 -0
  12. data/ext/game.c +33 -16
  13. data/ext/special.c +14 -11
  14. data/ext/special.h +1 -2
  15. data/lib/chess/exceptions.rb +7 -10
  16. data/lib/chess/game.rb +66 -50
  17. data/lib/chess/gnuchess.rb +19 -25
  18. data/lib/chess/pgn.rb +49 -9
  19. data/lib/chess/utf8_notation.rb +11 -9
  20. data/lib/chess/version.rb +1 -1
  21. data/test/pgn_collection/illegal/0001.pgn +18 -0
  22. data/test/pgn_collection/illegal/0002.pgn +17 -0
  23. data/test/pgn_collection/illegal/0003.pgn +13 -0
  24. data/test/pgn_collection/illegal/0004.pgn +15 -0
  25. data/test/pgn_collection/illegal/0005.pgn +16 -0
  26. data/test/pgn_collection/invalid/0001.pgn +20 -0
  27. data/test/pgn_collection/invalid/0002.pgn +16 -0
  28. data/test/pgn_collection/invalid/0003.pgn +13 -0
  29. data/test/pgn_collection/invalid/0004.pgn +15 -0
  30. data/test/pgn_collection/valid/0001.pgn +6 -7
  31. data/test/pgn_collection/valid/0002.pgn +8 -9
  32. data/test/pgn_collection/valid/0005.pgn +7 -8
  33. data/test/pgn_collection/valid/0009.pgn +14 -15
  34. data/test/pgn_collection/valid/0010.pgn +6 -7
  35. data/test/pgn_collection/valid/0011.pgn +5 -6
  36. data/test/pgn_collection/valid/0012.pgn +0 -1
  37. data/test/pgn_collection/valid/0013.pgn +5 -6
  38. data/test/pgn_collection/valid/0014.pgn +6 -7
  39. data/test/pgn_collection/valid/0020.pgn +6 -7
  40. data/test/pgn_collection/valid/0021.pgn +15 -16
  41. data/test/pgn_collection/valid/0971.pgn +22 -14
  42. data/test/test_big_pgn_collection.rb +12 -5
  43. data/test/test_helper.rb +1 -1
  44. data/test/test_illegal_moves.rb +14 -0
  45. data/test/test_insufficient_material.rb +13 -1
  46. data/test/test_particular_situations.rb +14 -0
  47. data/test/test_pgn.rb +24 -0
  48. data/test/test_pgn_collection.rb +1 -4
  49. metadata +30 -63
  50. data/README.rdoc +0 -44
  51. data/doc/Chess.html +0 -112
  52. data/doc/Chess/BadNotationError.html +0 -107
  53. data/doc/Chess/Board.html +0 -700
  54. data/doc/Chess/CGame.html +0 -1004
  55. data/doc/Chess/Game.html +0 -684
  56. data/doc/Chess/Gnuchess.html +0 -215
  57. data/doc/Chess/IllegalMoveError.html +0 -105
  58. data/doc/Chess/InvalidFenFormatError.html +0 -105
  59. data/doc/Chess/InvalidPgnFormatError.html +0 -105
  60. data/doc/Chess/Pgn.html +0 -309
  61. data/doc/Chess/UTF8Notation.html +0 -174
  62. data/doc/README_rdoc.html +0 -143
  63. data/doc/created.rid +0 -15
  64. data/doc/css/fonts.css +0 -167
  65. data/doc/css/rdoc.css +0 -590
  66. data/doc/fonts/Lato-Light.ttf +0 -0
  67. data/doc/fonts/Lato-LightItalic.ttf +0 -0
  68. data/doc/fonts/Lato-Regular.ttf +0 -0
  69. data/doc/fonts/Lato-RegularItalic.ttf +0 -0
  70. data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
  71. data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
  72. data/doc/images/add.png +0 -0
  73. data/doc/images/arrow_up.png +0 -0
  74. data/doc/images/brick.png +0 -0
  75. data/doc/images/brick_link.png +0 -0
  76. data/doc/images/bug.png +0 -0
  77. data/doc/images/bullet_black.png +0 -0
  78. data/doc/images/bullet_toggle_minus.png +0 -0
  79. data/doc/images/bullet_toggle_plus.png +0 -0
  80. data/doc/images/date.png +0 -0
  81. data/doc/images/delete.png +0 -0
  82. data/doc/images/find.png +0 -0
  83. data/doc/images/loadingAnimation.gif +0 -0
  84. data/doc/images/macFFBgHack.png +0 -0
  85. data/doc/images/package.png +0 -0
  86. data/doc/images/page_green.png +0 -0
  87. data/doc/images/page_white_text.png +0 -0
  88. data/doc/images/page_white_width.png +0 -0
  89. data/doc/images/plugin.png +0 -0
  90. data/doc/images/ruby.png +0 -0
  91. data/doc/images/tag_blue.png +0 -0
  92. data/doc/images/tag_green.png +0 -0
  93. data/doc/images/transparent.png +0 -0
  94. data/doc/images/wrench.png +0 -0
  95. data/doc/images/wrench_orange.png +0 -0
  96. data/doc/images/zoom.png +0 -0
  97. data/doc/index.html +0 -160
  98. data/doc/js/darkfish.js +0 -161
  99. data/doc/js/jquery.js +0 -4
  100. data/doc/js/navigation.js +0 -142
  101. data/doc/js/navigation.js.gz +0 -0
  102. data/doc/js/search.js +0 -109
  103. data/doc/js/search_index.js +0 -1
  104. data/doc/js/search_index.js.gz +0 -0
  105. data/doc/js/searcher.js +0 -229
  106. data/doc/js/searcher.js.gz +0 -0
  107. data/doc/table_of_contents.html +0 -331
@@ -1,17 +1,20 @@
1
+ require 'mkmf'
2
+
1
3
  module Chess
2
4
 
3
- # Use Gnuchess to I.A. <em>(Only a draft)</em>
4
- # To use this module, extend a game object with Chess::Gnuchess.
5
- # Gnuchess binary have to be installed.
5
+ # Use Gnuchess to I.A. _(Only a draft)_.
6
6
  #
7
- # g = Chess::Game.new
8
- # g.extend Chess::Gnuchess
9
- # g.gnuchess_move!
10
- # puts g
7
+ # To use this module, extend a game object with {Chess::Gnuchess}.
8
+ # @note Gnuchess binary have to be installed.
9
+ # @example
10
+ # g = Chess::Game.new
11
+ # g.extend Chess::Gnuchess
12
+ # g.gnuchess_move!
13
+ # puts g
11
14
  module Gnuchess
12
15
 
13
- # Return the next move calculated by Gnuchess.
14
- # Gnuchess must be installed!
16
+ # Returns the next move calculated by Gnuchess.
17
+ # @return [String] Returns the short algebraic chess notation of the move.
15
18
  def gnuchess_move
16
19
  pipe = IO.popen('gnuchess -x', 'r+')
17
20
  begin
@@ -33,25 +36,24 @@ module Chess
33
36
  return moves
34
37
  end
35
38
 
36
- # Make a move using Gnuchess engine. This add a new Board in the Game.
37
- # Return the next move calculated by Gnuchess.
38
- # Gnuchess must be installed!
39
+ # Make a move using Gnuchess engine.
40
+ # @note This add a new {Board} in the {Game}.
41
+ # @return [String] Returns the short algebraic chess notation of the move.
39
42
  def gnuchess_move!
40
43
  next_move = self.gnuchess_move
41
44
  self.move(next_move) if next_move
42
45
  end
43
46
 
44
- # :nodoc:
47
+ private
48
+
45
49
  def self.included(mod)
46
50
  raise_if_gnuchess_is_not_installed
47
51
  end
48
52
 
49
- # :nodoc:
50
53
  def self.extended(mod)
51
54
  raise_if_gnuchess_is_not_installed
52
55
  end
53
56
 
54
- # :nodoc:
55
57
  def gen_pgn(file_to_save, moves = [])
56
58
  done = false
57
59
  pipe = IO.popen('gnuchess', 'r+')
@@ -99,18 +101,10 @@ module Chess
99
101
  end
100
102
  end
101
103
 
102
- private
103
-
104
- # Return true if Gnuchess is installed, false otherwise.
105
- def self.gnuchess_installed?
106
- system('which gnuchess >& /dev/null')
107
- $?.exitstatus == 0
108
- end
109
-
110
104
  # Raise an exception if Gnuchess is not installed
111
105
  def self.raise_if_gnuchess_is_not_installed
112
- unless gnuchess_installed?
113
- raise 'You need to install Gnuchess to use the module Chess::Gnuchess.'
106
+ unless find_executable0('gnuchess')
107
+ raise 'You must install Gnuchess to use the module Chess::Gnuchess!'
114
108
  end
115
109
  end
116
110
 
data/lib/chess/pgn.rb CHANGED
@@ -6,19 +6,54 @@ module Chess
6
6
  # Array that include PGN standard tags.
7
7
  TAGS = %w(event site date round white black result)
8
8
 
9
- attr_accessor(*(TAGS + [:moves]))
9
+ # The name of the tournament or match event.
10
+ # @return [String]
11
+ attr_accessor :event
12
+ # The location of the event. This is in City, Region COUNTRY format, where
13
+ # COUNTRY is the three-letter International Olympic Committee code for the
14
+ # country.
15
+ # @return [String]
16
+ attr_accessor :site
17
+ # The starting date of the game, in YYYY.MM.DD form. ?? is used for unknown values.
18
+ # @return [String]
19
+ attr_accessor :date
20
+ # The playing round ordinal of the game within the event.
21
+ # @return [String]
22
+ attr_accessor :round
23
+ # The player of the white pieces, in Lastname, Firstname format.
24
+ # @return [String]
25
+ attr_accessor :white
26
+ # The player of the black pieces, same format as White.
27
+ # @return [String]
28
+ attr_accessor :black
29
+ # The result of the game. This can only have four possible values: 1-0
30
+ # (White won), 0-1 (Black won), 1/2-1/2 (Draw), or * (other, e.g., the game
31
+ # is ongoing).
32
+ # @return [String]
33
+ attr_accessor :result
34
+ # The array with all moves done in short algebraic chess notation.
35
+ # @return [Array<String>]
36
+ attr_accessor :moves
10
37
 
11
- # Creates a new PGN. If param +filename+, load it from file.
12
- def initialize(filename = nil)
13
- self.load(filename) if filename
38
+ # @param [String] filename The path of the PGN file.
39
+ # @param [Boolean] check_moves If true check if the moves are legal.
40
+ # @raise [InvalidPgnFormatError]
41
+ # @raise [IllegalMoveError]
42
+ def initialize(filename = nil, check_moves: false)
43
+ self.load(filename, check_moves: check_moves) if filename
14
44
  @date = '??'
15
45
  @round = '1'
16
46
  end
17
47
 
18
48
  # Load a PGN from file.
19
- def load(filename)
49
+ # @param [String] filename The path of the PGN file.
50
+ # @param [Boolean] check_moves If true check if the moves are legal.
51
+ # @return [Pgn] Returns `self`.
52
+ # @raise [InvalidPgnFormatError]
53
+ # @raise [IllegalMoveError]
54
+ def load(filename, check_moves: false)
20
55
  data = File.open(filename, 'r').read
21
- data.gsub!(/\{.*?\}/, '')
56
+ data.gsub!(/\{.*?\}/, '') # remove comments
22
57
  TAGS.each do |t|
23
58
  instance_variable_set("@#{t}", data.match(/^\[#{t.capitalize} ".*"\]\s?$/).to_s.strip[t.size+3..-3])
24
59
  end
@@ -28,6 +63,12 @@ module Chess
28
63
  game = data[game_index..-1].strip
29
64
  @moves = game.gsub("\n", ' ').split(/\d+\./).collect{|t| t.strip}[1..-1].collect{|t| t.split(' ')}.flatten
30
65
  @moves.delete_at(@moves.size-1) if @moves.last =~ /(0-1)|(1-0)|(1\/2)|(1\/2-1\/2)|(\*)/
66
+ @moves.each do |m|
67
+ if m !~ MOVE_REGEXP && m !~ SHORT_CASTLING_REGEXP && m !~ LONG_CASTLING_REGEXP
68
+ raise Chess::InvalidPgnFormatError.new(filename)
69
+ end
70
+ end
71
+ Chess::Game.new(@moves) if check_moves
31
72
  return self
32
73
  end
33
74
 
@@ -49,14 +90,14 @@ module Chess
49
90
  end
50
91
 
51
92
  # Write PGN to file.
93
+ # @param [String] filename The path of the PGN file.
52
94
  def write(filename)
53
95
  File.open(filename, 'w') { |f| f.write(self.to_s) }
54
96
  end
55
97
 
56
- # :nodoc:
98
+ # @!visibility private
57
99
  alias :old_date= :date=
58
100
 
59
- # :nodoc:
60
101
  # Set the date tag.
61
102
  def date=(value)
62
103
  if value.is_a?(Time)
@@ -66,6 +107,5 @@ module Chess
66
107
  end
67
108
  end
68
109
 
69
-
70
110
  end
71
111
  end
@@ -1,15 +1,16 @@
1
1
  module Chess
2
2
 
3
- # With this module is possible call the method +to_utf8+ on a string. This
3
+ # With this module is possible call the method {#to_utf8} on a string. This
4
4
  # method convert the chess piece identifier character into UTF8 chess
5
- # character, for example:
6
- # :001 > require 'chess/utf8_notation'
7
- # => true
8
- # :002 > 'Qf7#'.to_utf8
9
- # => '♕f7#'
5
+ # character.
6
+ # @example
7
+ # :001 > require 'chess/utf8_notation'
8
+ # => true
9
+ # :002 > 'Qf7#'.to_utf8
10
+ # => '♕f7#'
10
11
  #
11
- # To use this utility explicit require is needed:
12
- # <tt>require 'chess/utf8_notation'</tt>
12
+ # @note To use this utility explicit require is needed: <tt>require
13
+ # 'chess/utf8_notation'</tt>
13
14
  module UTF8Notation
14
15
 
15
16
  # Map a piece identifier character with the corresponding UTF8 chess
@@ -29,7 +30,8 @@ module Chess
29
30
  'k' => '♚'
30
31
  }
31
32
 
32
- # Replace the piece identifier characters with UTF8 chess characters
33
+ # Replace the piece identifier characters with UTF8 chess characters.
34
+ # @return [String]
33
35
  def to_utf8
34
36
  self.gsub(/[PRNBQKprnbqk]/, UTF8_MAP)
35
37
  end
data/lib/chess/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # The Chess library module.
2
2
  module Chess
3
3
  # The library version.
4
- VERSION = '0.1.3'
4
+ VERSION = '0.1.4'
5
5
  end
@@ -0,0 +1,18 @@
1
+ [Event "It (cat.7)"]
2
+ [Site "Zenica (Bosnia & Herzegovina)"]
3
+ [Date "1985.??.??"]
4
+ [Round "?"]
5
+ [White "Kobas Adnan"]
6
+ [Black "Karolyi Tibor Sr"]
7
+ [Result "0-1"]
8
+ [ECO "B53"]
9
+
10
+ 1. e4 c5 2. Nf4 d6 3. d4 cxd4 4. Qxd4 Nc6 5. Bb5 Bd7 6. Bxc6 Bxc6 7. Bg5
11
+ Nf6 8. Bxf6 gxf6 9. Nc3 e6 10. O-O-O Be7 11. Rhe1 Rg8 12. Qe3 Rxg2
12
+ 13. Rg1 Rg6 14. Nd4 Qb6 15. h4 O-O-O 16. h5 Rg5 17. Nd5 Bxd5 18. exd5 e5
13
+ 19. Qh3+ Kb8 20. Nf5 Bf8 21. Rxg5 fxg5 22. Ne3 Qb4 23. c4 g4 24. Qxg4
14
+ Bh6 25. Kb1 Rc8 26. Rc1 Qd2 27. Qf5 Bf4 28. Qc2 Qxc2+ 29. Rxc2 Rg8
15
+ 30. b4 Rg5 31. c5 e4 32. c6 Rxh5 33. Rc4 f5 34. b5 Rg5 35. Rc3 Be5
16
+ 36. Rc1 Bd4 37. Nc4 Bc5 38. Ne5 dxe5 39. Rxc5 Rg6 40. a4 Rd6 41. a5 b6
17
+ 42. axb6 axb6 43. Rc2 Rxd5 44. Rb2 h5 45. Ka2 h4 46. Ka3 h3 47. Ka4 Rd1
18
+ 0-1
@@ -0,0 +1,17 @@
1
+ [Event "?"]
2
+ [Site "Tampere We Taraus"]
3
+ [Date "1993.??.??"]
4
+ [Round "?"]
5
+ [White "Satonen Arto"]
6
+ [Black "Kauko Jussi"]
7
+ [Result "1-0"]
8
+
9
+ 1. e4 c5 2. f4 e6 3. Nf3 Nc6 4. Nc3 d5 5. exd5 exd5 6. Bb5 Nf6 7. O-O
10
+ Be7 8. d3 O-O 9. Bxc6 bxc6 10. Ne5 Qc7 11. Qf3 Bd6 12. Qg3 Re8 13. Kh1
11
+ Ba6 14. Ng4 Nxg4 15. Qxg4 Rab8 16. b3 f6 17. Bd2 Re7 18. Ne2 Rbe8 19.
12
+ Ng3 Bc8 20. Qh4 Qd7 21. h3 Qe6 22. Rf3 Qf7 23. Nh5 Bf5 24. g4 Bc8 25.
13
+ f5 Re2 26. Rf2 d4 27. Kg1 Rxf2 28. Kxf2 Qd5 29. Ng3 Ba6 30. Ne4 Rxe4
14
+ 31. dxe4 Qxe4 32. Kg1 Qxc2 33. Qe1 Be5 34. Bf4 Qe2 35. Qxe2 Bxe2 36.
15
+ Bxe5 fxe5 37. Kf2 d3 38. Ke3 Kf7=Q 39. Rc1 Ke7 40. Rxc5 Kd6 41. Ra5 a6
16
+ 42. Rxa6 Bf1 43. Ra4 Kd5 44. h4 h5 45. gxh5 Bh3 46. Kxd3 Bxf5+ 47. Ke3
17
+ Ke6 48. Ra7 Kf6 49. Rc7 1-0
@@ -0,0 +1,13 @@
1
+ [Event "OHRA"]
2
+ [Site "Amsterdam NED"]
3
+ [Date "??"]
4
+ [Round "1"]
5
+ [White "Eising, Johannes"]
6
+ [Black "De Wit, Johannes S"]
7
+ [Result "*"]
8
+
9
+ 1. c4 Nf6 2. Nf3 c5 3. g3 Nc6 4. Bg2 d5 5. O-O dxc4 6. Qa4 Bd7 7. Qxc4 e6 8.
10
+ Nc3 Rc8 9. d4 b5 10. Qd3 c4 11. Qd1 b4 12. Na4 Be7 13. Bg5 O-O 14. e3 Na5 15.
11
+ Re1 Qe8 16. Nc5 Bxc5 17. Bxf6 Ba4 18. b3 cxb3 19. b3 Nxb3 20. Rxa4 Qxa4 21.
12
+ Ne5 Qa1 22. Qe2 Qc3 23. Rd1 gxf6 24. Qg4+ Kh8 25. Qh4 fxe5 26. Qf6+ Kg8 27.
13
+ Qg5+ Kh8 *
@@ -0,0 +1,15 @@
1
+ [Event "Memorial M.Chigorin"]
2
+ [Site "St. Petersburg (Russia)"]
3
+ [Date "??"]
4
+ [Round "1"]
5
+ [White "Yagupov Igor"]
6
+ [Black "Zagrebelny Sergey"]
7
+ [Result "*"]
8
+
9
+ 1. e4 c5 2. c3 d5 3. exd5 Qxd5 4. d4 Nf6 5. Nf3 e6 6. Be2 Be7 7. O-O Nc6 8. c4
10
+ Qd8 9. dxc5 Qxd1 10. Rxd1 Bxc5 11. Nc3 O-O 12. a3 b6 13. b4 Be7 14. Bf4 Bb7
11
+ 15. Ne5 Nxe5 16. Bxe5 Rfd8 17. Rxd8+ Rxd8 18. Nb5 Rd2 19. Bf3 Bxf3 20. gxf3 a6
12
+ 21. Nd3 Rd3 22. Rd1 Rxf3 23. Kg2 Rf5 24. Bc7 Rg5+ 25. Kf3 Rg4 26. Bxb6 Rxc4
13
+ 27. Bd4 h6 28. Ke2 Kh7 29. Kd3 Rc8 30. Rb1 Bd6 31. h3 Nh5 32. Ne2 f5 33. f3 e5
14
+ 34. Ba7 Nf6 35. Nc3 g5 36. a4 h5 37. b5 a5 38. b6 Bb4 39. Nb5 Nd5 40. Ke2 Rc2+
15
+ 41. Kf1 Nxb6 42. Bxb6 Ra2 43. Rd1 Rxa4 44. Rd5 Ra1+ 45. Kf2 Ra2+ 46. Ke3 g4 *
@@ -0,0 +1,16 @@
1
+ [Event "?"]
2
+ [Site "Rosario"]
3
+ [Date "1946.??.??"]
4
+ [Round "?"]
5
+ [White "Calatayud"]
6
+ [Black "Elias,A"]
7
+ [Result "1-0"]
8
+
9
+ 1.e4 e5 2.Nf3 Nc6 3.Bb5 a6 4.Ba4 Nf6
10
+ 5.O-O Nxe4 6.d4 b5 7.Bb3 d5 8.dxe5 Be6
11
+ 9.c3 Be7 10.Nbd2 Nc5 11.Bc2 O-O 12.Nd4 Nxd4
12
+ 13.cxd4 Nd7 14.f4 f8 15.Nf3 c5 16.Be3 Rc8
13
+ 17.dxc5 Bxc5 18.Bxc5 Nxc5 19.Nd4 Qe7 20.Rc1 Ne4
14
+ 21.Kh1 Kh8 22.a4 bxa4 23.Bxe4 Rxc1 24.Qxc1 dxe4
15
+ 25.Qc6 Bd7 26.Qb7 Re8 27.Rc1 Qd8 28.e6 Bc8
16
+ 29.Qf7 Rg8 30.Nxf5 Qd2 31.Qxg8+ 1-0
@@ -0,0 +1,20 @@
1
+ [Event "It (cat.7)"]
2
+ [Site "Zenica (Bosnia & Herzegovina)"]
3
+ [Date "1985.??.??"]
4
+ [Round "?"]
5
+ [White "Kobas Adnan"]
6
+ [Black "Karolyi Tibor Sr"]
7
+ [Result "0-1"]
8
+ [ECO "B53"]
9
+
10
+ 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Qxd4 Nc6 5. Bb5 Bd7 6. Bxc6 Bxc6 7. Bg5
11
+ Nf6 8. Bxf6 gxf6 9. Nc3 e6 10. O-O-O Be7 11. Rhe1 Rg8 12. Qe3 Rxg2
12
+ 13. Rg1 Rg6 14. Nd4 Qb6 15. h4 O-O-O 16. h5 Rg5 17. Nd5 Bxd5 18. exd5 e5
13
+ 19. Qh3+ Kb8 20. Nf5 Bf8 21. Rxg5 fxg5 22. Ne3 Qb4 23. c4 g4 24. Qxg4
14
+ Bh6 25. Kb1 Rc8 26. Rc1 Qd2 27. Qf5 Bf4 28. Qc2 Qxc2+ 29. Rxc2 Rg8
15
+ 30. b4 Rg5 31. c5 e4 32. c6 Rxh5 33. Rc4 f5 34. b5 Rg5 35. Rc3 Be5
16
+ 36. Rc1 Bd4 37. Nc4 Bc5 38. Ne5 dxe5 39. Rxc5 Rg6 40. a4 Rd6 41. a5 b6
17
+ 42. axb6 axb6 43. Rc2 Rxd5 44. Rb2 h5 45. Ka2 h4 46. Ka3 h3 47. Ka4 Rd1
18
+ 0-1
19
+
20
+ Invalidating string
@@ -0,0 +1,16 @@
1
+ [Event "?"]
2
+ [Site "Tampere We Taraus"]
3
+ [Date "1993.??.??"]
4
+ [Round "?"]
5
+ [White "Satonen Arto"]
6
+ [Black "Kauko Jussi"]
7
+ [Result "1-0"]
8
+
9
+ 1. e4 c5 2. f4 e6 3. Nf3 Nc6 4. Nc3 d5 5. exd5 exd5 6. Bb5 Nf6 7. O-O Be7 8. d3
10
+ O-O 9. Bxc6 bxc6 10. Ne5 Qc7 11. Qf3 Bd6 12. Qg3 Re8 13. Kh1 Ba6 14. Ng4 Nxg4
11
+ 15. Qxg4 Rab8 16. b3 f6 17. Bd2 Re7 18. Ne2 Rbe8 19. Ng3 Bc8 20. Qh4 Qd7 21. h3
12
+ Qe6 22. Rf3 Qf7 23. Nh5 Bf5 24. g4 Bc8 25. f5 Re2 26. Rf2 d4 27. INVALIDATING
13
+ Kg1 Rxf2 28. Kxf2 Qd5 29. Ng3 Ba6 30. Ne4 Rxe4 31. dxe4 Qxe4 32. Kg1 Qxc2 33.
14
+ Qe1 Be5 34. Bf4 Qe2 35. Qxe2 Bxe2 36. Bxe5 fxe5 37. Kf2 d3 38. Ke3 Kf7 39. Rc1
15
+ Ke7 40. Rxc5 Kd6 41. Ra5 a6 42. Rxa6 Bf1 43. Ra4 Kd5 44. h4 h5 45. gxh5 Bh3 46.
16
+ Kxd3 Bxf5+ 47. Ke3 Ke6 48. Ra7 Kf6 49. Rc7 1-0
@@ -0,0 +1,13 @@
1
+ [Event "OHRA"]
2
+ [Site "Amsterdam NED"]
3
+ [Date "??"]
4
+ [Round "1"]
5
+ [White "Eising, Johannes"]
6
+ [Black "De Wit, Johannes S"]
7
+ [Result "*"]
8
+
9
+ 1. c4 Nf6 2. Nf3 c5 3. g3 Nc6 4. Bg2 d5 5. O-O dxc4 6. Qa4 Bd7 7. Qxc4 e6 8.
10
+ Nc3 Rc8 9. d4 b5 10. Qd3 c4 11. Qd1 b4 12. Na4 Be7 13. Bg5 O-O 14. e3 Na5 15.
11
+ Re1 Qe8 16. Nc5 Bxc5 17. Bxf6 Ba4 18. b3 cxb3 19. axb3 Nxb3 20. Rxa4 Qxa4 21.
12
+ Ne5 Qa1 22. Qe2 Qc3w 23. Rd1 gxf6 24. Qg4+ Kh8 25. Qh4 fxe5 26. Qf6+ Kg8 27.
13
+ Qg5+ Kh8 *
@@ -0,0 +1,15 @@
1
+ [Event "Memorial M.Chigorin"]
2
+ [Site "St. Petersburg (Russia)"]
3
+ [Date "??"]
4
+ [Round "1"]
5
+ [White "Yagupov Igor"]
6
+ [Black "Zagrebelny Sergey"]
7
+ [Result "*"]
8
+
9
+ 1. e4 c5 2. c3 d5 3. exd5 Qxd5 4. d4 Nf9 5. Nf3 e6 6. Be2 Be7 7. O-O Nc6 8. c4
10
+ Qd8 9. dxc5 Qxd1 10. Rxd1 Bxc5 11. Nc3 O-O 12. a3 b6 13. b4 Be7 14. Bf4 Bb7
11
+ 15. Ne5 Nxe5 16. Bxe5 Rfd8 17. Rxd8+ Rxd8 18. Nb5 Rd2 19. Bf3 Bxf3 20. gxf3 a6
12
+ 21. Nc3 Rd3 22. Rd1 Rxf3 23. Kg2 Rf5 24. Bc7 Rg5+ 25. Kf3 Rg4 26. Bxb6 Rxc4
13
+ 27. Bd4 h6 28. Ke2 Kh7 29. Kd3 Rc8 30. Rb1 Bd6 31. h3 Nh5 32. Ne2 f5 33. f3 e5
14
+ 34. Ba7 Nf6 35. Nc3 g5 36. a4 h5 37. b5 a5 38. b6 Bb4 39. Nb5 Nd5 40. Ke2 Rc2+
15
+ 41. Kf1 Nxb6 42. Bxb6 Ra2 43. Rd1 Rxa4 44. Rd5 Ra1+ 45. Kf2 Ra2+ 46. Ke3 g4 *
@@ -8,12 +8,11 @@
8
8
  [ECO "B53"]
9
9
 
10
10
  1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Qxd4 Nc6 5. Bb5 Bd7 6. Bxc6 Bxc6 7. Bg5
11
- Nf6 8. Bxf6 gxf6 9. Nc3 e6 10. O-O-O Be7 11. Rhe1 Rg8 12. Qe3 Rxg2
11
+ Nf6 8. Bxf6 gxf6 9. Nc3 e6 10. O-O-O Be7 11. Rhe1 Rg8 12. Qe3 Rxg2
12
12
  13. Rg1 Rg6 14. Nd4 Qb6 15. h4 O-O-O 16. h5 Rg5 17. Nd5 Bxd5 18. exd5 e5
13
- 19. Qh3+ Kb8 20. Nf5 Bf8 21. Rxg5 fxg5 22. Ne3 Qb4 23. c4 g4 24. Qxg4
14
- Bh6 25. Kb1 Rc8 26. Rc1 Qd2 27. Qf5 Bf4 28. Qc2 Qxc2+ 29. Rxc2 Rg8
15
- 30. b4 Rg5 31. c5 e4 32. c6 Rxh5 33. Rc4 f5 34. b5 Rg5 35. Rc3 Be5
16
- 36. Rc1 Bd4 37. Nc4 Bc5 38. Ne5 dxe5 39. Rxc5 Rg6 40. a4 Rd6 41. a5 b6
17
- 42. axb6 axb6 43. Rc2 Rxd5 44. Rb2 h5 45. Ka2 h4 46. Ka3 h3 47. Ka4 Rd1
13
+ 19. Qh3+ Kb8 20. Nf5 Bf8 21. Rxg5 fxg5 22. Ne3 Qb4 23. c4 g4 24. Qxg4
14
+ Bh6 25. Kb1 Rc8 26. Rc1 Qd2 27. Qf5 Bf4 28. Qc2 Qxc2+ 29. Rxc2 Rg8
15
+ 30. b4 Rg5 31. c5 e4 32. c6 Rxh5 33. Rc4 f5 34. b5 Rg5 35. Rc3 Be5
16
+ 36. Rc1 Bd4 37. Nc4 Bc5 38. Ne5 dxe5 39. Rxc5 Rg6 40. a4 Rd6 41. a5 b6
17
+ 42. axb6 axb6 43. Rc2 Rxd5 44. Rb2 h5 45. Ka2 h4 46. Ka3 h3 47. Ka4 Rd1
18
18
  0-1
19
-
@@ -6,13 +6,12 @@
6
6
  [Black "Kauko Jussi"]
7
7
  [Result "1-0"]
8
8
 
9
- 1. e4 c5 2. f4 e6 3. Nf3 Nc6 4. Nc3 d5 5. exd5 exd5 6. Bb5 Nf6 7. O-O
10
- Be7 8. d3 O-O 9. Bxc6 bxc6 10. Ne5 Qc7 11. Qf3 Bd6 12. Qg3 Re8 13. Kh1
11
- Ba6 14. Ng4 Nxg4 15. Qxg4 Rab8 16. b3 f6 17. Bd2 Re7 18. Ne2 Rbe8 19.
12
- Ng3 Bc8 20. Qh4 Qd7 21. h3 Qe6 22. Rf3 Qf7 23. Nh5 Bf5 24. g4 Bc8 25.
13
- f5 Re2 26. Rf2 d4 27. Kg1 Rxf2 28. Kxf2 Qd5 29. Ng3 Ba6 30. Ne4 Rxe4
14
- 31. dxe4 Qxe4 32. Kg1 Qxc2 33. Qe1 Be5 34. Bf4 Qe2 35. Qxe2 Bxe2 36.
15
- Bxe5 fxe5 37. Kf2 d3 38. Ke3 Kf7 39. Rc1 Ke7 40. Rxc5 Kd6 41. Ra5 a6
16
- 42. Rxa6 Bf1 43. Ra4 Kd5 44. h4 h5 45. gxh5 Bh3 46. Kxd3 Bxf5+ 47. Ke3
9
+ 1. e4 c5 2. f4 e6 3. Nf3 Nc6 4. Nc3 d5 5. exd5 exd5 6. Bb5 Nf6 7. O-O
10
+ Be7 8. d3 O-O 9. Bxc6 bxc6 10. Ne5 Qc7 11. Qf3 Bd6 12. Qg3 Re8 13. Kh1
11
+ Ba6 14. Ng4 Nxg4 15. Qxg4 Rab8 16. b3 f6 17. Bd2 Re7 18. Ne2 Rbe8 19.
12
+ Ng3 Bc8 20. Qh4 Qd7 21. h3 Qe6 22. Rf3 Qf7 23. Nh5 Bf5 24. g4 Bc8 25.
13
+ f5 Re2 26. Rf2 d4 27. Kg1 Rxf2 28. Kxf2 Qd5 29. Ng3 Ba6 30. Ne4 Rxe4
14
+ 31. dxe4 Qxe4 32. Kg1 Qxc2 33. Qe1 Be5 34. Bf4 Qe2 35. Qxe2 Bxe2 36.
15
+ Bxe5 fxe5 37. Kf2 d3 38. Ke3 Kf7 39. Rc1 Ke7 40. Rxc5 Kd6 41. Ra5 a6
16
+ 42. Rxa6 Bf1 43. Ra4 Kd5 44. h4 h5 45. gxh5 Bh3 46. Kxd3 Bxf5+ 47. Ke3
17
17
  Ke6 48. Ra7 Kf6 49. Rc7 1-0
18
-
@@ -6,12 +6,11 @@
6
6
  [Black "Elias,A"]
7
7
  [Result "1-0"]
8
8
 
9
- 1.e4 e5 2.Nf3 Nc6 3.Bb5 a6 4.Ba4 Nf6
10
- 5.O-O Nxe4 6.d4 b5 7.Bb3 d5 8.dxe5 Be6
11
- 9.c3 Be7 10.Nbd2 Nc5 11.Bc2 O-O 12.Nd4 Nxd4
12
- 13.cxd4 Nd7 14.f4 f5 15.Nf3 c5 16.Be3 Rc8
13
- 17.dxc5 Bxc5 18.Bxc5 Nxc5 19.Nd4 Qe7 20.Rc1 Ne4
14
- 21.Kh1 Kh8 22.a4 bxa4 23.Bxe4 Rxc1 24.Qxc1 dxe4
15
- 25.Qc6 Bd7 26.Qb7 Re8 27.Rc1 Qd8 28.e6 Bc8
9
+ 1.e4 e5 2.Nf3 Nc6 3.Bb5 a6 4.Ba4 Nf6
10
+ 5.O-O Nxe4 6.d4 b5 7.Bb3 d5 8.dxe5 Be6
11
+ 9.c3 Be7 10.Nbd2 Nc5 11.Bc2 O-O 12.Nd4 Nxd4
12
+ 13.cxd4 Nd7 14.f4 f5 15.Nf3 c5 16.Be3 Rc8
13
+ 17.dxc5 Bxc5 18.Bxc5 Nxc5 19.Nd4 Qe7 20.Rc1 Ne4
14
+ 21.Kh1 Kh8 22.a4 bxa4 23.Bxe4 Rxc1 24.Qxc1 dxe4
15
+ 25.Qc6 Bd7 26.Qb7 Re8 27.Rc1 Qd8 28.e6 Bc8
16
16
  29.Qf7 Rg8 30.Nxf5 Qd2 31.Qxg8+ 1-0
17
-