@@ -9,22 +9,31 @@ defmodule AdventOfCode.Day07 do
99 |> Enum . reduce ( 0 , fn [ test , _ ] , acc -> acc + test end )
1010 end
1111
12- def part2 ( _args ) do
12+ def part2 ( input ) do
13+ data = parse ( input )
14+
15+ Enum . filter ( data , fn [ test , nums ] ->
16+ possible = possible_results ( Enum . reverse ( nums ) , [ & Kernel . + / 2 , & Kernel . * / 2 , & concatenate / 2 ] )
17+ test in possible
18+ end )
19+ |> Enum . reduce ( 0 , fn [ test , _ ] , acc -> acc + test end )
20+ end
21+
22+ defp concatenate ( x , y ) do
23+ Enum . join ( Integer . digits ( y ) ++ Integer . digits ( x ) ) |> String . to_integer ( )
1324 end
1425
15- def possible_results ( [ x ] , _ ) , do: [ x ]
26+ defp possible_results ( [ x ] , _ ) , do: [ x ]
1627
17- def possible_results ( [ head | tail ] , operators ) do
28+ defp possible_results ( [ head | tail ] , operators ) do
1829 subresults = possible_results ( tail , operators )
1930
2031 Enum . flat_map ( subresults , fn sub ->
21- Enum . map ( operators , fn op ->
22- op . ( head , sub )
23- end )
32+ Enum . map ( operators , fn op -> op . ( head , sub ) end )
2433 end )
2534 end
2635
27- def parse ( input ) do
36+ defp parse ( input ) do
2837 input
2938 |> String . split ( "\n " , trim: true )
3039 |> Enum . map ( fn line ->
0 commit comments