feen 3.0.2 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2a0c53a0d0d53b43e1cb9f06511fe1c7bc3eee6c6552c4902b140133c32cc754
4
- data.tar.gz: 843631005e3047239e98d485907bf57870dc56e45f4aa2848bf37976dd53e00d
3
+ metadata.gz: abb8a5158f3723e03a49a81c8770ac85bde5d0a88386d7fb9a40739736c1fefe
4
+ data.tar.gz: 43d49d36468e55b84df7020ba7ea5ae5b3b73ed34ca640593e1ba05e094260f4
5
5
  SHA512:
6
- metadata.gz: efe66d045a3780bd4ec5e019f15e4e3302a42984a360c49e583d7e7f4ddf5fd9b13fefdc0807d8c2134fb87ac7c518fcae04bf91be8dc8dfdfef51c9dbb40f92
7
- data.tar.gz: 7a003e96f398ac8c2d63f7164e182c3f6b36183f5dd1eb74e030bbeb77f54965b4922664d78766336b17a44cc0c3e87819c21976c32874724d57e8ea66da87ee
6
+ metadata.gz: b447df75705569f2017bf8647ea4f6564661e6ea3467343662c16e7a4a68052eddf8952263badbd33c40132e2c4b9323481eecd882ce3be0fc44660a572d0805
7
+ data.tar.gz: 98db4cc2b5565fcaadd95e3e1f5b3c0facf04560088ac84209daa107000d0a829702a23b31b1544f4b2cb923330eb259c12a585a4da7fa564d87485de96cb915
data/README.md CHANGED
@@ -38,16 +38,16 @@ require "feen"
38
38
 
39
39
  # Dump a classic Tsume Shogi problem
