mix format

This commit is contained in:
Caleb Webber 2023-12-11 23:52:43 -05:00
parent 9217bf68f0
commit c9d74589d9
4 changed files with 52 additions and 37 deletions

View file

@ -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()
)

View file

@ -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

View file

@ -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

View file

@ -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