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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/move_logic.rb +34 -10
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 94df1700b50a798d45895b3d8b235fc6cd8abbe15736f36bbc97e1fe31da88e1
4
- data.tar.gz: 6e0eab463eee127e30e55effeef21466cf71e9ac08be5c8f2f6b258112e723cb
3
+ metadata.gz: bc464703452ec24fc25c8d122099e52b9788ef81df4d2a3acd2fca332d86c7b2
4
+ data.tar.gz: 11ca33717e5306eaf1538ecb65b55280bfd0c6f5f7b485cd78d540e36d72d726
5
5
  SHA512:
6
- metadata.gz: '098971e3e410d7f62ec4bf11fb62ae9a3397322add2a7a40a508c24149e19680460d7e5a659add721e17acb84473308c79fc55d5be3d7fba4b3f9c8bf159ce13'
7
- data.tar.gz: 7e0b9b6b18cbddbbc7fc25d2860a2830ea21c52d06254a2b3be28513ab391c8e7f10b0591b1a3c3471763d2c95e6d53940049e74e34d44a9c6870d445cb20ef1
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
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chess_validator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.21
4
+ version: 0.2.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Charles Ellison