// P11 (*) Modified run-length encoding.
// Modify the result of problem P10 in such a way that if an element has no
// duplicates it is simply copied into the result list. Only elements with
// duplicates are transferred as (N, E) terms.
//
// Example:
// scala> encodeModified(List('a, 'a, 'a, 'a, 'b, 'c, 'c, 'a, 'a, 'd, 'e, 'e, 'e, 'e))
// res0: List[Any] = List((4,'a), 'b, (2,'c), (2,'a), 'd, (4,'e))
object P11 {
import P10.encode
def encodeModified[A](ls: List[A]): List[Any] =
encode(ls) map { t => if (t._1 == 1) t._2 else t }
// Just for fun, here's a more typesafe version.
def encodeModified2[A](ls: List[A]): List[Either[A, (Int, A)]] =
encode(ls) map { t => if (t._1 == 1) Left(t._2) else Right(t) }
}