92 lines
1.9 KiB
Elixir
92 lines
1.9 KiB
Elixir
defmodule Mix.Tasks.Aoc.New do
|
|
use Mix.Task
|
|
|
|
@shortdoc "Bootstrap new solution"
|
|
@impl Mix.Task
|
|
|
|
@year 2020
|
|
|
|
def run([n, name]) do
|
|
id = n |> String.pad_leading(2, "0")
|
|
|
|
input_file = "./inputs/" <> id <> ".in"
|
|
test_file = "./test/day_" <> id <> "_test.exs"
|
|
solution_file = "./lib/solutions/day_" <> id <> ".ex"
|
|
|
|
IO.puts("Creating " <> input_file)
|
|
File.touch(input_file)
|
|
|
|
IO.puts("Creating " <> test_file)
|
|
File.write!(test_file, test_file_content(id))
|
|
|
|
IO.puts("Creating " <> solution_file)
|
|
File.write!(solution_file, solution_file_content(name, id, n))
|
|
|
|
"""
|
|
\nDone! Start coding.
|
|
|
|
Get your puzzle input here:
|
|
https://adventofcode.com/#{@year}/day/#{n}/input
|
|
|
|
mix test -- run tests.
|
|
mix aoc.solve_all -- run all puzzles, starting with 1
|
|
mix aoc.solve #{id} -- run single puzzle, 1-25
|
|
"""
|
|
|> IO.puts()
|
|
end
|
|
|
|
defp test_file_content(id) do
|
|
"""
|
|
defmodule Day#{id}Test do
|
|
use ExUnit.Case
|
|
doctest Aoc.Solution.Day#{id}
|
|
import Aoc.Solution.Day#{id}
|
|
|
|
test "parses the input" do
|
|
expected = 10
|
|
|
|
assert parse!("10") == expected
|
|
end
|
|
|
|
test "solves first part" do
|
|
a = "something" |> parse!() |> solve_first_part()
|
|
|
|
assert a == :something
|
|
end
|
|
|
|
test "solves second part" do
|
|
a = "something" |> parse!() |> solve_second_part()
|
|
|
|
assert a == :something
|
|
end
|
|
end
|
|
"""
|
|
end
|
|
|
|
defp solution_file_content(name, id, n) do
|
|
~s"""
|
|
defmodule Aoc.Solution.Day#{id} do
|
|
@name "Day #{n}: #{name}"
|
|
@behaviour Solution
|
|
|
|
@impl Solution
|
|
def get_name, do: @name
|
|
|
|
@impl Solution
|
|
def parse!(_raw) do
|
|
"10"
|
|
end
|
|
|
|
@impl Solution
|
|
def solve_first_part(_input) do
|
|
"(TBW)"
|
|
end
|
|
|
|
@impl Solution
|
|
def solve_second_part(_input) do
|
|
"(TBW)"
|
|
end
|
|
end
|
|
"""
|
|
end
|
|
end
|