質問編集履歴

11

2020/08/03 07:46

投稿

reina1125
reina1125

スコア21

test CHANGED
@@ -1 +1 @@
1
- pythonで組み合わせをチェックするプログラム
1
+ 組み合わせをチェックするプログラム
test CHANGED
File without changes

10

2020/08/03 07:46

投稿

reina1125
reina1125

スコア21

test CHANGED
File without changes
test CHANGED
@@ -1 +1 @@
1
- 全列挙した組み合わせから支配されている組み合わせを除去して、残りの組み合わせを全列挙する方法があれば教えていただきたいです。
1
+ 全列挙した組み合わせから特定の組み合わせを除去して、残りの組み合わせを全列挙する方法があれば教えていただきたいです。

9

ra

2020/08/03 07:45

投稿

reina1125
reina1125

スコア21

test CHANGED
@@ -1 +1 @@
1
- 支配関係をチェックするプログラム
1
+ pythonで組み合わせをチェックするプログラム
test CHANGED
@@ -1,391 +1 @@
1
- |優先度|A|B | C|
2
-
3
- |:--|:--:|--:|
4
-
5
- | 1|{ 1, 1, 0, 0 }|{ 1, 0, 1, 0 }|{ 0, 1, 0, 1 }|
6
-
7
- | 2|{ 1, 0, 1, 0 }|{ 0, 0, 1, 0 }|{ 0, 0, 0, 1 }|
8
-
9
- | 3|{ 0, 1, 0, 0 }|{ 0, 1, 0, 0 }|{ 1, 0, 0, 0 }|
10
-
11
-
12
-
13
- 上記のようにA,B,Cの3社があり、各社に1~3位の優先度がついたプロジェクトがあるとします。
14
-
15
- 例えば、A社の1位のプロジェクトは{1,1,0,0}です。
16
-
17
-
18
-
19
- この状況で実現したいことは下記の2ステップです。
20
-
21
- ①プロジェクトの和が{1,1,1,1}になるような組み合わせを全列挙する
22
-
23
- ②支配関係にある組み合わせがある場合、支配されている組み合わせを消去する
24
-
25
-
26
-
27
-
28
-
29
- ①は下記のコードで全列挙が可能になりましたが、②の支配関係をチェックする部分がわかりません。
30
-
31
- 例えば(1){A社1位,B社1,C社1位}と(2){A社2位,B社1位,C社1位}の組み合わせがあった場合、
32
-
33
- B社,C社の順位は同じ1位ですが、A社に関しては(1)が1位,(2)が2位なので
34
-
35
- (2)の組み合わせは(1)の組み合わせに含まれている(=支配されている)と言います。
36
-
37
-
38
-
39
- 支配関係の条件は
40
-
41
- ・同じ数のプロジェクトで成り立っていること
42
-
43
- ・同じ会社において、支配される側の順位が支配する側の順位以下であること
44
-
45
- (例)
46
-
47
- 支配する側 ==> A社1位、B社2位、C社2位
48
-
49
- 支配される側==>A社2位、B社2位、C社3位
50
-
51
-
52
-
53
- ①のステップで全列挙した組み合わせから支配されている組み合わせを除去して、残りの組み合わせを全列挙する方法があれば教えていただきたいです。
1
+ 全列挙した組み合わせから支配されている組み合わせを除去して、残りの組み合わせを全列挙する方法があれば教えていただきたいです。
54
-
55
-
56
-
57
-
58
-
59
- 私が現状考えている方法としては下記です。
60
-
61
- ①配列を用意してそこに最初の解の順位を保存
62
-
63
- ②以降、既存の解と新規の解との順位を比較
64
-
65
-     ----支配関係がある場合 ==>支配されている解を消去、新たな解を保存
66
-
67
- ----支配関係がない場合 ==>新たな解として保存
68
-
69
- ③保存されている解を出力
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
-
80
-
81
- ```java
82
-
83
- public class NNN {
84
-
85
-
86
-
87
- static int ProjectA[][] = { { 1, 1, 0, 0 }, { 0, 1, 0, 0 }, { 0, 0, 0, 1 } };
88
-
89
- static int ProjectB[][] = { { 1, 0, 1, 0 }, { 0, 0, 1, 0 }, { 1, 0, 0, 0 } };
90
-
91
- static int ProjectC[][] = { { 1, 0, 0, 1 }, { 0, 0, 0, 1 }, { 0, 0, 1, 0 } };
92
-
93
-
94
-
95
- static int[][][] ProjectALL = {ProjectA, ProjectB, ProjectC};
96
-
97
- static int count=0;
98
-
99
-
100
-
101
- public static void main(String[] args) {
102
-
103
- test2(args);
104
-
105
- test3(args);
106
-
107
- test4(args);
108
-
109
- }
110
-
111
-
112
-
113
-
114
-
115
- //[case1] プロジェクトが2つの組み合わせ--------------------------------------
116
-
117
- public static void test2(String[] args) {
118
-
119
- for (int i = 0; i < 9; i++) {
120
-
121
- for (int j = i ; j < 9; j++) {
122
-
123
- if (check2(i, j)) {
124
-
125
- for (int ret = 0; ret < 9; ret++) {
126
-
127
- sysoutResult(ret, ret == i || ret == j );
128
-
129
- }
130
-
131
- System.out.println("-------------------------");
132
-
133
- }
134
-
135
- }
136
-
137
- }
138
-
139
- }
140
-
141
-
142
-
143
- private static boolean check2(int i, int j) {
144
-
145
- //配列の中身の合計が{1,1,1,1}になるかチェックする
146
-
147
- return getArray(i)[0] + getArray(j)[0] == 1 &&
148
-
149
- getArray(i)[1] + getArray(j)[1] == 1 &&
150
-
151
- getArray(i)[2] + getArray(j)[2] == 1 &&
152
-
153
- getArray(i)[3] + getArray(j)[3] == 1;
154
-
155
- }
156
-
157
- //---------------------------------------------------------------
158
-
159
-
160
-
161
- //[case2] プロジェクトが3つの組み合わせ ---------------------------------------
162
-
163
- public static void test3(String[] args) {
164
-
165
- for (int i = 0; i < 9; i++) {
166
-
167
- for (int j = i ; j < 9; j++) {
168
-
169
- for (int k = j; k < 9; k++) {
170
-
171
- if (check3(i, j, k)) {
172
-
173
- for (int ret = 0; ret < 9; ret++) {
174
-
175
- sysoutResult(ret, ret == i || ret == j || ret == k);
176
-
177
- }
178
-
179
- System.out.println("-------------------------");
180
-
181
- }
182
-
183
- }
184
-
185
- }
186
-
187
- }
188
-
189
- }
190
-
191
-
192
-
193
- private static boolean check3(int i, int j, int k) {
194
-
195
- //配列の中身の合計が{1,1,1,1}になるかチェックする
196
-
197
- return getArray(i)[0] + getArray(j)[0] + getArray(k)[0] == 1 &&
198
-
199
- getArray(i)[1] + getArray(j)[1] + getArray(k)[1] == 1 &&
200
-
201
- getArray(i)[2] + getArray(j)[2] + getArray(k)[2] == 1 &&
202
-
203
- getArray(i)[3] + getArray(j)[3] + getArray(k)[3] == 1;
204
-
205
- }
206
-
207
- //----------------------------------------------------------------------
208
-
209
-
210
-
211
- //[case3] プロジェクトが4つの組み合わせ --------------------------------------
212
-
213
- public static void test4(String[] args) {
214
-
215
- for (int i = 0; i < 9; i++) {
216
-
217
- for (int j = i ; j < 9; j++) {
218
-
219
- for (int k = j; k < 9; k++) {
220
-
221
- for (int l = k; l < 9; l++) {
222
-
223
- if (check4(i, j, k,l)) {
224
-
225
- for (int ret = 0; ret < 9; ret++) {
226
-
227
- sysoutResult(ret, ret == i || ret == j || ret == k|| ret == l);
228
-
229
- }
230
-
231
- System.out.println("------------------------");
232
-
233
- }
234
-
235
- }
236
-
237
- }
238
-
239
- }
240
-
241
- }
242
-
243
- }
244
-
245
-
246
-
247
- private static boolean check4(int i, int j, int k, int l) {
248
-
249
- //配列の中身の合計が{1,1,1,1}になるかチェックする
250
-
251
- return getArray(i)[0] + getArray(j)[0] + getArray(k)[0]+ getArray(l)[0] == 1 &&
252
-
253
- getArray(i)[1] + getArray(j)[1] + getArray(k)[1]+ getArray(l)[1] == 1 &&
254
-
255
- getArray(i)[2] + getArray(j)[2] + getArray(k)[2]+ getArray(l)[2] == 1 &&
256
-
257
- getArray(i)[3] + getArray(j)[3] + getArray(k)[3]+ getArray(l)[3] == 1;
258
-
259
- }
260
-
261
- //----------------------------------------------------------------------
262
-
263
-
264
-
265
-
266
-
267
-
268
-
269
- private static int[] getArray(int num) {
270
-
271
- return ProjectALL[num / 3][num % 3];
272
-
273
- }
274
-
275
-
276
-
277
- private static void sysoutResult(int num, boolean ret) {
278
-
279
- String company[] = { "A社", "B社", "C社" };
280
-
281
- if(ret==true) {
282
-
283
- System.out.println(
284
-
285
- company[num / 3] + "の" + (num % 3 + 1) + "位のプロジェクト=" + (ret ? "1" : "0"));
286
-
287
- }
288
-
289
- }
290
-
291
- }
292
-
293
-
294
-
295
- ```
296
-
297
- ```
298
-
299
- 出力画面
300
-
301
-
302
-
303
-
304
-
305
- A社の2位のプロジェクト=1
306
-
307
- C社の1位のプロジェクト=1
308
-
309
- -------------------------
310
-
311
- B社の1位のプロジェクト=1
312
-
313
- C社の1位のプロジェクト=1
314
-
315
- -------------------------
316
-
317
- A社の1位のプロジェクト=1
318
-
319
- B社の2位のプロジェクト=1
320
-
321
- C社の2位のプロジェクト=1
322
-
323
- -------------------------
324
-
325
- A社の2位のプロジェクト=1
326
-
327
- A社の3位のプロジェクト=1
328
-
329
- C社の2位のプロジェクト=1
330
-
331
- -------------------------
332
-
333
- A社の2位のプロジェクト=1
334
-
335
- B社の3位のプロジェクト=1
336
-
337
- C社の2位のプロジェクト=1
338
-
339
- -------------------------
340
-
341
- A社の3位のプロジェクト=1
342
-
343
- B社の1位のプロジェクト=1
344
-
345
- C社の2位のプロジェクト=1
346
-
347
- -------------------------
348
-
349
- B社の1位のプロジェクト=1
350
-
351
- B社の3位のプロジェクト=1
352
-
353
- C社の2位のプロジェクト=1
354
-
355
- -------------------------
356
-
357
- B社の2位のプロジェクト=1
358
-
359
- C社の1位のプロジェクト=1
360
-
361
- C社の3位のプロジェクト=1
362
-
363
- -------------------------
364
-
365
- A社の3位のプロジェクト=1
366
-
367
- B社の2位のプロジェクト=1
368
-
369
- C社の2位のプロジェクト=1
370
-
371
- C社の3位のプロジェクト=1
372
-
373
- ------------------------
374
-
375
- B社の2位のプロジェクト=1
376
-
377
- B社の3位のプロジェクト=1
378
-
379
- C社の2位のプロジェクト=1
380
-
381
- C社の3位のプロジェクト=1
382
-
383
- ------------------------
384
-
385
-
386
-
387
-
388
-
389
-
390
-
391
- ```

