Problem:
度数分布

健康診断で生徒の身長を計測しました。身長のデータを入力とし、度数分布を作成して出力するプログラムを作成してください。度数分布の階級は 5 cm 刻みの 6 つの階級とし、度数は人数を *（半角アスタリスク）で表示します。ただし、その階級の度数（人数）が 0 の場合、階級の見出しのみを出力してください。

Input

入力は以下の形式で与えられます。

n
h1
h2
:
hn

1 行目に生徒の数 n (1 ≤ n ≤ 40)、2 行目以降に i 人目の身長を表す実数 hi (150.0 ≤ hi ≤ 190.0、小数第 1 位まで) がそれぞれ 1 行に与えられます。

Output

以下の形式で度数分布を表示してください。

1 行目 見出し「1:」につづいて 165.0 cm 未満の人数分の *
2 行目 見出し「2:」につづいて 165.0 cm 以上〜 170.0 cm未満の人数分の *
3 行目 見出し「3:」につづいて 170.0 cm 以上〜 175.0 cm未満の人数分の *
4 行目 見出し「4:」につづいて 175.0 cm 以上〜 180.0 cm未満の人数分の *
5 行目 見出し「5:」につづいて 180.0 cm 以上〜 185.0 cm未満の人数分の *
6 行目 見出し「6:」につづいて 185.0 cm 以上の人数分の *

Sample Input 1

4
180.3
168.2
165.5
175.3

Output for the Sample Input 1

1:
2:**
3:
4:*
5:*
6:

Sample Input 2

21
179.4
171.5
156.6
173.0
169.4
181.2
172.4
170.0
163.6
165.9
173.5
168.2
162.5
172.0
175.1
172.3
167.5
175.9
186.2
168.0
178.6

Output for the Sample Input 2

1:***
2:*****
3:*******
4:****
5:*
6:*

Solution in Scala (judge verdict: Accepted)

import scala.math.{min,max}

object Main {
  val sc = new java.util.Scanner(System.in)
  def classify(h: Double) = h match {
    case x if x < 165 => 1
    case x if x < 170 => 2
    case x if x < 175 => 3
    case x if x < 180 => 4
    case x if x < 185 => 5
    case _ => 6
  }
  def main(args: Array[String]) {
    val n = sc.nextInt
    val hist = (1 to n).map(_ => sc.nextDouble).groupBy(classify).map(a => a._1 -> a._2.size)
    for(i <- 1 to 6) {
      println(i.toString + ":" + "*"*hist.getOrElse(i, 0))
    }
  }
}