Skip to content

Instantly share code, notes, and snippets.

@danj3
Created December 19, 2017 04:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danj3/2d5d7c075f1bb97d0660bbc4f4012124 to your computer and use it in GitHub Desktop.
Save danj3/2d5d7c075f1bb97d0660bbc4f4012124 to your computer and use it in GitHub Desktop.
Advent of Code (AOC) 2017 Day 4
defmodule Day4 do
def parser( input ) do
String.split( input, "\n" )
|> Enum.reduce( [], fn "", acc -> acc; line,acc -> [ String.split(line," ") | acc ] end )
end
def start1( input ) do
parser( input ) |> step1a( [valid: 0, invalid: 0] )
end
def step1a( [ line | rest ], [ valid: v, invalid: i ] ) do
Enum.sort( line )
|> step1b
|> case do
true -> step1a( rest, [ valid: v+1, invalid: i ] )
false -> step1a( rest, [ valid: v, invalid: i+1 ] )
end
end
def step1a( [ ], result ), do: result
def step1b( [ w1, w1 | rest ] ), do: false
def step1b( [ _ | rest ] ), do: step1b( rest )
def step1b( [] ), do: true
def start2( input ) do
parser( input ) |> step2a( [ valid: 0, invalid: 0 ] )
end
def step2a( [ line | rest ], [ valid: v, invalid: i ] ) do
line
|> Enum.map( fn word -> String.to_charlist(word) |> Enum.sort end )
|> Enum.sort
|> step1b
|> case do
true -> step2a( rest, [ valid: v+1, invalid: i ] )
false -> step2a( rest, [ valid: v, invalid: i+1 ] )
end
end
def step2a( [], result ), do: result
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment