からだのブログ

五体満足に生まれてきたことに感謝してブログの名前を「からだ」にしました。

からだのブログ header image 2

run length encoding

10月 21st, 2012 · 1 Comment · programming, Scala

run length encoding って、手続型で書くの面倒だよね。というか、手続型で書くこと考えるの面倒くさくていやだよ。

Scalaちゃんで解いてみる。

scala> def runlength[T](list: List[T]): List[(T, Int)] = list match {
|   case Nil => Nil
|   case x :: xs => val (first, rest) = xs.span(x ==)
|     (x, first.length+1) :: runlength(rest)
| }
runlength: [T](list: List[T])List[(T, Int)]
scala> runlength("aaabbabbbdccbabaaabab".toList)
res11: List[(Char, Int)] = List((a,3), (b,2), (a,1), (b,3), (d,1), (c,2), (b,1), (a,1), (b,1), (a,3), (b,1), (a,1), (b,1))

やった、4行で書けちゃった。仕方ないので(何が?)、糞みたいなコードも書いてみた。

Tags: