Skip to content

Commit e95271f

Browse files
committed
Use sum_by and product_by
1 parent 0d22dba commit e95271f

19 files changed

+28
-57
lines changed

lib/2015/day_02.ex

+3-7
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,13 @@ defmodule AdventOfCode.Y2015.Day02 do
2222
end
2323

2424
defp run_1(input) do
25-
input
26-
|> Enum.map(fn n -> n |> Enum.map(&String.to_integer/1) |> required_paper() end)
27-
|> Enum.sum()
25+
Enum.sum_by(input, fn n -> n |> Enum.map(&String.to_integer/1) |> required_paper() end)
2826
end
2927

3028
defp run_2(input) do
31-
input
32-
|> Enum.map(fn n ->
33-
n |> Enum.map(&String.to_integer/1) |> smallest_perimeter_plus_volume()
29+
Enum.sum_by(input, fn n ->
30+
Enum.map(n, &String.to_integer/1) |> smallest_perimeter_plus_volume()
3431
end)
35-
|> Enum.reduce(&Kernel.+/2)
3632
end
3733

3834
@spec required_paper([pos_integer(), ...]) :: pos_integer()

lib/2015/day_12.ex

+2-4
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ defmodule AdventOfCode.Y2015.Day12 do
4545
parsed
4646
|> Enum.join()
4747
|> String.split()
48-
|> Enum.map(&String.to_integer/1)
49-
|> Enum.sum()
48+
|> Enum.sum_by(&String.to_integer/1)
5049
end
5150

5251
def total(obj) when is_map(obj) do
@@ -56,11 +55,10 @@ defmodule AdventOfCode.Y2015.Day12 do
5655

5756
def total(obj) when is_list(obj) do
5857
obj
59-
|> Enum.map(fn
58+
|> Enum.sum_by(fn
6059
value when is_map(value) or is_list(value) -> total(value)
6160
value when is_integer(value) -> value
6261
_ -> 0
6362
end)
64-
|> Enum.sum()
6563
end
6664
end

lib/2015/day_15.ex

+1-2
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,7 @@ defmodule AdventOfCode.Y2015.Day15 do
7676

7777
def total_of(nutrients, type) do
7878
nutrients
79-
|> Enum.map(& &1[type])
80-
|> Enum.sum()
79+
|> Enum.sum_by(& &1[type])
8180
|> then(&((&1 < 0 && 0) || &1))
8281
end
8382

lib/2015/day_20.ex

+2-4
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ defmodule AdventOfCode.Y2015.Day20 do
3939
gifts =
4040
house
4141
|> Arithmetics.divisors()
42-
|> Enum.map(&(&1 * 10))
43-
|> Enum.sum()
42+
|> Enum.sum_by(&(&1 * 10))
4443

4544
{house, gifts}
4645
end
@@ -50,8 +49,7 @@ defmodule AdventOfCode.Y2015.Day20 do
5049
house
5150
|> Arithmetics.divisors()
5251
|> Enum.filter(fn divisor -> div(house, divisor) < 50 end)
53-
|> Enum.map(&(&1 * 11))
54-
|> Enum.sum()
52+
|> Enum.sum_by(&(&1 * 11))
5553

5654
{house, gifts}
5755
end

lib/2017/day_01.ex

+2-4
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,10 @@ defmodule AdventOfCode.Y2017.Day01 do
4040
end
4141

4242
defp matching_pair_sum({a, b}) do
43-
a
44-
|> Enum.zip(b)
45-
|> Enum.map(fn
43+
Enum.zip(a, b)
44+
|> Enum.sum_by(fn
4645
{a, a} -> a + a
4746
_ -> 0
4847
end)
49-
|> Enum.sum()
5048
end
5149
end

lib/2017/day_13.ex

+1-2
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ defmodule AdventOfCode.Y2017.Day13 do
5959
defp severity(detections, input) do
6060
input
6161
|> Map.take(detections)
62-
|> Enum.map(fn {k, v} -> k * v end)
63-
|> Enum.sum()
62+
|> Enum.sum_by(fn {k, v} -> k * v end)
6463
end
6564
end

lib/2017/day_14.ex

+1-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ defmodule AdventOfCode.Y2017.Day14 do
2020

2121
defp run_1(squares) do
2222
squares
23-
|> Enum.map(&Enum.count(&1, fn i -> i == "1" end))
24-
|> Enum.sum()
23+
|> Enum.sum_by(&Enum.count(&1, fn i -> i == "1" end))
2524
end
2625

2726
defp run_2(_squares) do

lib/2018/day_06.ex

+1-2
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,7 @@ defmodule AdventOfCode.Y2018.Day06 do
9595

9696
defp within_distance_threshold(distances, threshold) do
9797
distances
98-
|> Enum.map(&elem(&1, 1))
99-
|> Enum.sum()
98+
|> Enum.sum_by(&elem(&1, 1))
10099
|> case do
101100
n when n < threshold -> 1
102101
_ -> 0

lib/2019/day_01.ex

+2-5
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,15 @@ defmodule AdventOfCode.Y2019.Day01 do
1515
end
1616

1717
def run_1(input) do
18-
input
19-
|> Enum.map(&fuel_required/1)
20-
|> Enum.sum()
18+
Enum.sum_by(input, &fuel_required/1)
2119
end
2220

2321
def run_2(input) do
2422
input
25-
|> Enum.map(fn mass ->
23+
|> Enum.sum_by(fn mass ->
2624
required_fuel = fuel_required(mass)
2725
refuel(required_fuel, required_fuel)
2826
end)
29-
|> Enum.sum()
3027
end
3128

3229
def parse(data) do

lib/2020/day_14.ex

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ defmodule AdventOfCode.Y2020.Day14 do
3333
{Map.put(memory, address, (value ||| or_mask) &&& and_mask), masks}
3434
end
3535

36-
defp memory_sum({memory, _}), do: memory |> Enum.map(&elem(&1, 1)) |> Enum.sum()
36+
defp memory_sum({memory, _}), do: memory |> Enum.sum_by(&elem(&1, 1))
3737

3838
defp instruction_2("mask" <> _ = line, {memory, _}),
3939
do: {memory, line |> String.split(" = ") |> Enum.at(-1) |> String.graphemes()}

lib/2021/day_15.ex

+2-4
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ defmodule AdventOfCode.Y2021.Day15 do
2323
|> to_graph()
2424
|> Graph.dijkstra({0, 0}, get_destination(grid))
2525
|> tl()
26-
|> Enum.map(&Map.get(grid, &1))
27-
|> Enum.sum()
26+
|> Enum.sum_by(&Map.get(grid, &1))
2827
end
2928

3029
def run_2(grid) do
@@ -34,8 +33,7 @@ defmodule AdventOfCode.Y2021.Day15 do
3433
|> to_graph()
3534
|> Graph.dijkstra({0, 0}, get_destination(grid))
3635
|> tl()
37-
|> Enum.map(&Map.get(grid, &1))
38-
|> Enum.sum()
36+
|> Enum.sum_by(&Map.get(grid, &1))
3937
end
4038

4139
def parse(input) do

lib/2022/day_13.ex

+2-4
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ defmodule AdventOfCode.Y2022.Day13 do
2020
end)
2121
|> Enum.with_index(1)
2222
|> Enum.filter(fn {{x, y}, _} -> order(x, y) end)
23-
|> Enum.map(&elem(&1, 1))
24-
|> Enum.sum()
23+
|> Enum.sum_by(&elem(&1, 1))
2524
end
2625

2726
def run_2(input) do
@@ -33,8 +32,7 @@ defmodule AdventOfCode.Y2022.Day13 do
3332
|> Enum.sort_by(&Function.identity/1, &order/2)
3433
|> Enum.with_index(1)
3534
|> Enum.filter(fn {elem, _} -> elem in [[[2]], [[6]]] end)
36-
|> Enum.map(&elem(&1, 1))
37-
|> Enum.product()
35+
|> Enum.product_by(&elem(&1, 1))
3836
end
3937

4038
def order([], []), do: nil

lib/2023/day_09.ex

+1-3
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@ defmodule AdventOfCode.Y2023.Day09 do
2424

2525
defp forward(data) do
2626
extrapolate(data, [data], fn acc ->
27-
acc
28-
|> Enum.map(&List.last/1)
29-
|> Enum.sum()
27+
Enum.sum_by(acc, &List.last/1)
3028
end)
3129
end
3230

lib/2023/day_19.ex

+1-2
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,11 @@ defmodule AdventOfCode.Y2023.Day19 do
6565

6666
Agent.get(agent, fn content ->
6767
content
68-
|> Enum.map(fn steps ->
68+
|> Enum.sum_by(fn steps ->
6969
steps
7070
|> Enum.reduce(Map.new(~w(x m a s), &{&1, 1..4000}), &range_reducer/2)
7171
|> Enum.reduce(1, &range_combination/2)
7272
end)
73-
|> Enum.sum()
7473
end)
7574
end
7675

lib/2023/day_25.ex

+1-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ defmodule AdventOfCode.Y2023.Day25 do
2020
|> Enum.find(fn g1 -> cut_size(g1, input) == 3 end)
2121
|> Map.keys()
2222
|> Enum.map(&String.length/1)
23-
|> Enum.map(&div(&1, 3))
24-
|> Enum.product()
23+
|> Enum.product_by(&div(&1, 3))
2524
end
2625

2726
defp run_2(_), do: "🎉"

lib/2024/day_05.ex

+2-4
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,13 @@ defmodule AdventOfCode.Y2024.Day05 do
1818
defp run_1(input) do
1919
input
2020
|> Enum.filter(fn {a, b} -> a == b end)
21-
|> Enum.map(fn {a, _} -> a |> Enum.at(div(length(a), 2)) end)
22-
|> Enum.sum()
21+
|> Enum.sum_by(fn {a, _} -> a |> Enum.at(div(length(a), 2)) end)
2322
end
2423

2524
defp run_2(input) do
2625
input
2726
|> Enum.filter(fn {a, b} -> a != b end)
28-
|> Enum.map(fn {_, b} -> b |> Enum.at(div(length(b), 2)) end)
29-
|> Enum.sum()
27+
|> Enum.sum_by(fn {_, b} -> b |> Enum.at(div(length(b), 2)) end)
3028
end
3129

3230
def parse(data \\ input()) do

lib/algorithms/chinese_remainder.ex

+1-2
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,7 @@ defmodule AdventOfCode.Algorithms.ChineseRemainder do
3434
|> Enum.zip(inverses)
3535
|> Enum.map(&Tuple.product/1)
3636
)
37-
|> Enum.map(&Tuple.product/1)
38-
|> Enum.sum()
37+
|> Enum.sum_by(&Tuple.product/1)
3938
|> mod(mod_pi)
4039
end
4140
end

lib/helpers/meta.ex

+1-2
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@ defmodule AdventOfCode.Helpers.Meta do
4747

4848
stars_completed =
4949
daywise_summary
50-
|> Enum.map(fn {_, %{count: count}} -> count end)
51-
|> Enum.sum()
50+
|> Enum.sum_by(fn {_, %{count: count}} -> count end)
5251

5352
tag_summary = daywise_summary |> group_by_tags()
5453
difficulty_summary = daywise_summary |> group_by_difficulty()

lib/helpers/summarizer.ex

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ defmodule AdventOfCode.Helpers.Summarizer do
1616
metadata = Map.new(@year_range, &{&1, Meta.get_info(&1, true)})
1717

1818
stars_completed =
19-
Enum.map(metadata, fn {_, %{completed: completed}} -> completed end) |> Enum.sum()
19+
Enum.sum_by(metadata, fn {_, %{completed: completed}} -> completed end)
2020

2121
problems_solved = stars_completed / 2
2222

0 commit comments

Comments
 (0)