回答編集履歴
3
間違っていたので修正
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
```Ruby
|
2
2
|
|
3
|
-
ha1.zip(ha2, ha1.size.times).max[2]
|
3
|
+
ha1.zip(ha2.map(&:-@), ha1.size.times).max[2]
|
4
4
|
|
5
5
|
```
|
6
6
|
|
@@ -18,6 +18,6 @@
|
|
18
18
|
|
19
19
|
```Ruby
|
20
20
|
|
21
|
-
ha1.size - ha1.zip(ha2, ha1.size.downto(1)).max[2]
|
21
|
+
ha1.size - ha1.zip(ha2.map(&:-@), ha1.size.downto(1)).max[2]
|
22
22
|
|
23
23
|
```
|
2
修正しました
test
CHANGED
@@ -1,3 +1,23 @@
|
|
1
|
-
|
1
|
+
```Ruby
|
2
2
|
|
3
|
+
ha1.zip(ha2, ha1.size.times).max[2]
|
4
|
+
|
5
|
+
```
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
これでどうでしょう。
|
10
|
+
|
11
|
+
`ha1.zip(ha2, ha1.size.times)`は`[[ha1[0], ha2[0], 0], [ha1[1], ha2[1], 1], ...]`というような配列を生成しています。
|
12
|
+
|
13
|
+
それをmaxすると、`Array#<=>`は要素を前から順に比較していく(辞書式)ので、ha1を優先し、ha1が同じならha2を比較し、それが同じならインデックスが大きい方をとる、というふうにしています。
|
14
|
+
|
15
|
+
普通のindexはインデックスが小さい方をとるので、そうしたければ↓のようになります。
|
16
|
+
|
17
|
+
|
18
|
+
|
3
|
-
|
19
|
+
```Ruby
|
20
|
+
|
21
|
+
ha1.size - ha1.zip(ha2, ha1.size.downto(1)).max[2]
|
22
|
+
|
23
|
+
```
|
1
質問文を読み間違えました
test
CHANGED
@@ -1,19 +1,3 @@
|
|
1
|
-
|
1
|
+
修正中です
|
2
2
|
|
3
|
-
max = ha1.max
|
4
|
-
|
5
|
-
tmp = ha1.size.times.filter { |j| ha1[j] == max }
|
6
|
-
|
7
|
-
```
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
こういうのでどうでしょうか。大量のデータを扱うのでなければ↓でもいいでしょう。
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
3
|
+
------
|
16
|
-
|
17
|
-
tmp = ha1.size.times.filter { |j| ha1[j] == ha1.max }
|
18
|
-
|
19
|
-
```
|