|
|
@ -3,13 +3,12 @@ |
|
|
-export([solve/1]). |
|
|
-export([solve/1]). |
|
|
|
|
|
|
|
|
solve(InputData) -> |
|
|
solve(InputData) -> |
|
|
{solve(InputData, 1), none}. |
|
|
|
|
|
|
|
|
|
|
|
solve(<<A, A, Rest/binary>>, N) -> solve(<<A, Rest/binary>>, N+1); |
|
|
|
|
|
solve(<<A, B, A, Rest/binary>>, N) -> solve(<<B, A, Rest/binary>>, N+1); |
|
|
|
|
|
solve(<<A, B, C, A, Rest/binary>>, N) -> solve(<<B, C, A, Rest/binary>>, N+1); |
|
|
|
|
|
solve(<<A, B, B, Rest/binary>>, N) -> solve(<<B, Rest/binary>>, N+2); |
|
|
|
|
|
solve(<<A, B, C, C, Rest/binary>>, N) -> solve(<<C, Rest/binary>>, N+3); |
|
|
|
|
|
solve(<<A, B, C, D, _Rest/binary>>, N) when A /= B andalso B /= C andalso C /= D andalso |
|
|
|
|
|
A /= C andalso B /= D andalso A /= D -> N+3; |
|
|
|
|
|
solve(<<_, Rest/binary>>, N) -> solve(Rest, N+1). |
|
|
|
|
|
|
|
|
{solve2(InputData, 4), solve2(InputData, 14)}. |
|
|
|
|
|
|
|
|
|
|
|
solve2(Symbols, Target) -> solve2(Symbols, #{}, 0, 0, Target). |
|
|
|
|
|
|
|
|
|
|
|
solve2(_Symbols, _State, Target, N, Target) -> N; |
|
|
|
|
|
|
|
|
|
|
|
solve2(<<Symbol, Symbols/binary>>, LastSeen, ChainLength, N, Target) -> |
|
|
|
|
|
Last = maps:get(Symbol, LastSeen, 0), |
|
|
|
|
|
solve2(Symbols, LastSeen#{Symbol => N}, min(N-Last, ChainLength+1), N+1, Target). |