8

2020/08/03 07:44

投稿

reina1125
reina1125

スコア21

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- |優先度|A|B | C|
1
+ |優先度|A|B | C|
2
2
 
3
3
  |:--|:--:|--:|
4
4
 

7

修正

2020/08/03 03:06

投稿

reina1125
reina1125

スコア21

test CHANGED
File without changes
test CHANGED
@@ -36,6 +36,20 @@
36
36
 
37
37
 
38
38
 
39
+ 支配関係の条件は
40
+
41
+ ・同じ数のプロジェクトで成り立っていること
42
+
43
+ ・同じ会社において、支配される側の順位が支配する側の順位以下であること
44
+
45
+ (例)
46
+
47
+ 支配する側 ==> A社1位、B社2位、C社2位
48
+
49
+ 支配される側==>A社2位、B社2位、C社3位
50
+
51
+
52
+
39
53
  ①のステップで全列挙した組み合わせから支配されている組み合わせを除去して、残りの組み合わせを全列挙する方法があれば教えていただきたいです。
40
54
 
41
55
 

6

修正

2020/07/30 08:09

投稿

reina1125
reina1125

スコア21

test CHANGED
File without changes
test CHANGED
@@ -288,6 +288,18 @@
288
288
 
289
289
 
290
290
 
291
+ A社の2位のプロジェクト=1
292
+
293
+ C社の1位のプロジェクト=1
294
+
295
+ -------------------------
296
+
297
+ B社の1位のプロジェクト=1
298
+
299
+ C社の1位のプロジェクト=1
300
+
301
+ -------------------------
302
+
291
303
  A社の1位のプロジェクト=1
