Created
April 22, 2014 17:25
-
-
Save pragdave/11187581 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # | |
| # Given a list, return a new list with all occurrences of consecutive | |
| # duplicated elements replaced by `{element, count}` | |
| # | |
| # compress [ 1,2,2,3,4,4,4,5,6,6] | |
| # → [1, {2, 2}, 3, {4, 3}, 5, {6, 2}] | |
| # | |
| # This version uses the head of the result to give the effect of lookahead | |
| defmodule Demo do | |
| def compress(list), do: _compress(list, []) | |
| def _compress([], result), do: Enum.reverse(result) | |
| def _compress([a | list], [a | rest]) do | |
| _compress(list, [{a, 2} | rest]) | |
| end | |
| def _compress([a | list], [{a, n} | rest]) do | |
| _compress(list, [ {a, n+1} | rest ]) | |
| end | |
| def _compress([a | list], result) do | |
| _compress(list, [ a | result ]) | |
| end | |
| end | |
| # this version instead peeks at two elements from the source | |
| defmodule Demo1 do | |
| def compress(list), do: _compress(list, []) | |
| def _compress([], result), do: Enum.reverse(result) | |
| def _compress([a, a | list], rest) do | |
| _compress([ {a,2} | list ], rest) | |
| end | |
| def _compress([{a,n}, a | list], [rest]) do | |
| _compress([ {a,n+1} | list], rest) | |
| end | |
| def _compress([a | list], result) do | |
| _compress(list, [ a | result ]) | |
| end | |
| end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment