回答編集履歴

12

修正

2017/05/09 22:12

投稿

退会済みユーザー
test CHANGED
@@ -256,7 +256,7 @@
256
256
 
257
257
 
258
258
 
259
- 考えてみました。
259
+ データベースは分かりませんが考えてみました。
260
260
 
261
261
  入れる日が少ない人から順に2つずつ日を選べるようにしました。
262
262
 

11

修正

2017/05/09 22:12

投稿

退会済みユーザー
test CHANGED
@@ -106,7 +106,7 @@
106
106
 
107
107
 
108
108
 
109
- # 各人の入れる頻度を数えて入れる日が少ない順に並べる
109
+ # 各人の入れる回数を数えて入れる日が少ない順に並べる
110
110
 
111
111
  check_list = list.flatten
112
112
 

10

修正

2017/05/09 22:09

投稿

退会済みユーザー
test CHANGED
@@ -270,4 +270,4 @@
270
270
 
271
271
  2017/05/10追記
272
272
 
273
- shuffleをつけてみました。
273
+ shuffleをつけてみました。この変更で場合によってLにもシフトが割り当てられるようになりました。

9

修正

2017/05/09 22:07

投稿

退会済みユーザー
test CHANGED
@@ -110,7 +110,7 @@
110
110
 
111
111
  check_list = list.flatten
112
112
 
113
- name.map!{|e| [check_list.count(e), e]}.shuffle! # ここを変更
113
+ name.map!{|e| [check_list.count(e), e]}.shuffle! # ここを変更(shuffle or sort)
114
114
 
115
115
 
116
116
 

8

修正

2017/05/09 22:02

投稿

退会済みユーザー
test CHANGED
@@ -110,7 +110,7 @@
110
110
 
111
111
  check_list = list.flatten
112
112
 
113
- name.map!{|e| [check_list.count(e), e]}.sort!
113
+ name.map!{|e| [check_list.count(e), e]}.shuffle! # ここを変更
114
114
 
115
115
 
116
116
 
@@ -265,3 +265,9 @@
265
265
  #補足
266
266
 
267
267
  私のコードだとsampleのLのようにシフトが割り当てられない場合があります。
268
+
269
+
270
+
271
+ 2017/05/10追記
272
+
273
+ shuffleをつけてみました。

7

修正

2017/05/09 22:00

投稿

退会済みユーザー
test CHANGED
@@ -256,7 +256,7 @@
256
256
 
257
257
 
258
258
 
259
- 私にとっは難い問題だっので間違えています
259
+ 考えみました。
260
260
 
261
261
  入れる日が少ない人から順に2つずつ日を選べるようにしました。
262
262
 
@@ -264,4 +264,4 @@
264
264
 
265
265
  #補足
266
266
 
267
- sampleのLのようにシフトが割り当てられない場合があります。
267
+ 私のコードだとsampleのLのようにシフトが割り当てられない場合があります。

6

修正

2017/05/09 21:53

投稿

退会済みユーザー
test CHANGED
@@ -256,8 +256,12 @@
256
256
 
257
257
 
258
258
 
259
- 私にとっては難しい問題だったので恐らく間違えていると思います。
259
+ 私にとっては難しい問題だったので間違えています。
260
260
 
261
261
  入れる日が少ない人から順に2つずつ日を選べるようにしました。
262
262
 
263
263
  1日しか入れない人は1日だけ表示されます。
264
+
265
+ #補足
266
+
267
+ sampleのLのようにシフトが割り当てられない場合があります。

5

修正

2017/05/09 21:52

投稿

退会済みユーザー
test CHANGED
@@ -14,8 +14,14 @@
14
14
 
15
15
  # シフトのサンプルを作成
16
16
 
17
+
18
+
17
19
  siken = []
18
20
 
21
+
22
+
23
+ =begin
24
+
19
25
  15.times do |n|
20
26
 
21
27
  t = data.sample(rand(1..30)).sort
@@ -26,6 +32,54 @@
26
32
 
27
33
  end
28
34
 
35
+ =end
36
+
37
+
38
+
39
+ sample = [
40
+
41
+ ['A', []],
42
+
43
+ ['B', [1]],
44
+
45
+ ['C', [1, 2, 13]],
46
+
47
+ ['D', [3, 2, 6]],
48
+
49
+ ['E', [2, 14, 23, 24, 29, 5]],
50
+
51
+ ['F', [4, 8, 7]],
52
+
53
+ ['G', [23, 27]],
54
+
55
+ ['H', [4]],
56
+
57
+ ['I', [15, 12, 11]],
58
+
59
+ ['J', [3, 6, 9, 12, 13]],
60
+
61
+ ['K', [7, 8]],
62
+
63
+ ['L', [4, 8, 3]],
64
+
65
+ ['M', [12, 15, 19]],
66
+
67
+ ['N', [21, 22]],
68
+
69
+ ['O', [30]]
70
+
71
+ ]
72
+
73
+
74
+
75
+ sample.each do |key, value|
76
+
77
+ hash[key.to_sym] = value
78
+
79
+ siken << value
80
+
81
+ end
82
+
29
83
 
