回答編集履歴
21
テキスト修正
test
CHANGED
@@ -2,7 +2,15 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
回答するにあたって、
|
5
|
+
回答するにあたって、
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
- 「配列から最頻出の要素を見つけ出す」という汎用的なコードは、既にどこかで作られていると思われるので、これを**いかにして自作しないで済ませられるか?**
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
という方針で考えました。ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、何らかの統計ライブラリを使えば良さそうです。探してみると、 [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) が見つかります。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
|
6
14
|
|
7
15
|
- `modeOfChars(charAry)`
|
8
16
|
|
20
テキスト修正
test
CHANGED
@@ -2,13 +2,13 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という観点から考えま
|
5
|
+
回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という観点から考えました。ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、何らかの統計ライブラリを使えば良さそうです。探してみると、 [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) があります。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
|
6
6
|
|
7
7
|
- `modeOfChars(charAry)`
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
-
を作成しました。
|
11
|
+
を作成しました。
|
12
12
|
|
13
13
|
```javascript
|
14
14
|
|
19
テキスト修正
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という観点
|
5
|
+
回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という観点から考えます。ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、何らかの統計ライブラリを使えば良さそうです。探してみると、 [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) がありましたので、これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
|
6
6
|
|
7
7
|
- `modeOfChars(charAry)`
|
8
8
|
|
18
テキスト修正
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という観点で考えてみると、ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode)
|
5
|
+
回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という観点で考えてみると、ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、何らかの統計ライブラリを使えば良さそうです。探してみると、 [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) がありましたので、これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
|
6
6
|
|
7
7
|
- `modeOfChars(charAry)`
|
8
8
|
|
17
テキスト修正
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、いかにして自作しないで済ませるか?という観点で考えてみると、ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を利用することが思いつきます。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
|
5
|
+
回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という観点で考えてみると、ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を利用することが思いつきます。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
|
6
6
|
|
7
7
|
- `modeOfChars(charAry)`
|
8
8
|
|
16
テキスト修正
test
CHANGED
@@ -2,11 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を利用します。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
|
5
|
+
回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、いかにして自作しないで済ませるか?という観点で考えてみると、ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を利用することが思いつきます。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
|
10
6
|
|
11
7
|
- `modeOfChars(charAry)`
|
12
8
|
|
15
テキスト修正
test
CHANGED
@@ -1,68 +1,18 @@
|
|
1
1
|
こんにちは。
|
2
|
-
|
3
|
-
[lodash](https://lodash.com/) を使いました。
|
4
2
|
|
5
3
|
|
6
4
|
|
7
|
-
```javascript
|
8
|
-
|
9
|
-
|
5
|
+
ご質問に回答するにあたって、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という方針で検討しました。
|
10
6
|
|
11
7
|
|
12
8
|
|
13
|
-
``
|
14
|
-
|
15
|
-
- **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/eYmrybj?editors=0012](https://codepen.io/jun68ykt/pen/eYmrybj?editors=0012)
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
### 追記1
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
上記と同じく、lodashを使いますが、最頻出の要素が複数ある場合に、それらを配列にして返すようにしました。
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
```javascript
|
28
|
-
|
29
|
-
const counters = _.groupBy(_.toPairs(_.countBy(array)), ([str, count]) => count);
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
const maxFrequency = Math.max(...Object.keys(counters));
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
const mostFrequentStrs = counters[maxFrequency].map(([str, _]) => str);
|
38
|
-
|
39
|
-
```
|
40
|
-
|
41
|
-
- **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/oNgdEXg?editors=0012](https://codepen.io/jun68ykt/pen/oNgdEXg?editors=0012)
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
### 追記2
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
もうひとつ別解を挙げます。
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
ご質問の本題を統計用語でいうと、 [最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を利用します。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
|
9
|
+
ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を利用します。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
|
54
10
|
|
55
11
|
- `modeOfChars(charAry)`
|
56
12
|
|
57
13
|
|
58
14
|
|
59
15
|
を作成しました。以下、そのコードです。
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
16
|
|
67
17
|
```javascript
|
68
18
|
|
14
テキスト修正
test
CHANGED
@@ -104,4 +104,4 @@
|
|
104
104
|
|
105
105
|
|
106
106
|
|
107
|
-
jStatを使うために、所与の文字列の配列を数値の配列に変換する必要がありますので、上記の `modeOfChars(charAry)` では、所与の配列`charAry` の要素がアルファベット一文字であることを前提として、各文字のASCIIコードの配列`intAry`を得て、それに対してモードを取得し、再度、一文字の文字列に戻
|
107
|
+
jStatを使うために、所与の文字列の配列を数値の配列に変換する必要がありますので、上記の `modeOfChars(charAry)` では、所与の配列`charAry` の要素がアルファベット一文字であることを前提として、各文字のASCIIコードの配列`intAry`を得て、それに対してモードを取得し、再度、一文字の文字列に戻しています。
|
13
テキスト修正
test
CHANGED
@@ -56,11 +56,11 @@
|
|
56
56
|
|
57
57
|
|
58
58
|
|
59
|
-
を作成します。
|
59
|
+
を作成しました。以下、そのコードです。
|
60
60
|
|
61
61
|
|
62
62
|
|
63
|
-
|
63
|
+
|
64
64
|
|
65
65
|
|
66
66
|
|
@@ -99,3 +99,9 @@
|
|
99
99
|
```
|
100
100
|
|
101
101
|
- **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012](https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012)
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
jStatを使うために、所与の文字列の配列を数値の配列に変換する必要がありますので、上記の `modeOfChars(charAry)` では、所与の配列`charAry` の要素がアルファベット一文字であることを前提として、各文字のASCIIコードの配列`intAry`を得て、それに対してモードを取得し、再度、一文字の文字列に戻すようにします
|
12
テキスト修正
test
CHANGED
@@ -82,6 +82,20 @@
|
|
82
82
|
|
83
83
|
}
|
84
84
|
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
// 以下、実行例
|
90
|
+
|
91
|
+
console.log(modeOfChars(["a", "b", "c", "d", "e", "e", "b", "e", "c", "a", "d"])); // => ["e"]
|
92
|
+
|
93
|
+
console.log(modeOfChars(["a", "b", "c", "d", "e", "e", "b", "e", "c", "b", "d"])); // => ["b", "e"]
|
94
|
+
|
95
|
+
console.log(modeOfChars([])); // => []
|
96
|
+
|
97
|
+
console.log(modeOfChars()); // => []
|
98
|
+
|
85
99
|
```
|
86
100
|
|
87
101
|
- **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012](https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012)
|
11
テキスト修正
test
CHANGED
@@ -50,7 +50,7 @@
|
|
50
50
|
|
51
51
|
|
52
52
|
|
53
|
-
ご質問の本題を統計用語でいうと、 [最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って、
|
53
|
+
ご質問の本題を統計用語でいうと、 [最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を利用します。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
|
54
54
|
|
55
55
|
- `modeOfChars(charAry)`
|
56
56
|
|
10
テキスト修正
test
CHANGED
@@ -50,7 +50,17 @@
|
|
50
50
|
|
51
51
|
|
52
52
|
|
53
|
-
ご質問の本題を統計用語でいうと、 [最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って
|
53
|
+
ご質問の本題を統計用語でいうと、 [最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って、引数として、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
|
54
|
+
|
55
|
+
- `modeOfChars(charAry)`
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
を作成します。
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
jStatを使うために、所与の文字列の配列を数値の配列に変換する必要がありますので、所与の配列要素がアルファベット一文字であることを前提として、各文字のASCIIコードの配列を得て、それに対してモードを取得し、再度、一文字の文字列に戻すようにします。以下、関数`modeOfChars` のコードです。
|
54
64
|
|
55
65
|
|
56
66
|
|
9
テキスト修正
test
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
|
22
22
|
|
23
|
-
上記と同じく、lodashを使いますが、最頻出の要素が複数あ
|
23
|
+
上記と同じく、lodashを使いますが、最頻出の要素が複数ある場合に、それらを配列にして返すようにしました。
|
24
24
|
|
25
25
|
|
26
26
|
|
8
テキスト修正
test
CHANGED
@@ -56,7 +56,11 @@
|
|
56
56
|
|
57
57
|
```javascript
|
58
58
|
|
59
|
-
const modeOf = (charAry) => {
|
59
|
+
const modeOfChars = (charAry = []) => {
|
60
|
+
|
61
|
+
if (!charAry.length) return [];
|
62
|
+
|
63
|
+
|
60
64
|
|
61
65
|
const intAry = charAry.map(ch => ch.charCodeAt(0));
|
62
66
|
|
@@ -68,18 +72,6 @@
|
|
68
72
|
|
69
73
|
}
|
70
74
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
console.log(modeOf(["a", "b", "c", "d", "e", "e", "b", "e", "c", "a", "d"])); // => ["e"]
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
console.log(modeOf(["a", "b", "c", "d", "e", "e", "b", "e", "c", "b", "d"])); // => ["b, e"]
|
80
|
-
|
81
|
-
|
82
|
-
|
83
75
|
```
|
84
76
|
|
85
77
|
- **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012](https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012)
|
7
テキスト修正
test
CHANGED
@@ -50,21 +50,21 @@
|
|
50
50
|
|
51
51
|
|
52
52
|
|
53
|
-
ご質問の本題を統計用語でいうと、 [最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って得ることができます。jStatを使うために、所与の文字列の配列を
|
53
|
+
ご質問の本題を統計用語でいうと、 [最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って得ることができます。ただしjStatを使うために、所与の文字列の配列を数値の配列に変換する必要がありますので、所与の配列要素がアルファベット一文字であることを前提として、各文字のASCIIコードの配列を得て、それに対してモードを取得し、再度、一文字の文字列に戻します。
|
54
54
|
|
55
55
|
|
56
56
|
|
57
57
|
```javascript
|
58
58
|
|
59
|
-
const modeOf = (
|
59
|
+
const modeOf = (charAry) => {
|
60
60
|
|
61
|
-
const intAry =
|
61
|
+
const intAry = charAry.map(ch => ch.charCodeAt(0));
|
62
62
|
|
63
63
|
const mode = jStat.mode(intAry);
|
64
64
|
|
65
65
|
|
66
66
|
|
67
|
-
return mode.length ? mode.map(
|
67
|
+
return mode.length ? mode.map(String.fromCharCode) : [String.fromCharCode(mode)];
|
68
68
|
|
69
69
|
}
|
70
70
|
|
@@ -82,4 +82,4 @@
|
|
82
82
|
|
83
83
|
```
|
84
84
|
|
85
|
-
- **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/
|
85
|
+
- **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012](https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012)
|
6
テキスト修正
test
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
|
22
22
|
|
23
|
-
最頻出の要素が複数あり得る場合に、それらを配列にして返すようにした
|
23
|
+
上記と同じく、lodashを使いますが、最頻出の要素が複数あり得る場合に、それらを配列にして返すようにしました。
|
24
24
|
|
25
25
|
|
26
26
|
|
5
テキスト修正
test
CHANGED
@@ -50,7 +50,7 @@
|
|
50
50
|
|
51
51
|
|
52
52
|
|
53
|
-
ご質問の本題
|
53
|
+
ご質問の本題を統計用語でいうと、 [最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って得ることができます。jStatを使うために、所与の文字列の配列を整数の配列に変換してからモードを取得し、再度文字列に戻します。
|
54
54
|
|
55
55
|
|
56
56
|
|
4
テキスト修正
test
CHANGED
@@ -50,7 +50,7 @@
|
|
50
50
|
|
51
51
|
|
52
52
|
|
53
|
-
ご質問の本題は、統計的にいうと [最頻値(mode)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って得ることができます。jStatを使うために、所与の文字列の配列を数
|
53
|
+
ご質問の本題は、統計的にいうと [最頻値(mode)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って得ることができます。jStatを使うために、所与の文字列の配列を整数の配列に変換してからモードを取得し、再度文字列に戻します。
|
54
54
|
|
55
55
|
|
56
56
|
|
@@ -58,9 +58,9 @@
|
|
58
58
|
|
59
59
|
const modeOf = (strAry) => {
|
60
60
|
|
61
|
-
const in
|
61
|
+
const intAry = strAry.map((str, _, self) => self.findIndex(e => e === str));
|
62
62
|
|
63
|
-
const mode = jStat.mode(in
|
63
|
+
const mode = jStat.mode(intAry);
|
64
64
|
|
65
65
|
|
66
66
|
|
3
テキスト修正
test
CHANGED
@@ -50,7 +50,7 @@
|
|
50
50
|
|
51
51
|
|
52
52
|
|
53
|
-
ご質問の本題は、統計的にいうと
|
53
|
+
ご質問の本題は、統計的にいうと [最頻値(mode)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って得ることができます。jStatを使うために、所与の文字列の配列を数値の配列に変換してからモードを取得し、再度文字列に戻します。
|
54
54
|
|
55
55
|
|
56
56
|
|
2
テキスト修正
test
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
|
17
17
|
|
18
18
|
|
19
|
-
### 追記
|
19
|
+
### 追記1
|
20
20
|
|
21
21
|
|
22
22
|
|
@@ -39,3 +39,47 @@
|
|
39
39
|
```
|
40
40
|
|
41
41
|
- **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/oNgdEXg?editors=0012](https://codepen.io/jun68ykt/pen/oNgdEXg?editors=0012)
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
### 追記2
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
もうひとつ別解を挙げます。
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
ご質問の本題は、統計的にいうと、[最頻値(mode)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることです。ですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って得ることができます。jStatを使うために、所与の文字列の配列を数値の配列に変換してからモードを取得し、再度文字列に戻します。
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
```javascript
|
58
|
+
|
59
|
+
const modeOf = (strAry) => {
|
60
|
+
|
61
|
+
const indexAry = strAry.map((str, _, self) => self.findIndex(e => e === str));
|
62
|
+
|
63
|
+
const mode = jStat.mode(indexAry);
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
return mode.length ? mode.map(i => strAry[i]) : [strAry[mode]];
|
68
|
+
|
69
|
+
}
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
console.log(modeOf(["a", "b", "c", "d", "e", "e", "b", "e", "c", "a", "d"])); // => ["e"]
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
console.log(modeOf(["a", "b", "c", "d", "e", "e", "b", "e", "c", "b", "d"])); // => ["b, e"]
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
```
|
84
|
+
|
85
|
+
- **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/BayxYwJ?editors=0012](https://codepen.io/jun68ykt/pen/BayxYwJ?editors=0012)
|
1
テキスト修正
test
CHANGED
@@ -13,3 +13,29 @@
|
|
13
13
|
```
|
14
14
|
|
15
15
|
- **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/eYmrybj?editors=0012](https://codepen.io/jun68ykt/pen/eYmrybj?editors=0012)
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
### 追記
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
最頻出の要素が複数あり得る場合に、それらを配列にして返すようにしたコードが以下です。
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
```javascript
|
28
|
+
|
29
|
+
const counters = _.groupBy(_.toPairs(_.countBy(array)), ([str, count]) => count);
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
const maxFrequency = Math.max(...Object.keys(counters));
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
const mostFrequentStrs = counters[maxFrequency].map(([str, _]) => str);
|
38
|
+
|
39
|
+
```
|
40
|
+
|
41
|
+
- **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/oNgdEXg?editors=0012](https://codepen.io/jun68ykt/pen/oNgdEXg?editors=0012)
|