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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9378e236733ed66fb70343fa5e33c508cfdba69f
4
- data.tar.gz: 603031535dbc93e9dacc2ec9fce5f6415f9e6ba4
3
+ metadata.gz: d3d7ff63871865339c874b0881b6b27cd07b3d52
4
+ data.tar.gz: 17824ed6f4e9c9b39eb037e6138d06ba401633da
5
5
  SHA512:
6
- metadata.gz: 4a7aca9a5cf5bae58b1e715c8276f9faee4418718f00fd7230a34a877ef59631e911dffc1e03af3bf34796aedc36955b68ffc85a890640ab4f2458a738904683
7
- data.tar.gz: aca9a38f0f726005d54b7a40cb3901dabb27551cf6521af330523a5f44233b2339633b1a1a2114b2b6b2425ea8d34f23275b0f8d20a86676534c7b4e6eecfcc9
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
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/cf_sim`. To experiment with that code, run `bin/console` for an interactive prompt.
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
- TODO: Write usage instructions here
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, limit_field_count = 1)
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
- field_count < @limit_field_count && @max_count_control_fields_list.any? && field_count < @max_count_control_fields_list.first.size
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
@@ -1,3 +1,3 @@
1
1
  module CfSim
2
- VERSION = "1.0.0"
2
+ VERSION = '1.1.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cf_sim
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - pinzolo