chess_validator 0.2.21 → 0.2.22
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/move_logic.rb +34 -10
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc464703452ec24fc25c8d122099e52b9788ef81df4d2a3acd2fca332d86c7b2
|
4
|
+
data.tar.gz: 11ca33717e5306eaf1538ecb65b55280bfd0c6f5f7b485cd78d540e36d72d726
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f4e734ca21f8022cf210effe194057edd9c4302574ce15dc3929858f0426d1992f32c0ab185bf38236ceb6b05fc380a1934589a575eb5278598e96c13826ec5
|
7
|
+
data.tar.gz: 2a60f66b946b0e8203c0c79cf8d772b483befbd82b1935ddfa959fe9c424d8056fba1aa5978dfcf6b9d0b7413840b0f85ddc58f22de7a90485b0c79f4e923c62
|
data/lib/move_logic.rb
CHANGED
@@ -4,11 +4,12 @@ require 'pgn'
|
|
4
4
|
module ChessValidator
|
5
5
|
class MoveLogic
|
6
6
|
class << self
|
7
|
+
MAX_CACHE_SIZE = 1000
|
8
|
+
|
7
9
|
def next_moves(fen)
|
8
10
|
fen_notation = fen.to_s
|
9
11
|
return next_moves_for[fen_notation] if next_moves_for[fen_notation]
|
10
12
|
|
11
|
-
|
12
13
|
board = get_board(fen.to_s)
|
13
14
|
pieces = []
|
14
15
|
|
@@ -24,7 +25,35 @@ module ChessValidator
|
|
24
25
|
end
|
25
26
|
|
26
27
|
def boards
|
27
|
-
@boards
|
28
|
+
if @boards.nil? || @boards.size > MAX_CACHE_SIZE
|
29
|
+
@boards = {}
|
30
|
+
end
|
31
|
+
|
32
|
+
@boards
|
33
|
+
end
|
34
|
+
|
35
|
+
def next_moves_for
|
36
|
+
if @next_moves_for.nil? || @next_moves_for.size > MAX_CACHE_SIZE
|
37
|
+
@next_moves_for = {}
|
38
|
+
end
|
39
|
+
|
40
|
+
@next_moves_for
|
41
|
+
end
|
42
|
+
|
43
|
+
def occupied_square_sets
|
44
|
+
if @occupied_square_sets.nil? || @occupied_square_sets.size > MAX_CACHE_SIZE
|
45
|
+
@occupied_square_sets = {}
|
46
|
+
end
|
47
|
+
|
48
|
+
@occupied_square_sets
|
49
|
+
end
|
50
|
+
|
51
|
+
def defended_sets
|
52
|
+
if @defended_sets.nil? || @defended_sets.size > MAX_CACHE_SIZE
|
53
|
+
@defended_sets = {}
|
54
|
+
end
|
55
|
+
|
56
|
+
@defended_sets
|
28
57
|
end
|
29
58
|
|
30
59
|
def get_board(fen_string)
|
@@ -35,13 +64,6 @@ module ChessValidator
|
|
35
64
|
board
|
36
65
|
end
|
37
66
|
|
38
|
-
def next_moves_for
|
39
|
-
@next_moves_for ||= {}
|
40
|
-
end
|
41
|
-
|
42
|
-
def occupied_square_sets
|
43
|
-
@occupied_square_sets ||= {}
|
44
|
-
end
|
45
67
|
|
46
68
|
def get_occupied_spaces(fen_string)
|
47
69
|
return occupied_square_sets[fen_string] if occupied_square_sets[fen_string]
|
@@ -326,6 +348,8 @@ module ChessValidator
|
|
326
348
|
end
|
327
349
|
|
328
350
|
def defended_pieces_by_square(fen_notation)
|
351
|
+
return defended_sets[fen_notatioin] if defended_sets[fen_notatioin]
|
352
|
+
|
329
353
|
board = get_board(fen_notation)
|
330
354
|
|
331
355
|
fen = PGN::FEN.new(fen_notation)
|
@@ -342,11 +366,11 @@ module ChessValidator
|
|
342
366
|
moves_for_piece(piece).each do |move|
|
343
367
|
if space_index[move] && space_index[move][-1] == piece.color && can_defend?(piece, board, move, fen)
|
344
368
|
defended[move] += [piece]
|
345
|
-
puts 'hi'
|
346
369
|
end
|
347
370
|
end
|
348
371
|
end
|
349
372
|
|
373
|
+
defended_sets[fen_notatioin] = defended
|
350
374
|
defended
|
351
375
|
end
|
352
376
|
|