cf_sim 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Build Status](https://travis-ci.org/pinzolo/cf_sim.svg)](http://travis-ci.org/pinzolo/cf_sim)
|
3
3
|
[![Coverage Status](https://coveralls.io/repos/pinzolo/cf_sim/badge.png)](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