aboutsummaryrefslogtreecommitdiff
path: root/challenge-251/wambash/elixir/ch-1.exs
blob: 1153cee416790b69710089bc3f6acc8d32fb6408 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
defmodule Concatenation do
  def iter([]) do
    nil
  end

  def iter([o]) do
    {o, []}
  end

  def iter([f | t]) do
    with [l | t] <- Enum.reverse(t) do
      {String.to_integer("#{f}#{l}"), Enum.reverse(t)}
    end
  end

  def value(ints) do
    ints
    |> Stream.unfold(&iter/1)
    |> Enum.sum()
  end
end

ExUnit.start()

defmodule ConcatenationTest do
  use ExUnit.Case

  test "concatenation value" do
    assert Concatenation.iter([6, 12, 25, 1]) == {61, [12, 25]}
    assert Concatenation.iter([12, 25]) == {1225, []}
    assert Concatenation.iter([]) == nil
    assert Concatenation.value([6, 12, 25, 1]) == 1286
  end

  test "concatenation value more elems" do
    assert Concatenation.iter([10, 7, 31, 5, 2, 2]) == {102, [7, 31, 5, 2]}
    assert Concatenation.value([10, 7, 31, 5, 2, 2]) == 489
  end

  test "concatenation value odd elems" do
    assert Concatenation.iter([1, 2, 10]) == {110, [2]}
    assert Concatenation.iter([2]) == {2, []}
    assert Concatenation.value([1, 2, 10]) == 112
  end
end