回答編集履歴
2
パターンマッチングを追記
test
CHANGED
@@ -87,3 +87,27 @@
|
|
87
87
|
**もっと良い解答**
|
88
88
|
|
89
89
|
あるはず。考えましょう。
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
**パターンマッチング(追記)**
|
94
|
+
|
95
|
+
畳み込みにパターンマッチングを適用して、この回答を終わります。
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
```Scala
|
100
|
+
|
101
|
+
val (_, ans2) = list.foldLeft((Nil:List[Int], Nil:List[Int])) {
|
102
|
+
|
103
|
+
case ((x, y), (_, "H", c)) => (x :+ c, y)
|
104
|
+
|
105
|
+
case ((Nil, y), _) => (Nil, y)
|
106
|
+
|
107
|
+
case ((x, y), _) => (Nil, {val avg = x.sum / x.length; y ++ x.filter(avg < _)})
|
108
|
+
|
109
|
+
}
|
110
|
+
|
111
|
+
ans2.foreach(println(_))
|
112
|
+
|
113
|
+
```
|
1
解説を追加
test
CHANGED
@@ -31,6 +31,20 @@
|
|
31
31
|
}
|
32
32
|
|
33
33
|
```
|
34
|
+
|
35
|
+
"H"が続く間、wlistという一時的なリストにcの値を保存します。理由は、cの平均を計算してからでなければ、平均より大きな要素を選択できないからです。
|
36
|
+
|
37
|
+
- "H"が続く間、cの値をwlistに順に保存する
|
38
|
+
|
39
|
+
- "R"が現れたら、wlistが空でなければ、以下の処理を行う
|
40
|
+
|
41
|
+
・wlistの平均を計算する。sumが合計、lengthが個数です。整数除算
|
42
|
+
|
43
|
+
・wlistから平均より大きなcを選択する。filterを使います
|
44
|
+
|
45
|
+
・選択したcを表示する。foreach、printlnを使います
|
46
|
+
|
47
|
+
・wlistを空にする
|
34
48
|
|
35
49
|
|
36
50
|
|
@@ -66,6 +80,8 @@
|
|
66
80
|
|
67
81
|
```
|
68
82
|
|
83
|
+
やっていることは上と同じです。wlistに相当するのが、(x,y)のxです。xには"H"が続く間、cの値が保存されます。yは出力用のリストです。"R"が現れる都度、計算した平均より大きなcが順にyに保存されます。畳み込みと同じ処理は再帰を使ってもできます。
|
84
|
+
|
69
85
|
|
70
86
|
|
71
87
|
**もっと良い解答**
|