292
304
 
293
305
  B社の2位のプロジェクト=1
@@ -360,4 +372,6 @@
360
372
 
361
373
 
362
374
 
375
+
376
+
363
377
  ```

5

修正

2020/07/30 07:45

投稿

reina1125
reina1125

スコア21

test CHANGED
File without changes
test CHANGED
@@ -98,7 +98,7 @@
98
98
 
99
99
 
100
100
 
101
- //[case1] プロジェクトが2つの組み合わせ------------------------------------------
101
+ //[case1] プロジェクトが2つの組み合わせ--------------------------------------
102
102
 
103
103
  public static void test2(String[] args) {
104
104
 
@@ -140,9 +140,11 @@
140
140
 
141
141
  }
142
142
 
143
- //----------------------------------------------------------------------
143
+ //---------------------------------------------------------------
144
-
144
+
145
+
146
+
145
- //[case2] プロジェクトが3つの組み合わせ ------------------------------------------
147
+ //[case2] プロジェクトが3つの組み合わせ ---------------------------------------
146
148
 
147
149
  public static void test3(String[] args) {
148
150
 

4

修正

2020/07/30 07:43

投稿

reina1125
reina1125

スコア21

test CHANGED
File without changes
test CHANGED
@@ -98,7 +98,7 @@
98
98
 
99
99
 
100
100
 
101
- //[case1] プロジェクトが3つの組み合わせ------------------------------------------
101
+ //[case1] プロジェクトが2つの組み合わせ------------------------------------------
102
102
 
103
103
  public static void test2(String[] args) {
104
104
 

3

修正

2020/07/30 07:41

投稿

reina1125
reina1125

スコア21

test CHANGED
File without changes
test CHANGED
@@ -86,6 +86,8 @@
86
86
 
87
87
  public static void main(String[] args) {
88
88
 
89
+ test2(args);
90
+
89
91
  test3(args);
90
92
 
91
93
  test4(args);
@@ -94,7 +96,53 @@
94
96
 
95
97
 
96
98
 
99
+
100
+
101
+ //[case1] プロジェクトが3つの組み合わせ------------------------------------------
102
+
103
+ public static void test2(String[] args) {
104
+
105
+ for (int i = 0; i < 9; i++) {
106
+
107
+ for (int j = i ; j < 9; j++) {
108
+
109
+ if (check2(i, j)) {
110
+
111
+ for (int ret = 0; ret < 9; ret++) {
112
+
113
+ sysoutResult(ret, ret == i || ret == j );
114
+
115
+ }
116
+
117
+ System.out.println("-------------------------");
118
+
119
+ }
120
+
121
+ }
122
+
123
+ }
124
+
125
+ }
126
+
127
+
128
+
129
+ private static boolean check2(int i, int j) {
130
+
131
+ //配列の中身の合計が{1,1,1,1}になるかチェックする
132
+
133
+ return getArray(i)[0] + getArray(j)[0] == 1 &&
134
+
135
+ getArray(i)[1] + getArray(j)[1] == 1 &&
136
+
137
+ getArray(i)[2] + getArray(j)[2] == 1 &&
138
+
139
+ getArray(i)[3] + getArray(j)[3] == 1;
140
+
141
+ }
142
+
143
+ //----------------------------------------------------------------------
144
+
97
- //[case1] プロジェクトが3つの組み合わせ ------------------------------------------
145
+ //[case2] プロジェクトが3つの組み合わせ ------------------------------------------
98
146
 
99
147
  public static void test3(String[] args) {
100
148
 
@@ -144,7 +192,7 @@
144
192
 
145
193
 
146
194
 
147
- //[case2] プロジェクトが4つの組み合わせ --------------------------------------
195
+ //[case3] プロジェクトが4つの組み合わせ --------------------------------------
148
196
 
149
197
  public static void test4(String[] args) {
150
198
 

2

修正

2020/07/30 07:38

投稿

reina1125
reina1125

スコア21

test CHANGED
File without changes
test CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  |:--|:--:|--:|
4
4
 
5
- | 1|{ 1, 1, 0, 0 }|{ 1, 0, 1, 0 }|{ 1, 0, 0, 1 }|
5
+ | 1|{ 1, 1, 0, 0 }|{ 1, 0, 1, 0 }|{ 0, 1, 0, 1 }|
6
-
6
+
7
- | 2|{ 0, 1, 0, 0 }|{ 0, 0, 1, 0 }|{ 0, 0, 0, 1 }|
7
+ | 2|{ 1, 0, 1, 0 }|{ 0, 0, 1, 0 }|{ 0, 0, 0, 1 }|
8
-
8
+
9
- | 3|{ 0, 0, 0, 1 }|{ 1, 0, 0, 0 }|{ 0, 0, 1, 0 }|
9
+ | 3|{ 0, 1, 0, 0 }|{ 0, 1, 0, 0 }|{ 1, 0, 0, 0 }|
10
10
 
11
11
 
12
12
 
@@ -240,107 +240,73 @@
240
240
 
241
241
  A社の1位のプロジェクト=1
242
242
 
243
+ B社の2位のプロジェクト=1
244
+
245
+ C社の2位のプロジェクト=1
246
+
247
+ -------------------------
248
+
249
+ A社の2位のプロジェクト=1
250
+
243
251
  A社の3位のプロジェクト=1
244
252
 
253
+ C社の2位のプロジェクト=1
254
+
255
+ -------------------------
256
+
257
+ A社の2位のプロジェクト=1
258
+
259
+ B社の3位のプロジェクト=1
260
+
261
+ C社の2位のプロジェクト=1
262
+
263
+ -------------------------
264
+
265
+ A社の3位のプロジェクト=1
266
+
267
+ B社の1位のプロジェクト=1
268
+
269
+ C社の2位のプロジェクト=1
270
+
271
+ -------------------------
272
+
273
+ B社の1位のプロジェクト=1
274
+
275
+ B社の3位のプロジェクト=1
276
+
277
+ C社の2位のプロジェクト=1
278
+
279
+ -------------------------
280
+
245
281
  B社の2位のプロジェクト=1
246
282
 
283
+ C社の1位のプロジェクト=1
284
+
285
+ C社の3位のプロジェクト=1
286
+
247
- -------------------------
287
+ -------------------------
248
-
249
- A社の1位のプロジェクト=1
250
288
 
251
289
  A社の3位のプロジェクト=1
252
290
 
291
+ B社の2位のプロジェクト=1
292
+
293
+ C社の2位のプロジェクト=1
294
+
253
295
  C社の3位のプロジェクト=1
254
296
 
255
- -------------------------
297
+ ------------------------
256
-
257
- A社の1位のプロジェクト=1
258
298
 
259
299
  B社の2位のプロジェクト=1
260
300
 
261
- C社の2位のプロジェクト=1
301
+ B社の3位のプロジェクト=1
262
-
263
- -------------------------
264
-
265
- A社の1位のプロジェクト=1
266
302
 
267
303
  C社の2位のプロジェクト=1
268
304
 
269
305
  C社の3位のプロジェクト=1
270
306
 
271
- -------------------------
272
-
273
- A社の2位のプロジェクト=1
274
-
275
- A社の3位のプロジェクト=1
276
-
277
- B社の1位のプロジェクト=1
278
-
279
- -------------------------
280
-
281
- A社の2位のプロジェクト=1
282
-
283
- B社の1位のプロジェクト=1
284
-
285
- C社の2位のプロジェクト=1
286
-
287
- -------------------------
288
-
289
- A社の2位のプロジェクト=1
290
-
291
- B社の2位のプロジェクト=1
292
-
293
- C社の1位のプロジェクト=1
294
-
295
- -------------------------
296
-
297
- A社の2位のプロジェクト=1
298
-
299
- C社の1位のプロジェクト=1
300
-
301
- C社の3位のプロジェクト=1
302
-
303
- -------------------------
304
-
305
- A社の2位のプロジェクト=1
306
-
307
- A社の3位のプロジェクト=1
308
-
309
- B社の2位のプロジェクト=1
310
-
311
- B社の3位のプロジェクト=1
312
-
313
307
  ------------------------
314
308
 
315
- A社の2位のプロジェクト=1
309
+
316
-
317
- A社の3位のプロジェクト=1
318
-
319
- B社の3位のプロジェクト=1
320
-
321
- C社の3位のプロジェクト=1
322
-
323
- ------------------------
324
-
325
- A社の2位のプロジェクト=1
326
-
327
- B社の2位のプロジェクト=1
328
-
329
- B社の3位のプロジェクト=1
330
-
331
- C社の2位のプロジェクト=1
332
-
333
- ------------------------
334
-
335
- A社の2位のプロジェクト=1
336
-
337
- B社の3位のプロジェクト=1
338
-
339
- C社の2位のプロジェクト=1
340
-
341
- C社の3位のプロジェクト=1
342
-
343
- ------------------------
344
310
 
345
311
 
346
312
 

1

誤字

2020/07/30 07:20

投稿

reina1125
reina1125

スコア21

test CHANGED
File without changes
test CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
  ①は下記のコードで全列挙が可能になりましたが、②の支配関係をチェックする部分がわかりません。
30
30
 
31
- 例えば(1){A社1位,B社1,C社1位}と(2){A社2位,B社1,C社1位}の組み合わせがあった場合、
31
+ 例えば(1){A社1位,B社1,C社1位}と(2){A社2位,B社1,C社1位}の組み合わせがあった場合、
32
32
 
33
33
  B社,C社の順位は同じ1位ですが、A社に関しては(1)が1位,(2)が2位なので
34
34