30
84
 
31
85
  # シフトのサンプルから一日ごとに一か月の間に各人が入れる日の配列作成
@@ -108,54 +162,48 @@
108
162
 
109
163
  key = list[d - 1].sample
110
164
 
111
- begin
165
+ next if key.nil?
112
-
166
+
113
- sift[name.index(key)][1].push(d)
167
+ sift[name.index(key)][1].push(d)
168
+
114
-
169
+ end
170
+
171
+ end
172
+
173
+
174
+
175
+ # 出力
176
+
177
+ a = []
178
+
115
- rescue TypeError
179
+ sift.each do |n, v|
116
-
180
+
117
- # Do Nothing
181
+ a << v
182
+
183
+ puts "#{n}:#{v.sort.join(',')}"
184
+
185
+ end
186
+
187
+
188
+
189
+ # 確認用
190
+
191
+ puts '-' * 20
192
+
193
+ a.each_with_index do |e, i|
194
+
195
+ flags = false
196
+
197
+ e.each do |ee|
198
+
199
+ unless siken[i].include?(ee)
200
+
201
+ flags = true
118
202
 
119
203
  end
120
204
 
121
205
  end
122
206
 
123
- end
124
-
125
-
126
-
127
- # 出力
128
-
129
- a = []
130
-
131
- sift.each do |n, v|
132
-
133
- a << v
134
-
135
- puts "#{n}:#{v.sort.join(',')}"
136
-
137
- end
138
-
139
-
140
-
141
- # 確認用
142
-
143
- puts '-' * 20
144
-
145
- a.each_with_index do |e, i|
146
-
147
- flags = false
148
-
149
- e.each do |ee|
150
-
151
- unless siken[i].include?(ee)
152
-
153
- flags = true
154
-
155
- end
156
-
157
- end
158
-
159
207
  p flags
160
208
 
161
209
  end
@@ -174,35 +222,35 @@
174
222
 
175
223
  ```
176
224
 
177
- A:20,29
225
+ A:
178
-
179
- B:17,18
226
+
180
-
181
- C:11,28
182
-
183
- D:14,27
184
-
185
- E:8
227
+ B:1
186
-
228
+
187
- F:2,19
229
+ C:2,13
188
-
230
+
189
- G:5,6
231
+ D:3,6
232
+
190
-
233
+ E:5,14,24,29
234
+
235
+ F:
236
+
237
+ G:23,27
238
+
239
+ H:4
240
+
191
- H:4,15
241
+ I:11,15
192
-
193
- I:22,23,30
242
+
194
-
195
- J:3,13
243
+ J:9
196
-
244
+
197
- K:16,21
245
+ K:7,8
198
-
246
+
199
- L:1,10
247
+ L:
200
-
248
+
201
- M:12,25
249
+ M:12,19
202
-
250
+
203
- N:7,24
251
+ N:21,22
204
-
252
+
205
- O:9,26
253
+ O:30
206
254
 
207
255
  ```
208
256
 

4

修正

2017/05/09 21:44

投稿

退会済みユーザー
test CHANGED
@@ -68,39 +68,23 @@
68
68
 
69
69
  test = hash[c[1].to_sym]
70
70
 
71
+ tmp = []
72
+
71
- if test.size == 1
73
+ test.each do |e|
72
-
73
- day = test.first
74
+
74
-
75
- if data.include?(day)
75
+ if data.include?(e)
76
-
76
+
77
- sift << [c[1], [day]]
77
+ tmp << e
78
-
78
+
79
- end
79
+ end
80
-
81
- data -= test
80
+
82
-
83
- else
84
-
85
- tmp = []
86
-
87
- test.each do |e|
88
-
89
- if data.include?(e)
90
-
91
- tmp << e
92
-
93
- end
81
+ end
94
-
95
- end
82
+
96
-
97
- day = tmp.sample(2)
83
+ day = tmp.sample(2)
98
-
84
+
99
- sift << [c[1], day]
85
+ sift << [c[1], day]
100
-
86
+
101
- data -= day
87
+ data -= day
102
-
103
- end
104
88
 
105
89
  end
106
90
 
@@ -114,6 +98,8 @@
114
98
 
115
99
  check = (1..30).to_a - sift.map{|e| e[1]}.flatten
116
100
 
101
+
102
+
117
103
  unless check.size.zero?
118
104
 
119
105
  name_list = []
@@ -122,7 +108,15 @@
122
108
 
123
109
  key = list[d - 1].sample
124
110
 
111
+ begin
112
+
125
- sift[name.index(key)][1].push(d)
113
+ sift[name.index(key)][1].push(d)
114
+
115
+ rescue TypeError
116
+
117
+ # Do Nothing
118
+
119
+ end
126
120
 
