From 97f0c2c506a977c311124524a379bfe236a50494 Mon Sep 17 00:00:00 2001 From: Yuri Leikind Date: Sun, 6 Dec 2015 16:03:14 +0100 Subject: [PATCH] char lists instead of UTF-8 encoded binaries a better fit for this task --- day1.ex | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/day1.ex b/day1.ex index b7ae079..258a3c3 100644 --- a/day1.ex +++ b/day1.ex @@ -27,16 +27,16 @@ defmodule Day1 do def floor(instructions), do: step(instructions, 0) - defp step("", floor), do: floor - defp step("(" <> instructions, floor), do: step(instructions, floor + 1) - defp step(")" <> instructions, floor), do: step(instructions, floor - 1) + defp step([], floor), do: floor + defp step( [?( | instructions], floor), do: step(instructions, floor + 1) + defp step( [?) | instructions], floor), do: step(instructions, floor - 1) def basement(instructions), do: step_basement(instructions, 0, 1) - defp step_basement("", _, _), do: 0 - defp step_basement(")" <> _, 0, position), do: position - defp step_basement("(" <> instructions, floor, position), do: step_basement(instructions, floor + 1, position + 1) - defp step_basement(")" <> instructions, floor, position), do: step_basement(instructions, floor - 1, position + 1) + defp step_basement([], _, _), do: 0 + defp step_basement([?) | _ ], 0, position), do: position + defp step_basement([?( | instructions], floor, position), do: step_basement(instructions, floor + 1, position + 1) + defp step_basement([?) | instructions], floor, position), do: step_basement(instructions, floor - 1, position + 1) end @@ -47,28 +47,29 @@ defmodule Day1Test do use ExUnit.Case, async: true test "floor" do - assert 0 == Day1.floor("(())") - assert 0 == Day1.floor("()()") + assert 0 == Day1.floor('(())') + assert 0 == Day1.floor('()()') - assert 3 == Day1.floor("(((") - assert 3 == Day1.floor("(()(()(") - assert 3 == Day1.floor("))(((((") + assert 3 == Day1.floor('(((') + assert 3 == Day1.floor('(()(()(') + assert 3 == Day1.floor('))(((((') - assert -1 == Day1.floor("())") - assert -1 == Day1.floor("))(") + assert -1 == Day1.floor('())') + assert -1 == Day1.floor('))(') - assert -3 == Day1.floor(")))") - assert -3 == Day1.floor(")())())") + assert -3 == Day1.floor(')))') + assert -3 == Day1.floor(')())())') end test "basement" do - assert 1 == Day1.basement(")") - assert 5 == Day1.basement("()())") + assert 1 == Day1.basement(')') + assert 5 == Day1.basement('()())') end test "input floor" do IO.puts "floor" File.read!("day1.txt") + |> to_char_list |> Day1.floor |> IO.puts end @@ -76,6 +77,7 @@ defmodule Day1Test do test "input basement" do IO.puts "basement" File.read!("day1.txt") + |> to_char_list |> Day1.basement |> IO.puts end