回答編集履歴
3
Pair コンストラクタ/メソッド名修正
test
CHANGED
@@ -7,11 +7,12 @@
|
|
7
7
|
private static class Pair {
|
8
8
|
final int a, b;
|
9
9
|
Pair(int a, int b) {
|
10
|
+
if(a == b) throw new IllegalArgumentException("a == b");
|
10
|
-
this.a = a;
|
11
|
+
this.a = Math.min(a, b);
|
11
|
-
this.b = b;
|
12
|
+
this.b = Math.max(a, b);
|
12
13
|
}
|
13
|
-
boolean i
|
14
|
+
boolean includedIn(List<Integer> list) {
|
14
|
-
return
|
15
|
+
return list.contains(a) || list.contains(b);
|
15
16
|
}
|
16
17
|
@Override
|
17
18
|
public String toString() {
|
@@ -49,7 +50,7 @@
|
|
49
50
|
//休みの人以外で、試合回数が少ないペアのリストを作成
|
50
51
|
for(Map.Entry<Pair,Integer> entry : map.entrySet()) {
|
51
52
|
Pair pair = entry.getKey();
|
52
|
-
if(!pair.i
|
53
|
+
if(!pair.includedIn(rest) && entry.getValue() == mingames) {
|
53
54
|
pairs.add(pair);
|
54
55
|
}
|
55
56
|
}
|
2
Pair に hashcode と equals 追加等
test
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
```java
|
4
4
|
import java.util.*;
|
5
|
-
import java.util.stream.Collectors;
|
6
5
|
|
7
6
|
class StreamFilterTest {
|
8
7
|
private static class Pair {
|
@@ -18,31 +17,51 @@
|
|
18
17
|
public String toString() {
|
19
18
|
return "["+a+", "+b+"]";
|
20
19
|
}
|
20
|
+
@Override
|
21
|
+
public int hashCode() {
|
22
|
+
return Objects.hash(a, b);
|
23
|
+
}
|
24
|
+
@Override
|
25
|
+
public boolean equals(Object obj) {
|
26
|
+
if(this == obj) return true;
|
27
|
+
if(obj == null) return false;
|
28
|
+
if(getClass() != obj.getClass()) return false;
|
29
|
+
Pair other = (Pair)obj;
|
30
|
+
return a == other.a && b == other.b;
|
31
|
+
}
|
21
32
|
}
|
22
33
|
|
23
34
|
//ペアの組み合わせ作成用
|
24
|
-
private static
|
35
|
+
private static Map<Pair,Integer> combinationMap(int m, int initialValue) {
|
25
|
-
|
36
|
+
Map<Pair,Integer> map = new HashMap<>();
|
26
37
|
for(int i=0; i<=m-2; i++) {
|
27
38
|
for(int j=i+1; j<m; j++) {
|
28
|
-
|
39
|
+
map.put(new Pair(i, j), initialValue);
|
29
40
|
}
|
30
41
|
}
|
31
|
-
return
|
42
|
+
return map;
|
43
|
+
}
|
44
|
+
|
45
|
+
//休みの人以外で、試合回数が少ないペアのリストを作成
|
46
|
+
private static List<Pair> nextPairs(Map<Pair,Integer> map, List<Integer> rest, int mingames) {
|
47
|
+
//次に選択できるペアのリスト
|
48
|
+
List<Pair> pairs = new ArrayList<>();
|
49
|
+
//休みの人以外で、試合回数が少ないペアのリストを作成
|
50
|
+
for(Map.Entry<Pair,Integer> entry : map.entrySet()) {
|
51
|
+
Pair pair = entry.getKey();
|
52
|
+
if(!pair.isRest(rest) && entry.getValue() == mingames) {
|
53
|
+
pairs.add(pair);
|
54
|
+
}
|
55
|
+
}
|
56
|
+
return pairs;
|
32
57
|
}
|
33
58
|
|
34
59
|
public static void main(String[] args) {
|
35
60
|
//参加する人数
|
36
61
|
int M = 6;
|
37
62
|
|
38
|
-
//ペアの全組み合わせ
|
39
|
-
List<Pair> pairList = combination(M);
|
40
|
-
|
41
|
-
//ペアが何回試合したかを保存するMapを作成
|
63
|
+
//ペアが何回試合したかを保存するMapを作成(テスト用に回数を2に設定)
|
42
|
-
Map<Pair, Integer> pairMap = n
|
64
|
+
Map<Pair, Integer> pairMap = combinationMap(M, 2);
|
43
|
-
|
44
|
-
//テスト用に回数を2に設定
|
45
|
-
pairMap = pairList.stream().collect(Collectors.toMap(l -> l, l -> 2));
|
46
65
|
//テスト用に3ペアの回数を0に設定
|
47
66
|
pairMap.put(new Pair(0, 1), 0);
|
48
67
|
pairMap.put(new Pair(0, 2), 0);
|
@@ -58,16 +77,7 @@
|
|
58
77
|
List<Integer> rest = Arrays.asList(1, 4);
|
59
78
|
//List<Integer> rest = new ArrayList<>(Arrays.asList(1, 3, 4));
|
60
79
|
|
61
|
-
//次に選択できるペアのリスト
|
62
|
-
List<Pair> pairs = ne
|
80
|
+
List<Pair> pairs = nextPairs(pairMap, rest, mingames);
|
63
|
-
|
64
|
-
//休みの人以外で、試合回数が少ないペアのリストを作成
|
65
|
-
for(Map.Entry<Pair,Integer> entry : pairMap.entrySet()) {
|
66
|
-
Pair pair = entry.getKey();
|
67
|
-
if(!pair.isRest(rest) && entry.getValue() == mingames) {
|
68
|
-
pairs.add(pair);
|
69
|
-
}
|
70
|
-
}
|
71
81
|
|
72
82
|
System.out.println("rest " + rest + " min " + mingames + " pairs" + pairs);
|
73
83
|
}
|
1
結果追加、修正
test
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
import java.util.stream.Collectors;
|
6
6
|
|
7
7
|
class StreamFilterTest {
|
8
|
-
static class Pair {
|
8
|
+
private static class Pair {
|
9
9
|
final int a, b;
|
10
10
|
Pair(int a, int b) {
|
11
11
|
this.a = a;
|
@@ -21,7 +21,7 @@
|
|
21
21
|
}
|
22
22
|
|
23
23
|
//ペアの組み合わせ作成用
|
24
|
-
static List<Pair> combination(int m) {
|
24
|
+
private static List<Pair> combination(int m) {
|
25
25
|
List<Pair> comb = new ArrayList<>();
|
26
26
|
for(int i=0; i<=m-2; i++) {
|
27
27
|
for(int j=i+1; j<m; j++) {
|
@@ -73,3 +73,8 @@
|
|
73
73
|
}
|
74
74
|
}
|
75
75
|
```
|
76
|
+
実行結果
|
77
|
+
```
|
78
|
+
pairMap {[1, 4]=2, [0, 5]=2, [1, 5]=2, [2, 5]=2, [0, 4]=2, [3, 4]=2, [0, 3]=2, [4, 5]=2, [0, 2]=0, [0, 1]=0, [1, 3]=2, [1, 2]=2, [2, 3]=2, [2, 4]=2, [0, 3]=0, [0, 1]=2, [0, 2]=2, [3, 5]=2}
|
79
|
+
rest [1, 4] min 0 pairs[[0, 2], [0, 3]]
|
80
|
+
```
|