@@ -3,39 +3,45 @@ defmodule AdventOfCode.Y2019.Day08 do
3
3
--- Day 8: Space Image Format ---
4
4
Problem Link: https://adventofcode.com/2019/day/8
5
5
"""
6
- use AdventOfCode.Helpers.InputReader , year: 2019 , day: 8
6
+ alias AdventOfCode.Helpers.InputReader
7
7
8
8
@ width 25
9
9
@ height 6
10
10
@ printchar "▒"
11
11
12
- def run_1 do
13
- input! ( )
14
- |> process ( )
12
+ def input , do: InputReader . read_from_file ( 2019 , 8 )
13
+
14
+ def run ( input \\ input ( ) ) do
15
+ input = parse ( input )
16
+
17
+ { run_1 ( input ) , run_2 ( input ) }
18
+ end
19
+
20
+ def run_1 ( input ) do
21
+ input
15
22
|> Enum . map ( fn layer -> Enum . flat_map ( layer , & & 1 ) end )
16
23
|> Enum . min_by ( & Enum . count ( & 1 , fn x -> x == 0 end ) )
17
24
|> then ( fn x -> Enum . count ( x , & ( & 1 == 2 ) ) * Enum . count ( x , & ( & 1 == 1 ) ) end )
18
25
end
19
26
20
- def run_2 do
21
- input! ( )
22
- |> process ( )
27
+ def run_2 ( input ) do
28
+ input
23
29
|> Enum . map ( fn layer -> Enum . flat_map ( layer , & & 1 ) end )
24
30
|> Enum . reduce ( & overlay ( & 2 , & 1 ) )
25
31
|> Enum . join ( )
26
32
|> print_image ( )
27
33
end
28
34
29
- def process ( data ) do
35
+ def parse ( data ) do
30
36
data
31
- |> String . codepoints ( )
37
+ |> String . graphemes ( )
32
38
|> Enum . map ( & String . to_integer / 1 )
33
39
|> chunkify ( )
34
40
end
35
41
36
- defp overlay ( l1 , l2 ) do
37
- l1
38
- |> Enum . zip ( l2 )
42
+ defp overlay ( layer_1 , layer_2 ) do
43
+ layer_1
44
+ |> Enum . zip ( layer_2 )
39
45
|> Enum . map ( fn
40
46
{ 2 , x } -> x
41
47
{ 1 , _ } -> 1
@@ -49,9 +55,9 @@ defmodule AdventOfCode.Y2019.Day08 do
49
55
|> String . replace ( "0" , " " )
50
56
|> String . codepoints ( )
51
57
|> chunkify ( )
52
- |> hd ( )
58
+ |> List . first ( )
53
59
|> Enum . map_join ( "\n " , & Enum . join / 1 )
54
- |> IO . puts ( )
60
+ |> tap ( & IO . puts / 1 )
55
61
end
56
62
57
63
defp chunkify ( data ) do
0 commit comments