| 284 |      1 | 
 | 
|  |      2 | // first test 
 | 
|  |      3 | 
 | 
| 403 |      4 | import M2._
 | 
| 284 |      5 | 
 | 
| 379 |      6 | def urban_groupById(ratings: List[(String, String)], 
 | 
|  |      7 |               m: Map[String, List[String]]) : Map[String, List[String]] = ratings match {
 | 
|  |      8 |   case Nil => m
 | 
|  |      9 |   case (id, mov) :: rest => {
 | 
|  |     10 |     val old_ratings = m.getOrElse (id, Nil)
 | 
|  |     11 |     val new_ratings = m + (id -> (mov :: old_ratings))
 | 
|  |     12 |     urban_groupById(rest, new_ratings)
 | 
|  |     13 |   }
 | 
|  |     14 | }
 | 
|  |     15 | 
 | 
|  |     16 | //def urban_groupById(ratings: List[(String, String)]) = 
 | 
|  |     17 | //  ratings.groupBy(_._1).view.mapValues(_.map(_._2)).toMap 
 | 
| 284 |     18 | 
 | 
|  |     19 | def urban_get_csv_file(name: String) : List[String] = {
 | 
|  |     20 |   import io.Source
 | 
|  |     21 |   import scala.util._
 | 
| 379 |     22 |   val csv = Source.fromFile(name)("ISO-8859-1")
 | 
| 284 |     23 |   csv.mkString.split("\n").toList.drop(1)
 | 
|  |     24 | }
 | 
|  |     25 | 
 | 
|  |     26 | def urban_process_ratings(lines: List[String]) : List[(String, String)] = {
 | 
|  |     27 |   for (cols <- lines.map(_.split(",").toList); 
 | 
| 379 |     28 |        if (cols(2).toInt >= 4)) yield (cols(0), cols(1))  
 | 
| 284 |     29 | }
 | 
|  |     30 | 
 | 
|  |     31 | 
 | 
| 379 |     32 | val urban_good_ratings = urban_process_ratings(urban_get_csv_file("ratings.csv"))
 | 
| 284 |     33 | 
 | 
| 379 |     34 | val urban_ratings_map = urban_groupById(urban_good_ratings, Map())
 | 
| 284 |     35 | 
 | 
|  |     36 | assert(suggestions(urban_ratings_map, "912").length  == 4110)
 | 
|  |     37 | assert(suggestions(urban_ratings_map, "858").length  == 4883)
 | 
|  |     38 | assert(suggestions(urban_ratings_map, "260").length  == 4970)
 | 
|  |     39 | 
 |