127
121
  end
128
122
 

3

修正

2017/05/09 21:19

投稿

退会済みユーザー
test CHANGED
@@ -14,9 +14,15 @@
14
14
 
15
15
  # シフトのサンプルを作成
16
16
 
17
+ siken = []
18
+
17
19
  15.times do |n|
18
20
 
19
- hash[:"#{name[n]}"] = data.sample(rand(1..30)).sort
21
+ t = data.sample(rand(1..30)).sort
22
+
23
+ hash[:"#{name[n]}"] = t
24
+
25
+ siken << t
20
26
 
21
27
  end
22
28
 
@@ -100,21 +106,73 @@
100
106
 
101
107
 
102
108
 
109
+ # 残った日の割り当て
110
+
111
+ sift.sort!
112
+
113
+ name.map!{|e| e[1]}.sort!
114
+
115
+ check = (1..30).to_a - sift.map{|e| e[1]}.flatten
116
+
117
+ unless check.size.zero?
118
+
119
+ name_list = []
120
+
121
+ check.each do |d|
122
+
123
+ key = list[d - 1].sample
124
+
125
+ sift[name.index(key)][1].push(d)
126
+
127
+ end
128
+
129
+ end
130
+
131
+
132
+
103
133
  # 出力
104
134
 
105
- sift.sort!
135
+ a = []
106
136
 
107
137
  sift.each do |n, v|
108
138
 
139
+ a << v
140
+
109
- puts "#{n}:#{v.join(',')}"
141
+ puts "#{n}:#{v.sort.join(',')}"
110
-
142
+
111
- end
143
+ end
144
+
145
+
146
+
112
-
147
+ # 確認用
148
+
113
-
149
+ puts '-' * 20
150
+
114
-
151
+ a.each_with_index do |e, i|
152
+
115
-
153
+ flags = false
154
+
116
-
155
+ e.each do |ee|
156
+
117
-
157
+ unless siken[i].include?(ee)
158
+
159
+ flags = true
160
+
161
+ end
162
+
163
+ end
164
+
165
+ p flags
166
+
167
+ end
168
+
169
+
170
+
171
+ a.flatten!
172
+
173
+ p a.size
174
+
175
+ p a.uniq.size
118
176
 
119
177
  ```
120
178
 
@@ -122,35 +180,35 @@
122
180
 
123
181
  ```
124
182
 
183
+ A:20,29
184
+
185
+ B:17,18
186
+
187
+ C:11,28
188
+
189
+ D:14,27
190
+
191
+ E:8
192
+
193
+ F:2,19
194
+
195
+ G:5,6
196
+
197
+ H:4,15
198
+
199
+ I:22,23,30
200
+
201
+ J:3,13
202
+
203
+ K:16,21
204
+
205
+ L:1,10
206
+
125
- A:12,23
207
+ M:12,25
126
-
127
- B:15,9
208
+
128
-
129
- C:22,1
130
-
131
- D:3,18
132
-
133
- E:2,8
134
-
135
- F:11,4
136
-
137
- G:25,16
138
-
139
- H:26,10
140
-
141
- I:17,24
209
+ N:7,24
142
-
143
- J:14,6
210
+
144
-
145
- K:30
146
-
147
- L:19,20
211
+ O:9,26
148
-
149
- M:27,28
150
-
151
- N:29,21
152
-
153
- O:7,5
154
212
 
155
213
  ```
156
214
 

2

修正

2017/05/09 20:56

投稿

退会済みユーザー
test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
 
24
24
 
25
- # シフトのサンプルから一日ごとに一か月の間に各人が入れる日の配列作成
25
+ # シフトのサンプルから一日ごとに一か月の間に各人が入れる日の配列作成
26
26
 
27
27
  list = []
28
28
 
@@ -54,7 +54,7 @@
54
54
 
55
55
 
56
56
 
57
- # シフトの情報作成
57
+ # シフトの情報作成
58
58
 
59
59
  sift = []
60
60
 
@@ -64,7 +64,13 @@
64
64
 
65
65
  if test.size == 1
66
66
 
67
+ day = test.first
68
+
69
+ if data.include?(day)
70
+
67
- sift << [c[1], [test.first]]
71
+ sift << [c[1], [day]]
72
+
73
+ end
68
74
 
69
75
  data -= test
70
76
 
@@ -103,6 +109,12 @@
103
109
  puts "#{n}:#{v.join(',')}"
104
110
 
105
111
  end
112
+
113
+
114
+
115
+
116
+
117
+
106
118
 
107
119
  ```
108
120
 

1

修正

2017/05/09 20:01

投稿

退会済みユーザー
test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
 
24
24
 
25
- # シフトのサンプルから一日ごとに一か月の間に各人が入れる日の配列作成
25
+ # シフトのサンプルから一日ごとに一か月の間に各人が入れる日の配列作成
26
26
 
27
27
  list = []
28
28