chess_validator 0.2.21 → 0.2.22
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/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
|
|