AOC.IEx (Advent of Code Utils v1.1.0) View Source
IEx helpers for advent of code.
This module contains various helpers that make it easy to call procedures in your solution modules. This is particularly useful when you are testing your solutions from within iex.
In order to avoid prefixing all calls with AOC.IEx
, we recommend adding import AOC.IEx
to
your .iex.exs
file.
Requirements and AOC.aoc/3
In order to find a module for a given day and year, this module expects the module to have the
name Y<year>.D<day>
. This is automatically the case if the AOC.aoc/3
macro was used to build
the solution module.
Besides this, it is expected that the solutions for part 1 and part 2 are defined in non-private
functions named p1
and p2
.
Using this module
The p1/0
and p2/0
functions can be used to call the p1
and p2
functions of your solution
module. By default, these functions are called on the module that represents the current day.
The current day (and year) is determined by NaiveDateTime.local_now/0
.
If it is past midnight, or if you wish to solve an older challenge, there are a few options at your disposal:
p1/2
andp2/2
accept a day and year argument.p1/1
andp1/1
accept a day argument and uses the current year by default.- The current year and day can be configured through the
:advent_of_code_utils
application environment. For instance, you can set the year to1991
and the day to8
by placing the following in yourconfig/config.exs
:
import Config
config :advent_of_code_utils,
day: 8,
year: 1991
To summarise, the day or year is determined according to the following rules:
- If year or day was passed as an argument (to
p1/2
,p1/1
,p2/2
orp2/1
) it is always used. - If
:year
or:day
is present in the:advent_of_code_utils
application environment, it is used. - The
year
orday
returned byNaiveDateTime.local_now/0
is used.
Automatic recompilation
It is often necessary to recompile the current mix
project before running p1
or p2
. To
avoid manually doing this, all the functions in this module will recompile the current mix
project (with IEx.Helpers.recompile/1
) before calling p1
or p2
when :auto_compile?
is
set to true
in the :advent_of_code_utils
application environment.
Auto reload can be enabled by adding the following to your config/config.exs
:
import Config
config :advent_of_code_utils, auto_compile?: true
Link to this section Summary
Functions
Get the module name for the current or configured day
and year
.
Get the module name for day
, lookup year
.
Get the module name for year
, day
.
Call Y<year>.D<day>.p1()
Call Y<year>.D<day>.p1()
Call Y<year>.D<day>.p1()
Call Y<year>.D<day>.p2()
Call Y<year>.D<day>.p2()
Call Y<year>.D<day>.p2()
Link to this section Functions
Get the module name for the current or configured day
and year
.
day
and year
are fetched from the application environment, the local time is used if they
are not available.
Please refer to the module documentation for additional information.
This function may cause recompilation if auto_compile?
is enabled.
Examples
iex> Application.put_env(:advent_of_code_utils, :year, 1991)
iex> Application.put_env(:advent_of_code_utils, :day, 8)
iex> mod()
Y1991.D8
iex> Application.put_env(:advent_of_code_utils, :year, 2000)
iex> Application.put_env(:advent_of_code_utils, :day, 3)
iex> mod()
Y2000.D3
Get the module name for day
, lookup year
.
year
is fetched from the application environment, otherwise the local time is used.
Please refer to the module documentation for additional information.
This function may cause recompilation if auto_compile?
is enabled.
Examples
iex> Application.put_env(:advent_of_code_utils, :year, 1991)
iex> mod(8)
Y1991.D8
iex> Application.put_env(:advent_of_code_utils, :year, 2000)
iex> mod(3)
Y2000.D3
Get the module name for year
, day
.
This function may cause recompilation if auto_compile?
is enabled.
Examples
iex> mod(1991, 8)
Y1991.D8
Call Y<year>.D<day>.p1()
day
and year
are fetched from the application environment, the local time is used if they
are not available.
Please refer to the module documentation for additional information.
This function may cause recompilation if auto_compile?
is enabled.
Call Y<year>.D<day>.p1()
year
is fetched from the application environment, the local time is used if it is not
available.
Please refer to the module documentation for additional information.
This function may cause recompilation if auto_compile?
is enabled.
Call Y<year>.D<day>.p1()
This function may cause recompilation if auto_compile?
is enabled.
Call Y<year>.D<day>.p2()
day
and year
are fetched from the application environment, the local time is used if they
are not available.
Please refer to the module documentation for additional information.
This function may cause recompilation if auto_compile?
is enabled.
Call Y<year>.D<day>.p2()
year
is fetched from the application environment, the local time is used if it is not
available.
Please refer to the module documentation for additional information.
This function may cause recompilation if auto_compile?
is enabled.
Call Y<year>.D<day>.p2()
This function may cause recompilation if auto_compile?
is enabled.