cf_sim 1.0.0 → 1.1.0
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/README.md +21 -4
- data/lib/cf_sim/cli.rb +5 -5
- data/lib/cf_sim/control_field_set_finder.rb +10 -14
- data/lib/cf_sim/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d3d7ff63871865339c874b0881b6b27cd07b3d52
|
4
|
+
data.tar.gz: 17824ed6f4e9c9b39eb037e6138d06ba401633da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 194c9d438fa7d835cb2b2c27b856046250909170f1eb24111dbc3345226e7a35e63b0b203efd21bf934cc4920b2bd1966b8b98245760dac589af309d2f2eb6a1
|
7
|
+
data.tar.gz: 28560304774e952dcd6ca050150cf20e2dc3f2789aa73b41efe94da1206af4afc4148b74b2ac55f0fcb341df39adfeb2af2ce76bbee7ee224495ec0095ec7ea0
|
data/README.md
CHANGED
@@ -2,9 +2,7 @@
|
|
2
2
|
[](http://travis-ci.org/pinzolo/cf_sim)
|
3
3
|
[](https://coveralls.io/r/pinzolo/cf_sim)
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
TODO: Delete this and the text above, and describe your gem
|
5
|
+
ポータルを列挙したデータファイルから多重CFのURLを出力するシミュレータ
|
8
6
|
|
9
7
|
## Installation
|
10
8
|
|
@@ -24,7 +22,26 @@ Or install it yourself as:
|
|
24
22
|
|
25
23
|
## Usage
|
26
24
|
|
27
|
-
|
25
|
+
### 指定のファイルに列挙されたポータルから作成できる最大面積の多重CFのURLを出力する
|
26
|
+
|
27
|
+
```sh
|
28
|
+
cf_sim max_area <data_file>
|
29
|
+
```
|
30
|
+
|
31
|
+
### 指定のファイルに列挙されたポータルから作成できる最大枚数の多重CFのURLを面積順に出力する
|
32
|
+
|
33
|
+
```sh
|
34
|
+
# あるだけ出力
|
35
|
+
cf_sim max_count <data_file>
|
36
|
+
|
37
|
+
# 面積の大きい順から10個出力
|
38
|
+
cf_sim max_count <data_file> 10
|
39
|
+
```
|
40
|
+
|
41
|
+
### ポータルデータファイルの書式
|
42
|
+
|
43
|
+
各行が `緯度,経度,ポータル名` の CSV ファイル([参考](test/data_file.txt))
|
44
|
+
ただし、ポータル名は必須ではない
|
28
45
|
|
29
46
|
## Development
|
30
47
|
|
data/lib/cf_sim/cli.rb
CHANGED
@@ -8,9 +8,9 @@ class CfSim::CLI < Thor
|
|
8
8
|
puts @generator.fields_link(fields)
|
9
9
|
end
|
10
10
|
|
11
|
-
desc 'max_count DATA_FILE', 'print max count control fields URL list.'
|
12
|
-
def max_count(data_file)
|
13
|
-
finder = load_finder_from(data_file)
|
11
|
+
desc 'max_count DATA_FILE LIMIT', 'print max count control fields URL list.'
|
12
|
+
def max_count(data_file, limit = nil)
|
13
|
+
finder = load_finder_from(data_file, limit ? limit.to_i : nil)
|
14
14
|
fields_list = finder.find_max_count_fields_list
|
15
15
|
max_area = fields_list.first.total_area
|
16
16
|
fields_list.each do |fields|
|
@@ -21,11 +21,11 @@ class CfSim::CLI < Thor
|
|
21
21
|
|
22
22
|
private
|
23
23
|
|
24
|
-
def load_finder_from(data_file)
|
24
|
+
def load_finder_from(data_file, limit)
|
25
25
|
portals = CfSim::DataFileParser.new(data_file).parse
|
26
26
|
portal_map = CfSim::PortalMap.new(portals)
|
27
27
|
@generator = CfSim::IntelMapUrlGenerator.new(portal_map)
|
28
|
-
CfSim::ControlFieldSetFinder.new(CfSim::PointList.new(portal_map.points).creatable_fields)
|
28
|
+
CfSim::ControlFieldSetFinder.new(CfSim::PointList.new(portal_map.points).creatable_fields, limit_field_count: limit)
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -2,10 +2,12 @@ require 'cf_sim/coexistable_field_map'
|
|
2
2
|
require 'cf_sim/control_field_set'
|
3
3
|
|
4
4
|
class CfSim::ControlFieldSetFinder
|
5
|
-
def initialize(fields,
|
5
|
+
def initialize(fields, options = {})
|
6
6
|
@fields = CfSim::ControlFieldSet.new(fields.sort_by(&:area).reverse)
|
7
7
|
@coexistable_field_map = CfSim::CoexistableFieldMap.new(@fields)
|
8
|
-
@limit_field_count = limit_field_count
|
8
|
+
@limit_field_count = options[:limit_field_count] || nil
|
9
|
+
@max_count_control_fields_list = []
|
10
|
+
@max_area_control_fields = nil
|
9
11
|
end
|
10
12
|
|
11
13
|
def find_max_area_fields
|
@@ -14,12 +16,6 @@ class CfSim::ControlFieldSetFinder
|
|
14
16
|
@max_area_control_fields
|
15
17
|
end
|
16
18
|
|
17
|
-
def find_all_fields_list
|
18
|
-
@control_fields_list = []
|
19
|
-
find_recursively(CfSim::ControlFieldSet.new, @fields, :all)
|
20
|
-
@control_fields_list
|
21
|
-
end
|
22
|
-
|
23
19
|
def find_max_count_fields_list
|
24
20
|
@max_count_control_fields_list = []
|
25
21
|
find_recursively(CfSim::ControlFieldSet.new, @fields, :max_count)
|
@@ -31,7 +27,7 @@ class CfSim::ControlFieldSetFinder
|
|
31
27
|
def find_recursively(fields, coexistable_fields, type)
|
32
28
|
return if ignore?(fields, coexistable_fields, type)
|
33
29
|
|
34
|
-
if coexistable_fields.empty?
|
30
|
+
if coexistable_fields.empty? || limit?
|
35
31
|
deploy(fields, type)
|
36
32
|
else
|
37
33
|
coexistable_fields.each do |field|
|
@@ -44,8 +40,6 @@ class CfSim::ControlFieldSetFinder
|
|
44
40
|
case type
|
45
41
|
when :max_area
|
46
42
|
replace_if_max(fields)
|
47
|
-
when :all
|
48
|
-
append_to_list(fields, @control_fields_list)
|
49
43
|
when :max_count
|
50
44
|
append_or_create_if_max_count(fields)
|
51
45
|
end
|
@@ -72,12 +66,14 @@ class CfSim::ControlFieldSetFinder
|
|
72
66
|
case type
|
73
67
|
when :max_area
|
74
68
|
@max_area_control_fields && fields.total_area + coexistable_fields.total_area <= @max_area_control_fields.total_area
|
75
|
-
when :all
|
76
|
-
field_count < @limit_field_count
|
77
69
|
when :max_count
|
78
|
-
|
70
|
+
@max_count_control_fields_list.any? && field_count < @max_count_control_fields_list.first.size
|
79
71
|
else
|
80
72
|
false
|
81
73
|
end
|
82
74
|
end
|
75
|
+
|
76
|
+
def limit?
|
77
|
+
@limit_field_count && @max_count_control_fields_list && @max_count_control_fields_list.size == @limit_field_count
|
78
|
+
end
|
83
79
|
end
|
data/lib/cf_sim/version.rb
CHANGED