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.