-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathday_10.ex
30 lines (26 loc) · 1.02 KB
/
day_10.ex
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
defmodule AdventOfCode.Y2015.Day10 do
@moduledoc """
--- Day 10: Elves Look, Elves Say ---
Problem Link: https://adventofcode.com/2015/day/10
Difficulty: xs
Tags: string-encoding sequence reduction
"""
alias AdventOfCode.Helpers.InputReader
def input, do: InputReader.read_from_file(2015, 10)
def run(input \\ input()), do: look_and_say(String.graphemes(input), 40, 50)
def encode(input), do: Enum.reverse(encode(input, nil, nil, []))
def encode([], b, n, r), do: [b, to_string(n) | r]
def encode([a | input], nil, nil, []), do: encode(input, a, 1, [])
def encode([a | input], a, n, r), do: encode(input, a, n + 1, r)
def encode([a | input], b, n, r), do: encode(input, a, 1, [b, to_string(n) | r])
defp look_and_say(input, first_stop, second_stop) do
1..second_stop
|> Enum.reduce({nil, input}, fn x, {a, b} ->
case {x, encode(b)} do
{^first_stop, data} -> {data, data}
{_, data} -> {a, data}
end
end)
|> then(fn {a, b} -> {length(a), length(b)} end)
end
end