tasks_generator 1.4 → 1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 89b702044292b9e3fd8b049809fab43889864f27
4
+ data.tar.gz: ede3a145bb98bf42f0c5bdc4c2f5373cd794f005
5
+ SHA512:
6
+ metadata.gz: cd683f242dff57aed1d8a6009dd571f25491d7f83ca3ab6a26ead00bb4df43c2c164f46d19d6a9f43b1adb8069206319e1aab171a7165f9b15d8efaafbd94513
7
+ data.tar.gz: 6f779020b2a36bcf7cf2a9214f7a701ee4ff784d08ea38976e02d865f06aa802ef2bf3027880f98a8f0ec86619f148a5537fc41adadaff18cdb167417854a807
@@ -33,7 +33,7 @@ struct config_t {
33
33
  }
34
34
  };
35
35
 
36
- std::ostream& operator << (std::ostream& out, config_t const &config) {
36
+ inline std::ostream& operator << (std::ostream& out, config_t const &config) {
37
37
  out << "config.life_time = " << config.life_time << std::endl;
38
38
  out << "config.population_size = " << config.population_size << std::endl;
39
39
  out << "config.mutation_chance = " << config.mutation_chance << std::endl;
@@ -0,0 +1,33 @@
1
+ #include "generator.h"
2
+
3
+ #include <unordered_map>
4
+ #include <vector>
5
+
6
+ namespace ailab {
7
+
8
+ void generator_t::mark_second_levels(std::vector<question_t> &questions, std::vector<topic_t> const &topics) noexcept {
9
+ std::unordered_map<size_t, size_t> topic_id_to_index;
10
+ std::unordered_map<size_t, size_t> topic_index_to_parent_index;
11
+ for (size_t i = 0; i < topics.size(); ++i)
12
+ topic_id_to_index[topics[i].get_topic_id()] = i;
13
+ for (size_t i = 0; i < topics.size(); ++i)
14
+ if (topic_id_to_index.find(topics[i].get_parent_id()) != topic_id_to_index.end())
15
+ topic_index_to_parent_index[i] = topic_id_to_index[topics[i].get_parent_id()];
16
+ for (question_t &q : questions) {
17
+ size_t topic_id = q.get_topic_id();
18
+ if (topic_id_to_index.find(topic_id) != topic_id_to_index.end()) {
19
+ size_t topic_index = topic_id_to_index[topic_id];
20
+ while (true) {
21
+ if (topic_index_to_parent_index.find(topic_index) == topic_index_to_parent_index.end())
22
+ break;
23
+ size_t parent_index = topic_index_to_parent_index[topic_index];
24
+ if (topic_index_to_parent_index.find(parent_index) == topic_index_to_parent_index.end())
25
+ break;
26
+ topic_index = parent_index;
27
+ }
28
+ q.set_second_level_topic_id(topics[topic_index].get_topic_id());
29
+ }
30
+ }
31
+ }
32
+
33
+ }
@@ -119,23 +119,28 @@ class generator_t {
119
119
  return true;
120
120
  }
121
121
 
122
+ void mark_second_levels(std::vector<question_t> &questions, std::vector<topic_t> const &topics) noexcept;
123
+
122
124
  public:
123
- generator_t(config_t const &cnf, std::vector<topic_t> const &topics, std::vector<question_t> const &questions) noexcept :
125
+ generator_t(config_t const &cnf, std::vector<topic_t> const &topics_, std::vector<question_t> const &questions_) noexcept :
124
126
  config(cnf),
125
- topics(topics),
126
- questions(questions) {
127
+ topics(topics_),
128
+ questions(questions_) {
129
+ mark_second_levels(questions, topics);
127
130
  }
128
131
 
129
- generator_t(config_t &&cnf, std::vector<topic_t> &&topics, std::vector<question_t> &&questions) noexcept :
132
+ generator_t(config_t &&cnf, std::vector<topic_t> &&topics_, std::vector<question_t> &&questions_) noexcept :
130
133
  config(cnf),
131
- topics(topics),
132
- questions(questions) {
134
+ topics(topics_),
135
+ questions(questions_) {
136
+ mark_second_levels(questions, topics);
133
137
  }
134
138
 
135
139
  generator_t(generator_t const &other) noexcept :
136
140
  config(other.config),
137
141
  topics(other.topics),
138
142
  questions(other.questions) {
143
+ mark_second_levels(questions, topics);
139
144
  }
140
145
 
141
146
  variants_t generate() {
@@ -5,7 +5,7 @@
5
5
  namespace ailab {
6
6
 
7
7
  class question_t {
8
- size_t question_id, topic_id, difficulty, select_id;
8
+ size_t question_id, topic_id, difficulty, second_level_topic_id;
9
9
  std::string text;
10
10
 
11
11
  public:
@@ -13,15 +13,16 @@ class question_t {
13
13
  question_id(question_id),
14
14
  topic_id(topic_id),
15
15
  difficulty(difficulty),
16
+ second_level_topic_id(0),
16
17
  text(text) {
17
18
  }
18
19
 
19
- void set_select_id(size_t x) noexcept {
20
- select_id = x;
20
+ void set_second_level_topic_id(size_t x) noexcept {
21
+ second_level_topic_id = x;
21
22
  }
22
23
 
23
- size_t get_select_id() const noexcept {
24
- return select_id;
24
+ size_t get_second_level_topic_id() const noexcept {
25
+ return second_level_topic_id;
25
26
  }
26
27
 
27
28
  size_t get_question_id() const noexcept {
@@ -54,7 +54,6 @@ class question_shaker_t {
54
54
  throw std::logic_error("Not enough questions for topic");
55
55
  size_t r = rand() % questions.at(topic_id).size();
56
56
  question_t result = questions.at(topic_id)[r];
57
- result.set_select_id(topic_id);
58
57
  return result;
59
58
  }
60
59
  };
@@ -86,6 +86,18 @@ class variants_t {
86
86
  count += buffer[i] != buffer[i - 1];
87
87
  fitness = double(count) / questions_count;
88
88
  }
89
+ {
90
+ for (size_t i = 0; i < questions.size(); ++i) {
91
+ size_t buffer[questions[i].size()];
92
+ for (size_t j = 0; j < questions[i].size(); ++j)
93
+ buffer[j] = questions[i][j].get_second_level_topic_id();
94
+ std::sort(buffer, buffer + questions[i].size());
95
+ size_t count = 1;
96
+ for (size_t j = 1; j < questions[i].size(); ++j)
97
+ count += buffer[j] != buffer[j - 1];
98
+ fitness += count;
99
+ }
100
+ }
89
101
  {
90
102
  for (size_t i = 0; i < questions.size(); ++i) {
91
103
  size_t buffer[questions[i].size()];
@@ -1,3 +1,3 @@
1
1
  module TasksGenerator
2
- VERSION = "1.4"
2
+ VERSION = "1.5"
3
3
  end
@@ -22,7 +22,8 @@ spec = Gem::Specification.new do |spec|
22
22
 
23
23
  spec.add_runtime_dependency "bundler", "~> 1.6"
24
24
  spec.add_runtime_dependency "rake"
25
- spec.add_runtime_dependency "rice"
25
+ spec.add_runtime_dependency "rake-compiler", ">= 0.9.5"
26
+ spec.add_runtime_dependency "rice", ">= 1.7.0"
26
27
 
27
28
  spec.platform = Gem::Platform::RUBY
28
29
  spec.extensions = %w[ext/tasks_generator/extconf.rb]
metadata CHANGED
@@ -1,64 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tasks_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.4'
5
- prerelease:
4
+ version: '1.5'
6
5
  platform: ruby
7
6
  authors:
8
7
  - Arslan Urtashev
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2015-04-17 00:00:00.000000000 Z
11
+ date: 2015-05-14 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
19
  version: '1.6'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: '1.6'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake-compiler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.9.5
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.9.5
46
55
  - !ruby/object:Gem::Dependency
47
56
  name: rice
48
57
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
58
  requirements:
51
- - - ! '>='
59
+ - - ">="
52
60
  - !ruby/object:Gem::Version
53
- version: '0'
61
+ version: 1.7.0
54
62
  type: :runtime
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
65
  requirements:
59
- - - ! '>='
66
+ - - ">="
60
67
  - !ruby/object:Gem::Version
61
- version: '0'
68
+ version: 1.7.0
62
69
  description: Test Tasks Generator for AI lab MEPhI
63
70
  email:
64
71
  - urtashev@gmail.com
@@ -74,6 +81,7 @@ files:
74
81
  - ext/tasks_generator/bindings.cc
75
82
  - ext/tasks_generator/config.h
76
83
  - ext/tasks_generator/extconf.rb
84
+ - ext/tasks_generator/generator.cc
77
85
  - ext/tasks_generator/generator.h
78
86
  - ext/tasks_generator/question.h
79
87
  - ext/tasks_generator/question_shaker.h
@@ -85,26 +93,25 @@ files:
85
93
  homepage: https://github.com/Avitella/tasks_generator
86
94
  licenses:
87
95
  - MIT
96
+ metadata: {}
88
97
  post_install_message:
89
98
  rdoc_options: []
90
99
  require_paths:
91
100
  - lib
92
101
  required_ruby_version: !ruby/object:Gem::Requirement
93
- none: false
94
102
  requirements:
95
- - - ! '>='
103
+ - - ">="
96
104
  - !ruby/object:Gem::Version
97
105
  version: '0'
98
106
  required_rubygems_version: !ruby/object:Gem::Requirement
99
- none: false
100
107
  requirements:
101
- - - ! '>='
108
+ - - ">="
102
109
  - !ruby/object:Gem::Version
103
110
  version: '0'
104
111
  requirements: []
105
112
  rubyforge_project:
106
- rubygems_version: 1.8.23
113
+ rubygems_version: 2.4.5
107
114
  signing_key:
108
- specification_version: 3
115
+ specification_version: 4
109
116
  summary: Test Tasks Generator
110
117
  test_files: []