From 5c5087a4a7f8342946ffe0ccbf1a244d7d4790dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Fri, 10 May 2013 01:02:36 +0200 Subject: Scala : add 11-pack to sandbox --- Scala/sandbox/0-main.scala | 1 + Scala/sandbox/11-pack.scala | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 Scala/sandbox/11-pack.scala diff --git a/Scala/sandbox/0-main.scala b/Scala/sandbox/0-main.scala index 1061f50..4414f12 100644 --- a/Scala/sandbox/0-main.scala +++ b/Scala/sandbox/0-main.scala @@ -13,5 +13,6 @@ object Main extends App { PatternMatching.run Lists.run MergeSort.run + Pack.run } diff --git a/Scala/sandbox/11-pack.scala b/Scala/sandbox/11-pack.scala new file mode 100644 index 0000000..d593efd --- /dev/null +++ b/Scala/sandbox/11-pack.scala @@ -0,0 +1,19 @@ +object Pack +{ + + def pack[T](xs: List[T]): List[List[T]] = xs match { + case Nil => Nil + case x :: xs1 => + val (first, last) = xs span(y => y == x) // takeWhile + dropWhile + first :: pack(last) + } + + def encode[T](xs: List[T]): List[(T,Int)] = pack(xs) map (ys => (ys.head, ys.length)) + + def run = { + println("Pack") + val l = List("a", "a", "a", "b", "c", "c", "a") + println(pack(l)) + println(encode(l)) + } +} -- cgit v1.1-2-g2b99