# Advent of Code (2016) : Day 6

-- Problem --
You can find Part 1 of the problem statement here. Part 2 is unlocked on successful completion of Part 1.

-- Solution in Elixir --

```      ```defmodule Aoc.Day6 do

def parse_input() do
{:ok, input} = File.read("day6_input.txt")
String.split(input)
|> Stream.map(&String.graphemes/1)
|> Enum.reduce(List.duplicate([],8), fn([e1,e2,e3,e4,e5,e6,e7,e8],[l1,l2,l3,l4,l5,l6,l7,l8]) ->
[[e1|l1],[e2|l2],[e3|l3],[e4|l4],[e5|l5],[e6|l6],[e7|l7],[e8|l8]]
end)
end

def most_common_character(list_with_dups) do
Stream.uniq(list_with_dups)
|> Stream.map(&({count_occurrences(list_with_dups, &1), &1}))
|> Enum.max |> elem(1)
end

def least_common_character(list_with_dups) do
Stream.uniq(list_with_dups)
|> Stream.map(&({count_occurrences(list_with_dups, &1), &1}))
|> Enum.min |> elem(1)
end

def count_occurrences(list, target_elem) do
Enum.reduce(list, 0, fn(elem, count) ->
case elem == target_elem do
true -> count + 1
false -> count
end
end)
end

def output_1() do
parse_input()
|> Enum.map_join(&most_common_character/1)
end

def output_2() do
parse_input()
|> Enum.map_join(&least_common_character/1)
end

end
```
```

You can find all my Advent of Code (2016) solutions here.