40
40
  FEEN.dump(
41
- "active_side_id": 0,
41
+ "side_id": 0,
42
42
  "board": {
43
43
  3 => "s",
44
- 4 => "k" ,
44
+ 4 => "k",
45
45
  5 => "s",
46
46
  22 => "+P",
47
47
  43 => "+B"
48
48
  },
49
49
  "indexes": [9, 9],
50
- "pieces_in_hand_grouped_by_sides": [
50
+ "hands": [
51
51
  %w[S],
52
52
  %w[r r b g g g g s n n n n p p p p p p p p p p p p p p p p p]
53
53
  ]
@@ -56,21 +56,7 @@ FEEN.dump(
56
56
 
57
57
  # Parse a classic Tsume Shogi problem
58
58
  FEEN.parse("3,s,k,s,3/9/4,+P,4/9/7,+B,1/9/9/9/9 0 S/b,g,g,g,g,n,n,n,n,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,r,r,s")
59
- # => {
60
- # "active_side_id": 0,
61
- # "board": {
62
- # 3 => "s",
63
- # 4 => "k" ,
64
- # 5 => "s",
65
- # 22 => "+P",
66
- # 43 => "+B"
67
- # },
68
- # "indexes": [9, 9],
69
- # "pieces_in_hand_grouped_by_sides": [
70
- # %w[S],
71
- # %w[b g g g g n n n n p p p p p p p p p p p p p p p p p r r s]
72
- # ]
73
- # }
59
+ # => {:board=>{3=>"s", 4=>"k", 5=>"s", 22=>"+P", 43=>"+B"}, :indexes=>[9, 9], :hands=>[["S"], ["b", "g", "g", "g", "g", "n", "n", "n", "n", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "r", "r", "s"]], :side_id=>0}
74
60
  ```
75
61
 
76
62
  ## License
@@ -10,15 +10,15 @@ require_relative "feen/parser"
10
10
  module FEEN
11
11
  # @example Dumps position params into a FEEN string.
12
12
  #
13
- # @param active_side_id [Integer] The identifier of the player who must play.
13
+ # @param side_id [Integer] The identifier of the player who must play.
14
14
  # @param board [Hash] The indexes of each piece on the board.
15
15
  # @param indexes [Array] The shape of the board.
16
- # @param pieces_in_hand_grouped_by_sides [Array] The list of pieces in hand
16
+ # @param hands [Array] The list of pieces in hand
17
17
  # grouped by players.
18
18
  #
19
19
  # @example Dump a classic Tsume Shogi problem
20
20
  # dump(
21
- # "active_side_id": 0,
21
+ # "side_id": 0,
22
22
  # "board": {
23
23
  # 3 => "s",
24
24
  # 4 => "k",
@@ -26,21 +26,21 @@ module FEEN
26
26
  # 22 => "+P",
27
27
  # 43 => "+B"
28
28
  # },
29
- # "indexes": [9, 9],
30
- # "pieces_in_hand_grouped_by_sides": [
29
+ # "hands": [
31
30
  # %w[S],
32
31
  # %w[r r b g g g g s n n n n p p p p p p p p p p p p p p p p p]
33
- # ]
32
+ # ],
33
+ # "indexes": [9, 9]
34
34
  # )
35
35
  # # => "3,s,k,s,3/9/4,+P,4/9/7,+B,1/9/9/9/9 0 S/b,g,g,g,g,n,n,n,n,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,r,r,s"
36
36
  #
37
37
  # @return [String] The FEEN string representing the position.
38
- def self.dump(active_side_id:, board: {}, indexes:, pieces_in_hand_grouped_by_sides:)
38
+ def self.dump(board:, hands:, indexes:, side_id:)
39
39
  Dumper.call(
40
- active_side_id: active_side_id,
41
40
  board: board,
41
+ hands: hands,
42
42
  indexes: indexes,
43
- pieces_in_hand_grouped_by_sides: pieces_in_hand_grouped_by_sides
43
+ side_id: side_id
44
44
  )
45
45
  end
46
46
 
@@ -51,7 +51,7 @@ module FEEN
51
51
  # @example Parse a classic Tsume Shogi problem
52
52
  # parse("3,s,k,s,3/9/4,+P,4/9/7,+B,1/9/9/9/9 0 S/b,g,g,g,g,n,n,n,n,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,r,r,s")
53
53
  # # => {
54
- # # "active_side_id": 0,
54
+ # # "side_id": 0,
55
55
  # # "board": {
56
56
  # # 3 => "s",
57
57
  # # 4 => "k",
@@ -59,11 +59,11 @@ module FEEN
59
59
  # # 22 => "+P",
60
60
  # # 43 => "+B"
61
61
  # # },
62
- # # "indexes": [9, 9],
63
- # # "pieces_in_hand_grouped_by_sides": [
62
+ # # "hands": [
64
63
  # # %w[S],
65
64
  # # %w[b g g g g n n n n p p p p p p p p p p p p p p p p p r r s]
66
- # # ]
65
+ # # ],
66
+ # # "indexes": [9, 9]
67
67
  # # }
68
68
  #
69
69
  # @return [Hash] The position params representing the position.
@@ -9,15 +9,14 @@ module FEEN
9
9
  module Dumper
10
10
  # Dump position params into a FEEN string.
11
11
  #
12
- # @param active_side_id [Integer] The identifier of the player who must play.
12
+ # @param side_id [Integer] The identifier of the player who must play.
13
13
  # @param board [Hash] The indexes of each piece on the board.
14
14
  # @param indexes [Array] The shape of the board.
15
- # @param pieces_in_hand_grouped_by_sides [Array] The list of pieces in hand
15
+ # @param hands [Array] The list of pieces in hand
16
16
  # grouped by players.
17
17
  #
18
18
  # @example Dump a classic Tsume Shogi problem
19
19
  # call(
20
- # "active_side_id": 0,
21
20
  # "board": {
22
21
  # 3 => "s",
23
22
  # 4 => "k",
@@ -25,20 +24,21 @@ module FEEN
25
24
  # 22 => "+P",
26
25
  # 43 => "+B"
27
26
  # },
28
- # "indexes": [9, 9],
29
- # "pieces_in_hand_grouped_by_sides": [
27
+ # "hands": [
30
28
  # %w[S],
31
29
  # %w[r r b g g g g s n n n n p p p p p p p p p p p p p p p p p]
32
- # ]
30
+ # ],
31
+ # "indexes": [9, 9],
32
+ # "side_id": 0
33
33
  # )
34
34
  # # => "3,s,k,s,3/9/4,+P,4/9/7,+B,1/9/9/9/9 0 S/b,g,g,g,g,n,n,n,n,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,r,r,s"
35
35
  #
36
36
  # @return [String] The FEEN string representing the position.
37
- def self.call(active_side_id:, board:, indexes:, pieces_in_hand_grouped_by_sides:)
37
+ def self.call(board:, hands:, indexes:, side_id:)
38
38
  [
39
39
  Board.new(indexes, board).to_s,
40
- Turn.dump(active_side_id, pieces_in_hand_grouped_by_sides.length),
41
- PiecesInHand.dump(pieces_in_hand_grouped_by_sides)
40
+ Turn.dump(side_id, hands.length),
41
+ PiecesInHand.dump(hands)
42
42
  ].join(" ")
43
43
  end
44
44
  end
@@ -13,13 +13,13 @@ module FEEN
13
13
  class PiecesInHand
14
14
  # Serialize pieces in hand lists into a string.
15
15
  #
16
- # @param pieces_in_hand_grouped_by_sides [Array] The list of pieces in hand
16
+ # @param hands [Array] The list of pieces in hand
17
17
  # grouped by players.
18
18
  #
19
19
  # @return [String] A string representing the pieces in hand of both
20
20
  # players.
21
- def self.dump(pieces_in_hand_grouped_by_sides)
22
- pieces_in_hand_grouped_by_sides.map { |pieces| new(pieces).to_s }.join("/")
21
+ def self.dump(hands)
22
+ hands.map { |pieces| new(pieces).to_s }.join("/")
23
23
  end
24
24
 
25
25
  # @param pieces [Array] A list of pieces in hand.
@@ -4,15 +4,15 @@ module FEEN
4
4
  module Dumper
5
5
  # The turn module.
6
6
  module Turn
7
- # @param active_side_id [Integer] The identifier of the active player.
7
+ # @param side_id [Integer] The identifier of the active player.
8
8
  # @param sides_count [Integer] The number of players.
9
9
  #
10
10
  # @example Dump the number that identify the player who have to play
11
11
  # dump(0, 2) # => "0"
12
12
  #
13
13
  # @return [String] The number that identify the player who have to play.
14
- def self.dump(active_side_id, sides_count)
15
- String(Integer(active_side_id) % Integer(sides_count))
14
+ def self.dump(side_id, sides_count)
15
+ String(Integer(side_id) % Integer(sides_count))
16
16
  end
17
17
  end
18
18
  end
@@ -15,7 +15,6 @@ module FEEN
15
15
  # @example Parse a classic Tsume Shogi problem
16
16
  # call("3,s,k,s,3/9/4,+P,4/9/7,+B,1/9/9/9/9 0 S/b,g,g,g,g,n,n,n,n,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,r,r,s")
17
17
  # # => {
18
- # # "active_side_id": 0,
19
18
  # # "board": {
20
19
  # # 3 => "s",
21
20
  # # 4 => "k",
@@ -23,22 +22,23 @@ module FEEN
23
22
  # # 22 => "+P",
24
23
  # # 43 => "+B"
25
24
  # # },
26
- # # "indexes": [9, 9],
27
- # # "pieces_in_hand_grouped_by_sides": [
25
+ # # "hands": [
28
26
  # # %w[S],
29
27
  # # %w[b g g g g n n n n p p p p p p p p p p p p p p p p p r r s]
30
- # # ]
28
+ # # ],
29
+ # # "indexes": [9, 9],
30
+ # # "side_id": 0
31
31
  # # }
32
32
  #
33
33
  # @return [Hash] The position params representing the position.
34
34
  def self.call(feen)
35
- board, active_side_id, in_hand = feen.split(" ")
35
+ board, side_id, in_hand = feen.split(" ")
36
36
 
37
37
  {
38
- active_side_id: Turn.parse(active_side_id),
39
38
  board: Board.new(board).to_h,
40
39
  indexes: Shape.new(board).to_a,
41
- pieces_in_hand_grouped_by_sides: PiecesInHand.parse(in_hand)
40
+ hands: PiecesInHand.parse(in_hand),
41
+ side_id: Turn.parse(side_id)
42
42
  }
43
43
  end
44
44
  end
@@ -22,7 +22,7 @@ module FEEN
22
22
  # Board.new("3,s,k,s,3/9/4,+P,4/9/7,+B,1/9/9/9/9").to_h
23
23
  # # => {
24
24
  # # 3 => "s",
25
- # # 4 => "k" ,
25
+ # # 4 => "k",
26
26
  # # 5 => "s",
27
27
  # # 22 => "+P",
28
28
  # # 43 => "+B"
@@ -6,7 +6,7 @@ module FEEN
6
6
  module PiecesInHand
7
7
  # The list of pieces in hand grouped by players.
8
8
  #
9
- # @param pieces_in_hand_grouped_by_sides_str [String] The serialized list of
9
+ # @param hands_str [String] The serialized list of
10
10
  # pieces in hand grouped by players.
11
11
  #
12
12
  # @example Parse a list of serialized pieces in hand
@@ -17,8 +17,8 @@ module FEEN
17
17
  # # ]
18
18
  #
19
19
  # @return [Array] The list of pieces in hand grouped by players.
20
- def self.parse(pieces_in_hand_grouped_by_sides_str)
21
- pieces_in_hand_grouped_by_sides_str
20
+ def self.parse(hands_str)
21
+ hands_str
22
22
  .split("/", -1)
23
23
  .map { |pieces_in_hand_str| pieces_in_hand_str.split(",") }
24
24
  end
@@ -4,15 +4,15 @@ module FEEN
4
4
  module Parser
5
5
  # The turn module.
6
6
  module Turn
7
- # @param active_side_id [String] The identifier of bottom-side and
7
+ # @param side_id [String] The identifier of bottom-side and
8
8
  # top-side.
9
9
  #
10
10
  # @example Parse the number that identify the player who have to play
11
11
  # parse("0") # => 0
12
12
  #
13
13
  # @return [Integer] The number that identify the player who have to play.
14
- def self.parse(active_side_id)
15
- Integer(active_side_id)
14
+ def self.parse(side_id)
15
+ Integer(side_id)
16
16
  end
17
17
  end
18
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feen
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.2
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyril Kato
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-16 00:00:00.000000000 Z
11
+ date: 2020-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: brutal
@@ -155,7 +155,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
155
155
  requirements:
156
156
  - - ">="
157
157
  - !ruby/object:Gem::Version
158
- version: '0'
158
+ version: 2.7.0
159
159
  required_rubygems_version: !ruby/object:Gem::Requirement
160
160
  requirements:
161
161
  - - ">="