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.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/README.md +44 -0
- data/Rakefile +6 -7
- data/chess.gemspec +1 -1
- data/ext/bitboard.c +24 -0
- data/ext/board.c +78 -24
- data/ext/board.h +4 -2
- data/ext/chess.c +216 -196
- data/ext/chess.h +1 -0
- data/ext/common.c +10 -0
- data/ext/game.c +33 -16
- data/ext/special.c +14 -11
- data/ext/special.h +1 -2
- data/lib/chess/exceptions.rb +7 -10
- data/lib/chess/game.rb +66 -50
- data/lib/chess/gnuchess.rb +19 -25
- data/lib/chess/pgn.rb +49 -9
- data/lib/chess/utf8_notation.rb +11 -9
- data/lib/chess/version.rb +1 -1
- data/test/pgn_collection/illegal/0001.pgn +18 -0
- data/test/pgn_collection/illegal/0002.pgn +17 -0
- data/test/pgn_collection/illegal/0003.pgn +13 -0
- data/test/pgn_collection/illegal/0004.pgn +15 -0
- data/test/pgn_collection/illegal/0005.pgn +16 -0
- data/test/pgn_collection/invalid/0001.pgn +20 -0
- data/test/pgn_collection/invalid/0002.pgn +16 -0
- data/test/pgn_collection/invalid/0003.pgn +13 -0
- data/test/pgn_collection/invalid/0004.pgn +15 -0
- data/test/pgn_collection/valid/0001.pgn +6 -7
- data/test/pgn_collection/valid/0002.pgn +8 -9
- data/test/pgn_collection/valid/0005.pgn +7 -8
- data/test/pgn_collection/valid/0009.pgn +14 -15
- data/test/pgn_collection/valid/0010.pgn +6 -7
- data/test/pgn_collection/valid/0011.pgn +5 -6
- data/test/pgn_collection/valid/0012.pgn +0 -1
- data/test/pgn_collection/valid/0013.pgn +5 -6
- data/test/pgn_collection/valid/0014.pgn +6 -7
- data/test/pgn_collection/valid/0020.pgn +6 -7
- data/test/pgn_collection/valid/0021.pgn +15 -16
- data/test/pgn_collection/valid/0971.pgn +22 -14
- data/test/test_big_pgn_collection.rb +12 -5
- data/test/test_helper.rb +1 -1
- data/test/test_illegal_moves.rb +14 -0
- data/test/test_insufficient_material.rb +13 -1
- data/test/test_particular_situations.rb +14 -0
- data/test/test_pgn.rb +24 -0
- data/test/test_pgn_collection.rb +1 -4
- metadata +30 -63
- data/README.rdoc +0 -44
- data/doc/Chess.html +0 -112
- data/doc/Chess/BadNotationError.html +0 -107
- data/doc/Chess/Board.html +0 -700
- data/doc/Chess/CGame.html +0 -1004
- data/doc/Chess/Game.html +0 -684
- data/doc/Chess/Gnuchess.html +0 -215
- data/doc/Chess/IllegalMoveError.html +0 -105
- data/doc/Chess/InvalidFenFormatError.html +0 -105
- data/doc/Chess/InvalidPgnFormatError.html +0 -105
- data/doc/Chess/Pgn.html +0 -309
- data/doc/Chess/UTF8Notation.html +0 -174
- data/doc/README_rdoc.html +0 -143
- data/doc/created.rid +0 -15
- data/doc/css/fonts.css +0 -167
- data/doc/css/rdoc.css +0 -590
- data/doc/fonts/Lato-Light.ttf +0 -0
- data/doc/fonts/Lato-LightItalic.ttf +0 -0
- data/doc/fonts/Lato-Regular.ttf +0 -0
- data/doc/fonts/Lato-RegularItalic.ttf +0 -0
- data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
- data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
- data/doc/images/add.png +0 -0
- data/doc/images/arrow_up.png +0 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/delete.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_blue.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/transparent.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +0 -160
- data/doc/js/darkfish.js +0 -161
- data/doc/js/jquery.js +0 -4
- data/doc/js/navigation.js +0 -142
- data/doc/js/navigation.js.gz +0 -0
- data/doc/js/search.js +0 -109
- data/doc/js/search_index.js +0 -1
- data/doc/js/search_index.js.gz +0 -0
- data/doc/js/searcher.js +0 -229
- data/doc/js/searcher.js.gz +0 -0
- data/doc/table_of_contents.html +0 -331
data/lib/chess/gnuchess.rb
CHANGED
@@ -1,17 +1,20 @@
|
|
1
|
+
require 'mkmf'
|
2
|
+
|
1
3
|
module Chess
|
2
4
|
|
3
|
-
# Use Gnuchess to I.A.
|
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
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
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
|
-
#
|
14
|
-
#
|
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.
|
37
|
-
#
|
38
|
-
#
|
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
|
-
|
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
|
113
|
-
raise 'You
|
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
|
-
|
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
|
-
#
|
12
|
-
|
13
|
-
|
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
|
-
|
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
|
-
#
|
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
|
data/lib/chess/utf8_notation.rb
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
module Chess
|
2
2
|
|
3
|
-
# With this module is possible call the method
|
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
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
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
|
-
#
|
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
@@ -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
|
-
|