Skip to content

Instantly share code, notes, and snippets.

@jemmyw
Created December 5, 2018 14:41
Show Gist options
  • Save jemmyw/a8716c6172c4ab33f52f03e4d4cd6740 to your computer and use it in GitHub Desktop.
Save jemmyw/a8716c6172c4ab33f52f03e4d4cd6740 to your computer and use it in GitHub Desktop.
defmodule Checksum do
def countchars(''), do: 0
def countchars(chars) do
chars
|> Enum.uniq()
|> Enum.map(&countchar(&1, chars))
end
def countchar(_, []), do: 0
def countchar(char, [h | t]) do
((char == h && 1) || 0) + countchar(char, t)
end
def checksum(lines) when is_list(lines) do
{c1, c2} =
lines
|> Enum.map(&(String.to_charlist(&1) |> countchars()))
|> Enum.map(fn c -> {(2 in c && 1) || 0, (3 in c && 1) || 0} end)
|> Enum.reduce({0, 0}, fn {c1, c2}, {ch1, ch2} ->
{c1 + ch1, c2 + ch2}
end)
c1 * c2
end
def checksum(line) do
line |> String.to_charlist() |> List.wrap()
end
end
defmodule Chars do
def detect_similar(list, d \\ 0)
def detect_similar([], _), do: []
def detect_similar([l1 | t], d) do
Enum.map(t, fn l2 -> similar(l1, l2) |> elem(1) end) |>
Enum.find(fn x -> x end) || detect_similar(t, d + 1)
end
def detect_similar(_, _), do: []
def similar(a, b, c \\ {0, []})
def similar(_, _, {nr, _}) when nr > 1, do: {nr, false}
def similar([], [], r), do: r
def similar([], _, r), do: r
def similar(_, [], r), do: r
def similar([c1 | t1], [c1 | t2], {nr, s}) do
similar(t1, t2, {nr, [c1 | s]})
end
def similar([_c1 | t1], [_c2 | t2], {nr, s}) do
similar(t1, t2, {nr + 1, s})
end
end
# ["aabbbcccde", "aabc", "aaabc", "abab"] |> Checksum.checksum() |> IO.inspect()
File.read("2.txt")
|> elem(1)
|> String.split()
|> Checksum.checksum()
|> IO.puts()
File.read("2.txt")
|> elem(1)
|> String.split()
|> Enum.map(&String.to_charlist(&1))
|> Chars.detect_similar()
|> Enum.reverse()
|> IO.inspect()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment