Skip to content

Instantly share code, notes, and snippets.

@krrrr38
Created February 19, 2012 04:44
Show Gist options
  • Save krrrr38/1862018 to your computer and use it in GitHub Desktop.
Save krrrr38/1862018 to your computer and use it in GitHub Desktop.
S-99 P11-P20
// P11
def encodeModified[A](ls: Seq[A]): Seq[Any] = encode(ls) map {t => if(t._1 == 1) t._2 else t}
// P12
def decode[A](ls: Seq[(Int, A)]): Seq[A] = ls flatMap(n => List.fill(n._1)(n._2))
// P13
def encodeDirect[A](ls: Seq[A]): Seq[(Int, A)] = {
if (ls.isEmpty) Nil
else{
val (packed, next) = ls span (_ == ls.head)
(packed.length, packed.head) +: encodeDirect(next)
}
}
// P14
def duplicate[A](ls: Seq[A]): Seq[A] = ls flatMap(n => List(n, n))
// P15
def duplicateN[A](n: Int, ls: Seq[A]): Seq[A] = ls.flatMap(e => List.fill(n)(e))
// Curry
def duplicateNC[A](n: Int)(ls: Seq[A]): Seq[A] = ls.flatMap(e => List.fill(n)(e))
// P16
def drop[A](n: Int, ls: Seq[A]): Seq[A] = ls.zipWithIndex filter {_._2%n != (n-1)} map {_._1}
// P17
def split[A](n: Int, ls: Seq[A]): (Seq[A], Seq[A]) = (ls.take(n), ls.drop(n))
// P18
def slice[A](i: Int, k: Int, ls: Seq[A]): Seq[A] = ls.take(k).drop(i)
// P19
def rotate[A](i: Int, ls: Seq[A]): Seq[A] = if (i > 0) ls.drop(i) ++ ls.take(i) else ls.drop(ls.length+i) ++ ls.take(ls.length+i)
// P20
def removeAt[A](i: Int, ls: Seq[A]): (Seq[A], A) = (ls.slice(0, i) ++ ls.slice(i+1, ls.length), ls(i))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment