chess 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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
-