Skip to content

Commit

Permalink
Add timer for Elixir functions
Browse files Browse the repository at this point in the history
  • Loading branch information
Doruk Gurleyen committed Dec 1, 2021
1 parent b0decca commit b13127e
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 23 deletions.
4 changes: 2 additions & 2 deletions .tool-versions
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
erlang 23.2.3
elixir 1.11.3-otp-23
erlang 24.1.7
elixir 1.12.3-otp-24
18 changes: 7 additions & 11 deletions challenges/2021/01.exs
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
Code.compile_file("./utils/utils.exs")
Code.compile_file(Path.join([__ENV__.file], ["../../../utils/utils.exs"]))

defmodule Challenge do
@moduledoc false

def input do
Utils.load_input(__ENV__.file)
end

def first_result do
input()
def first_result(input) do
input
|> Enum.reduce([0, nil], fn val, [sum, prev] ->
val = String.to_integer(val)

Expand All @@ -17,8 +13,8 @@ defmodule Challenge do
|> List.first()
end

def second_result do
input()
def second_result(input) do
input
|> Enum.reduce([0, nil, nil, nil], fn val, [sum, prev3, prev2, prev1] = acc ->
val = String.to_integer(val)

Expand All @@ -32,5 +28,5 @@ defmodule Challenge do
end
end

IO.inspect(Challenge.first_result(), label: "Q1")
IO.inspect(Challenge.second_result(), label: "Q2")
Utils.execute(&Challenge.first_result/1, __ENV__.file, "Q1")
Utils.execute(&Challenge.second_result/1, __ENV__.file, "Q2")
14 changes: 7 additions & 7 deletions challenges/2021/template.exs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Code.compile_file("./utils/utils.exs")
Code.compile_file(Path.join([__ENV__.file], ["../../../utils/utils.exs"]))

defmodule Challenge do
@moduledoc false
Expand All @@ -7,14 +7,14 @@ defmodule Challenge do
Utils.load_input(__ENV__.file)
end

def first_result do
input()
def first_result(input) do
input
end

def second_result do
input()
def second_result(input) do
input
end
end

IO.inspect(Challenge.first_result(), label: "Q1")
IO.inspect(Challenge.second_result(), label: "Q2")
Utils.execute(&Challenge.first_result/1, __ENV__.file, "Q1")
Utils.execute(&Challenge.second_result/1, __ENV__.file, "Q2")
19 changes: 16 additions & 3 deletions utils/utils.exs
Original file line number Diff line number Diff line change
@@ -1,12 +1,25 @@
defmodule Utils do
def load_input(file) do
{file_name, folder} = file |> String.split("/") |> List.pop_at(-1)
{file_name, folder} = file |> Path.split() |> List.pop_at(-1)
challenge = file_name |> String.split(".") |> List.first()

folder
|> Enum.join("/")
|> Path.join("inputs/#{challenge}.txt")
|> Kernel.++(["inputs/#{challenge}.txt"])
|> Path.join()
|> File.read!()
|> String.split("\n")
end

def execute(function, file, label) do
input = load_input(file)

fn -> function.(input) end
|> :timer.tc()
|> log_result(label)
end

defp log_result({time, result}, label) do
IO.inspect(result, label: label)
IO.puts("#{label} completed in #{time / 1_000}ms")
end
end

0 comments on commit b13127e

Please sign in to comment.