mix format
This commit is contained in:
parent
9217bf68f0
commit
c9d74589d9
4 changed files with 52 additions and 37 deletions
|
@ -79,7 +79,7 @@ defmodule Mix.Tasks.Day5 do
|
|||
n
|
||||
end
|
||||
|
||||
def get_location(:location, range, _) do
|
||||
def get_location(:location, range) do
|
||||
[range]
|
||||
end
|
||||
|
||||
|
@ -96,8 +96,8 @@ defmodule Mix.Tasks.Day5 do
|
|||
get_location(dest, transpose, maps)
|
||||
end
|
||||
|
||||
def get_location(source, range, maps) do
|
||||
{dest, ranges} = maps |> Map.get(source)
|
||||
def get_location(source, range) do
|
||||
{dest, ranges} = :persistent_term.get(:maps) |> Map.get(source)
|
||||
|
||||
{transposed, leftover} =
|
||||
for {dest_range, source_range} <- ranges,
|
||||
|
@ -112,12 +112,12 @@ defmodule Mix.Tasks.Day5 do
|
|||
{
|
||||
[transposed | transposed_ranges],
|
||||
leftover
|
||||
|> Enum.flat_map(fn r -> RangeUtil.difference(r, intersection) end)
|
||||
|> Enum.flat_map(fn r -> RangeUtil.difference(r, intersection) end)
|
||||
}
|
||||
end
|
||||
|
||||
domain = leftover ++ transposed
|
||||
domain |> Stream.reject(&(&1 == ..)) |> Stream.flat_map(&get_location(dest, &1, maps))
|
||||
domain |> Stream.reject(&(&1 == ..)) |> Stream.flat_map(&get_location(dest, &1))
|
||||
end
|
||||
|
||||
def part1(state) do
|
||||
|
@ -128,24 +128,28 @@ defmodule Mix.Tasks.Day5 do
|
|||
end
|
||||
|
||||
def loop_receive(max_len, acc) do
|
||||
cond do
|
||||
acc |> Enum.count() == max_len ->
|
||||
acc |> Enum.min()
|
||||
true ->
|
||||
receive do
|
||||
n -> loop_receive(max_len, [n | acc])
|
||||
end
|
||||
cond do
|
||||
acc |> Enum.count() == max_len ->
|
||||
acc |> Enum.min()
|
||||
|
||||
true ->
|
||||
receive do
|
||||
n -> loop_receive(max_len, [n | acc])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def part2(state) do
|
||||
current = self()
|
||||
|
||||
:persistent_term.put(:maps, state.maps)
|
||||
|
||||
pids =
|
||||
for range <- state.ranges do
|
||||
spawn_link(fn ->
|
||||
send(
|
||||
current,
|
||||
get_location(:seed, range, state.maps)
|
||||
get_location(:seed, range)
|
||||
|> Stream.map(fn u -> u.first end)
|
||||
|> Enum.min()
|
||||
)
|
||||
|
|
|
@ -19,10 +19,13 @@ defmodule Mix.Tasks.Day8 do
|
|||
|
||||
def loop_receive(max_len, acc, count) do
|
||||
cond do
|
||||
count == max_len -> acc
|
||||
true -> receive do
|
||||
n -> loop_receive(max_len, MathUtil.lcm(acc, n), count + 1)
|
||||
end
|
||||
count == max_len ->
|
||||
acc
|
||||
|
||||
true ->
|
||||
receive do
|
||||
n -> loop_receive(max_len, MathUtil.lcm(acc, n), count + 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -35,25 +38,33 @@ defmodule Mix.Tasks.Day8 do
|
|||
|> String.split("\n")
|
||||
|> Stream.reject(&(&1 == ""))
|
||||
|> Stream.map(&String.split(String.trim(&1), " = "))
|
||||
|> Stream.map(fn [from, "(" <> <<a::binary-size(3)>> <> ", " <> <<b::binary-size(3)>> <> ")"] -> {from, {a,b}} end),
|
||||
|> Stream.map(fn [
|
||||
from,
|
||||
"(" <>
|
||||
<<a::binary-size(3)>> <> ", " <> <<b::binary-size(3)>> <> ")"
|
||||
] ->
|
||||
{from, {a, b}}
|
||||
end),
|
||||
into: %{} do
|
||||
{key, steps}
|
||||
end
|
||||
|
||||
parent = self()
|
||||
pids = for entry <- nodes |> Map.keys() |> Stream.filter(&(&1 |> String.ends_with?("A"))) do
|
||||
spawn(fn ->
|
||||
send(parent,
|
||||
walk(
|
||||
instructions,
|
||||
nodes,
|
||||
0,
|
||||
entry
|
||||
|
||||
pids =
|
||||
for entry <- nodes |> Map.keys() |> Stream.filter(&(&1 |> String.ends_with?("A"))) do
|
||||
spawn(fn ->
|
||||
send(
|
||||
parent,
|
||||
walk(
|
||||
instructions,
|
||||
nodes,
|
||||
0,
|
||||
entry
|
||||
)
|
||||
)
|
||||
)
|
||||
end
|
||||
)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
loop_receive(pids |> Enum.count(), 1, 0)
|
||||
end
|
||||
|
|
|
@ -24,7 +24,7 @@ defmodule Mix.Tasks.Day9 do
|
|||
|> Stream.map(&String.to_integer/1)
|
||||
|> Enum.to_list()
|
||||
|> then(&reverse_if_part_two(&1, part))
|
||||
end)
|
||||
end)
|
||||
|> Stream.map(&extrapolate/1)
|
||||
|> Enum.reduce(0, &(&1 + &2))
|
||||
end
|
||||
|
@ -39,6 +39,7 @@ defmodule Mix.Tasks.Day9 do
|
|||
|> Stream.chunk_every(2, 1, :discard)
|
||||
|> Enum.reduce([], fn [a, b], acc -> [b - a | acc] end)
|
||||
|> Enum.reverse()
|
||||
|
||||
list
|
||||
end
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
defmodule MathUtil do
|
||||
@spec gcd(integer(), integer()) :: integer()
|
||||
def gcd(0,0) do
|
||||
def gcd(0, 0) do
|
||||
0
|
||||
end
|
||||
|
||||
@spec gcd(integer(), integer()) :: integer()
|
||||
def gcd(a,a) do
|
||||
def gcd(a, a) do
|
||||
a
|
||||
end
|
||||
|
||||
|
@ -15,13 +15,12 @@ defmodule MathUtil do
|
|||
end
|
||||
|
||||
@spec gcd(integer(), integer()) :: integer()
|
||||
def gcd(a, b) do
|
||||
def gcd(a, b) do
|
||||
gcd(a, b - a)
|
||||
end
|
||||
|
||||
@spec lcm(integer(), integer()) :: integer()
|
||||
def lcm(a, b) do
|
||||
div((a*b), gcd(a, b))
|
||||
end
|
||||
div(a * b, gcd(a, b))
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue