August 26, 2024
P08 - Eliminate consecutive duplicates of list elements.
If a list contains repeated elements, they should be replaced with a single copy of the element. The order of the elements should not be changed. Example:
> compress("aaaabccaadeeee".toList())
[a, b, c, a, d, e]
kotlin
package org.kotlin99.lists
import com.natpryce.hamkrest.assertion.assertThat
import com.natpryce.hamkrest.equalTo
import org.junit.Test
fun <T> compress(list: List<T>) =
list.fold(emptyList<T>()) { result, value ->
if (result.isNotEmpty() && result.last() == value) result
else result + value
}
class P08Test {
@Test fun `eliminate consecutive duplicates of list elements`() {
assertThat(compress("".toList()), equalTo("".toList()))
assertThat(compress("abc".toList()), equalTo("abc".toList()))
assertThat(compress("aaa".toList()), equalTo("a".toList()))
assertThat(compress("aaaabccaadeeee".toList()), equalTo("abcade".toList()))
}
}