|    355 // Map type (upper-case) |    355 // Map type (upper-case) | 
|    356 //======================= |    356 //======================= | 
|    357  |    357  | 
|    358 // Note the difference between map and Map |    358 // Note the difference between map and Map | 
|    359  |    359  | 
|    360 val ascii = ('a' to 'z').map(c => (c, c.toInt)).toList |    360 val m = Map(1 -> "one", 2 -> "two", 10 -> "many") | 
|    361  |    361  | 
|    362 val ascii_Map = ascii.toMap |    362 List((1, "one"), (2, "two"), (10, "many")).toMap | 
|    363  |    363  | 
|    364  |    364 m.get(1) | 
|    365 def factors(n: Int) : List[Int] = |    365 m.get(4) | 
|    366   (2 until n).toList.filter(n % _ == 0) |    366  | 
|    367  |    367 m.getOrElse(1, "") | 
|    368 var ls = (1 to 10).toList |    368 m.getOrElse(4, "") | 
|    369 val facs = ls.map(n => (n, factors(n))) |    369  | 
|    370  |    370 val new_m = m + (10 -> "ten") | 
|    371 facs.find(_._1 == 4) |    371  | 
|    372  |    372 new_m.get(10) | 
|    373 // works for lists of pairs |    373  | 
|    374 facs.toMap |    374 val m2 = for ((k, v) <- m) yield (k, v.toUpperCase) | 
|    375  |    375  | 
|    376  |    376  | 
|    377 facs.toMap.get(40) |         | 
|    378 facs.toMap.getOrElse(42, Nil) |         | 
|    379  |         | 
|    380 val facsMap = facs.toMap |         | 
|    381  |         | 
|    382 val facsMap0 = facsMap + (0 -> List(1,2,3,4,5)) |         | 
|    383 facsMap0.get(0) |         | 
|    384  |         | 
|    385 val facsMap2 = facsMap + (1 -> List(1,2,3,4,5)) |         | 
|    386 facsMap.get(1) |         | 
|    387 facsMap2.get(1) |         | 
|    388  |    377  | 
|    389 // groupBy function on Maps |    378 // groupBy function on Maps | 
|    390  |    379 val lst = List("one", "two", "three", "four", "five") | 
|    391 val ls = List("one", "two", "three", "four", "five") |    380 lst.groupBy(_.head) | 
|    392 ls.groupBy(_.length) |    381  | 
|    393  |    382 lst.groupBy(_.length) | 
|    394 ls.groupBy(_.length).get(5) |    383  | 
|         |    384 lst.groupBy(_.length).get(3) | 
|         |    385  | 
|         |    386 val grps = lst.groupBy(_.length) | 
|         |    387 grps.keySet | 
|    395  |    388  | 
|    396  |    389  | 
|    397  |    390  | 
|    398  |    391  | 
|    399 // Pattern Matching |    392 // Pattern Matching | 
|    592  |    585  | 
|    593 // Jumping Towers |    586 // Jumping Towers | 
|    594 //================ |    587 //================ | 
|    595  |    588  | 
|    596  |    589  | 
|    597 def moves(xs: List[Int], n: Int) : List[List[Int]] = (xs, n) match { |    590 def moves(xs: List[Int], n: Int) : List[List[Int]] =  | 
|    598   case (Nil, _) => Nil |    591  (xs, n) match { | 
|    599   case (xs, 0) => Nil |    592    case (Nil, _) => Nil | 
|    600   case (x::xs, n) => (x::xs) :: moves(xs, n - 1) |    593    case (xs, 0) => Nil | 
|    601 } |    594    case (x::xs, n) => (x::xs) :: moves(xs, n - 1) | 
|         |    595  } | 
|    602  |    596  | 
|    603  |    597  | 
|    604 moves(List(5,1,0), 1) |    598 moves(List(5,1,0), 1) | 
|    605 moves(List(5,1,0), 2) |    599 moves(List(5,1,0), 2) | 
|    606 moves(List(5,1,0), 5) |    600 moves(List(5,1,0), 5) |