Last active
February 21, 2022 14:36
-
-
Save hovsater/6117f6ee9ed3519ffff5c49a3e1967fe to your computer and use it in GitHub Desktop.
Solution to Advent of Code 2015 - Day 2 (https://adventofcode.com/2015/day/2)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Day02 exposing (main) | |
import Html exposing (Html, div, strong, text) | |
partOne : Html () | |
partOne = | |
div [] | |
[ strong [] [ text "Part 1: " ] | |
, puzzleInput | |
|> parseInput | |
|> totalAmountOfWrappingPaper | |
|> String.fromInt | |
|> text | |
] | |
partTwo : Html () | |
partTwo = | |
div [] | |
[ strong [] [ text "Part 2: " ] | |
, puzzleInput | |
|> parseInput | |
|> totalAmountOfRibbon | |
|> String.fromInt | |
|> text | |
] | |
main : Html () | |
main = | |
div [] | |
[ partOne | |
, partTwo | |
] | |
type alias Present = | |
{ length : Int, width : Int, height : Int } | |
totalAmountOfWrappingPaper : List Present -> Int | |
totalAmountOfWrappingPaper presents = | |
List.foldl | |
(\{ length, width, height } total -> | |
let | |
( lw, lh, wh ) = | |
( length * width, length * height, width * height ) | |
surfaceArea = | |
2 * (lw + lh + wh) | |
areaOfSmallestSide = | |
min (min lw lh) wh | |
in | |
total + surfaceArea + areaOfSmallestSide | |
) | |
0 | |
presents | |
totalAmountOfRibbon : List Present -> Int | |
totalAmountOfRibbon presents = | |
List.foldl | |
(\{ length, width, height } total -> | |
let | |
( shortestFace1, shortestFace2 ) = | |
if length < width then | |
( length, min width height ) | |
else | |
( width, min length height ) | |
in | |
total + shortestFace1 * 2 + shortestFace2 * 2 + length * width * height | |
) | |
0 | |
presents | |
parseInput : String -> List Present | |
parseInput input = | |
List.filterMap | |
(\str -> | |
case List.map String.toInt (String.split "x" str) of | |
[ Just l, Just w, Just h ] -> | |
Just (Present l w h) | |
_ -> | |
Nothing | |
) | |
(String.split "\n" input) | |
puzzleInput : String | |
puzzleInput = | |
"""20x3x11 | |
15x27x5 | |
6x29x7 | |
30x15x9 | |
19x29x21 | |
10x4x15 | |
1x26x4 | |
1x5x18 | |
10x15x23 | |
10x14x20 | |
3x5x18 | |
29x23x30 | |
7x4x10 | |
22x24x29 | |
30x1x2 | |
19x2x5 | |
11x9x22 | |
23x15x10 | |
11x11x10 | |
30x28x5 | |
22x5x4 | |
6x26x20 | |
16x12x30 | |
10x20x5 | |
25x14x24 | |
16x17x22 | |
11x28x26 | |
1x11x10 | |
1x24x15 | |
13x17x21 | |
30x3x13 | |
20x25x17 | |
22x12x5 | |
22x20x24 | |
9x2x14 | |
6x18x8 | |
27x28x24 | |
11x17x1 | |
1x4x12 | |
5x20x13 | |
24x23x23 | |
22x1x25 | |
18x19x5 | |
5x23x13 | |
8x16x4 | |
20x21x9 | |
1x7x11 | |
8x30x17 | |
3x30x9 | |
6x16x18 | |
22x25x27 | |
9x20x26 | |
16x21x23 | |
5x24x17 | |
15x17x15 | |
26x15x10 | |
22x16x3 | |
20x24x24 | |
8x18x10 | |
23x19x16 | |
1x21x24 | |
23x23x9 | |
14x20x6 | |
25x5x5 | |
16x3x1 | |
29x29x20 | |
11x4x26 | |
10x23x24 | |
29x25x16 | |
27x27x22 | |
9x7x22 | |
6x21x18 | |
25x11x19 | |
14x13x3 | |
15x28x17 | |
14x3x12 | |
29x8x19 | |
30x14x20 | |
20x23x4 | |
8x16x5 | |
4x11x18 | |
20x8x24 | |
21x13x21 | |
14x26x29 | |
27x4x17 | |
27x4x25 | |
5x28x6 | |
23x24x11 | |
29x22x5 | |
30x20x6 | |
23x2x10 | |
11x4x7 | |
27x23x6 | |
10x20x19 | |
8x20x22 | |
5x29x22 | |
16x13x2 | |
2x11x14 | |
6x12x4 | |
3x13x6 | |
16x5x18 | |
25x3x28 | |
21x1x5 | |
20x16x19 | |
28x30x27 | |
26x7x18 | |
25x27x24 | |
11x19x7 | |
21x19x17 | |
2x12x27 | |
20x5x14 | |
8x5x8 | |
6x24x8 | |
7x28x20 | |
3x20x28 | |
5x20x30 | |
13x29x1 | |
26x29x5 | |
19x28x25 | |
5x19x11 | |
11x20x22 | |
4x23x1 | |
19x25x12 | |
3x10x6 | |
3x14x10 | |
28x16x12 | |
23x12x2 | |
23x12x19 | |
20x28x10 | |
9x10x25 | |
16x21x16 | |
1x18x20 | |
9x4x26 | |
3x25x8 | |
17x16x28 | |
9x28x16 | |
27x3x12 | |
17x24x12 | |
13x21x10 | |
7x17x13 | |
6x10x9 | |
7x29x25 | |
11x19x30 | |
1x24x5 | |
20x16x23 | |
24x28x21 | |
6x29x19 | |
25x2x19 | |
12x5x26 | |
25x29x12 | |
16x28x22 | |
26x26x15 | |
9x13x5 | |
10x29x7 | |
1x24x16 | |
22x2x2 | |
6x16x13 | |
3x12x28 | |
4x12x13 | |
14x27x21 | |
14x23x26 | |
7x5x18 | |
8x30x27 | |
15x9x18 | |
26x16x5 | |
3x29x17 | |
19x7x18 | |
16x18x1 | |
26x15x30 | |
24x30x21 | |
13x20x7 | |
4x12x10 | |
27x20x11 | |
28x29x21 | |
20x14x30 | |
28x12x3 | |
19x1x8 | |
4x8x6 | |
21x14x2 | |
27x19x21 | |
17x24x14 | |
15x18x11 | |
18x7x26 | |
25x28x29 | |
27x26x9 | |
18x12x17 | |
24x28x25 | |
13x24x14 | |
26x9x28 | |
9x3x30 | |
9x2x9 | |
8x1x29 | |
18x30x10 | |
18x14x5 | |
26x8x30 | |
12x1x1 | |
30x5x28 | |
26x17x21 | |
10x10x10 | |
20x7x27 | |
13x17x6 | |
21x13x17 | |
2x16x8 | |
7x9x9 | |
15x26x4 | |
11x28x25 | |
10x6x19 | |
21x6x29 | |
15x5x6 | |
28x9x16 | |
14x3x10 | |
12x29x5 | |
22x19x19 | |
25x15x22 | |
30x6x28 | |
11x23x13 | |
20x25x14 | |
26x1x13 | |
6x14x15 | |
16x25x17 | |
28x4x13 | |
10x24x25 | |
4x13x10 | |
9x15x16 | |
15x24x6 | |
22x9x19 | |
11x11x8 | |
4x19x12 | |
24x5x4 | |
27x12x13 | |
7x27x16 | |
2x6x9 | |
29x27x15 | |
18x26x23 | |
19x16x15 | |
14x5x25 | |
9x16x30 | |
4x6x4 | |
13x10x10 | |
1x8x29 | |
23x5x17 | |
19x20x20 | |
11x27x24 | |
27x15x5 | |
15x11x12 | |
21x11x3 | |
1x13x22 | |
17x8x8 | |
13x14x14 | |
17x22x7 | |
9x5x8 | |
2x6x3 | |
25x9x15 | |
11x8x13 | |
9x25x12 | |
3x16x12 | |
12x16x8 | |
16x24x17 | |
4x6x26 | |
22x29x11 | |
14x17x19 | |
28x2x27 | |
24x22x19 | |
22x20x30 | |
23x28x4 | |
16x12x14 | |
22x24x22 | |
29x1x28 | |
26x29x16 | |
3x25x30 | |
27x3x13 | |
22x24x26 | |
25x3x2 | |
7x24x2 | |
10x5x3 | |
28x8x29 | |
25x6x4 | |
12x17x14 | |
24x3x5 | |
23x27x7 | |
26x23x30 | |
11x10x19 | |
23x7x11 | |
26x14x15 | |
14x3x25 | |
12x24x14 | |
2x14x12 | |
9x12x16 | |
9x2x28 | |
3x8x2 | |
22x6x9 | |
2x30x2 | |
25x1x9 | |
20x11x2 | |
14x11x12 | |
7x14x12 | |
24x8x26 | |
13x21x23 | |
18x17x23 | |
13x6x17 | |
20x20x19 | |
13x17x29 | |
7x24x24 | |
23x8x6 | |
19x10x28 | |
3x8x21 | |
15x20x18 | |
11x27x1 | |
11x24x28 | |
13x20x11 | |
18x19x22 | |
27x22x12 | |
28x3x2 | |
13x4x29 | |
26x5x6 | |
14x29x25 | |
7x4x7 | |
5x17x7 | |
2x8x1 | |
22x30x24 | |
22x21x28 | |
1x28x13 | |
11x20x4 | |
25x29x19 | |
9x23x4 | |
30x6x11 | |
25x18x10 | |
28x10x24 | |
3x5x20 | |
19x28x10 | |
27x19x2 | |
26x20x4 | |
19x21x6 | |
2x12x30 | |
8x26x27 | |
11x27x10 | |
14x13x17 | |
4x3x21 | |
2x20x21 | |
22x30x3 | |
2x23x2 | |
3x16x12 | |
22x28x22 | |
3x23x29 | |
8x25x15 | |
9x30x4 | |
10x11x1 | |
24x8x20 | |
10x7x27 | |
7x22x4 | |
27x13x17 | |
5x28x5 | |
30x15x13 | |
10x8x17 | |
8x21x5 | |
8x17x26 | |
25x16x4 | |
9x7x25 | |
13x11x20 | |
6x30x9 | |
15x14x12 | |
30x1x23 | |
5x20x24 | |
22x7x6 | |
26x11x23 | |
29x7x5 | |
13x24x28 | |
22x20x10 | |
18x3x1 | |
15x19x23 | |
28x28x20 | |
7x26x2 | |
9x12x20 | |
15x4x6 | |
1x17x21 | |
3x22x17 | |
9x4x20 | |
25x19x5 | |
9x11x22 | |
14x1x17 | |
14x5x16 | |
30x5x18 | |
19x6x12 | |
28x16x22 | |
13x4x25 | |
29x23x18 | |
1x27x3 | |
12x14x4 | |
10x25x19 | |
15x19x30 | |
11x30x4 | |
11x22x26 | |
13x25x2 | |
17x13x27 | |
11x30x24 | |
15x1x14 | |
17x18x4 | |
26x11x3 | |
16x22x28 | |
13x20x9 | |
1x18x3 | |
25x11x12 | |
20x21x1 | |
22x27x4 | |
8x28x23 | |
7x13x27 | |
17x9x26 | |
27x27x20 | |
11x20x12 | |
26x21x11 | |
29x14x12 | |
27x25x1 | |
28x29x25 | |
21x23x28 | |
5x18x18 | |
19x5x4 | |
7x6x30 | |
27x8x11 | |
12x24x12 | |
16x25x22 | |
26x11x29 | |
25x22x17 | |
15x23x23 | |
17x9x6 | |
30x10x16 | |
21x3x5 | |
18x27x2 | |
28x21x14 | |
16x18x17 | |
4x18x2 | |
9x1x14 | |
9x1x9 | |
5x27x12 | |
8x16x30 | |
3x19x19 | |
16x26x24 | |
1x6x9 | |
15x14x3 | |
11x7x19 | |
8x19x3 | |
17x26x26 | |
6x18x11 | |
19x12x4 | |
29x20x16 | |
20x17x23 | |
6x6x5 | |
20x30x19 | |
18x25x18 | |
2x26x2 | |
3x1x1 | |
14x25x18 | |
3x1x6 | |
11x14x18 | |
17x23x27 | |
25x29x9 | |
6x25x20 | |
20x10x9 | |
17x5x18 | |
29x14x8 | |
14x25x26 | |
10x15x29 | |
23x19x11 | |
22x2x2 | |
4x5x5 | |
13x23x25 | |
19x13x19 | |
20x18x6 | |
30x7x28 | |
26x18x17 | |
29x18x10 | |
30x29x1 | |
12x26x24 | |
18x17x26 | |
29x28x15 | |
3x12x20 | |
24x10x8 | |
30x15x6 | |
28x23x15 | |
14x28x11 | |
10x27x19 | |
14x8x21 | |
24x1x23 | |
1x3x27 | |
6x15x6 | |
8x25x26 | |
13x10x25 | |
6x9x8 | |
10x29x29 | |
26x23x5 | |
14x24x1 | |
25x6x22 | |
17x11x18 | |
1x27x26 | |
18x25x23 | |
20x15x6 | |
2x21x28 | |
2x10x13 | |
12x25x14 | |
2x14x23 | |
30x5x23 | |
29x19x21 | |
29x10x25 | |
14x22x16 | |
17x11x26 | |
12x17x30 | |
8x17x7 | |
20x25x28 | |
20x11x30 | |
15x1x12 | |
13x3x24 | |
16x23x23 | |
27x3x3 | |
26x3x27 | |
18x5x12 | |
12x26x7 | |
19x27x12 | |
20x10x28 | |
30x12x25 | |
3x14x10 | |
21x26x1 | |
24x26x26 | |
7x21x30 | |
3x29x12 | |
29x28x5 | |
5x20x7 | |
27x11x2 | |
15x20x4 | |
16x15x15 | |
19x13x7 | |
7x17x15 | |
27x24x15 | |
9x17x28 | |
20x21x14 | |
14x29x29 | |
23x26x13 | |
27x23x21 | |
18x13x6 | |
26x16x21 | |
18x26x27 | |
9x3x12 | |
30x18x24 | |
12x11x29 | |
5x15x1 | |
1x16x3 | |
14x28x11 | |
2x18x1 | |
19x18x19 | |
18x28x21 | |
2x3x14 | |
22x16x5 | |
28x18x28 | |
24x16x18 | |
7x4x10 | |
19x26x19 | |
24x17x7 | |
25x9x6 | |
25x17x7 | |
20x22x20 | |
3x3x7 | |
23x19x15 | |
21x27x21 | |
1x23x11 | |
9x19x4 | |
22x4x18 | |
6x15x5 | |
15x25x2 | |
23x11x20 | |
27x16x6 | |
27x8x5 | |
10x10x19 | |
22x14x1 | |
7x1x29 | |
8x11x17 | |
27x9x27 | |
28x9x24 | |
17x7x3 | |
26x23x8 | |
7x6x30 | |
25x28x2 | |
1x30x25 | |
3x18x18 | |
28x27x15 | |
14x14x1 | |
10x25x29 | |
18x12x9 | |
20x28x16 | |
26x27x22 | |
8x26x1 | |
21x2x12 | |
25x16x14 | |
21x19x5 | |
12x9x22 | |
16x5x4 | |
5x4x16 | |
25x29x3 | |
4x29x13 | |
15x16x29 | |
8x11x24 | |
30x11x20 | |
17x21x14 | |
12x24x10 | |
10x12x6 | |
3x26x30 | |
15x14x25 | |
20x12x21 | |
13x11x16 | |
15x13x3 | |
5x17x29 | |
6x3x23 | |
9x26x11 | |
30x1x8 | |
14x10x30 | |
18x30x10 | |
13x19x19 | |
16x19x17 | |
28x7x10 | |
28x29x4 | |
3x21x10 | |
4x28x24 | |
7x28x9 | |
2x4x9 | |
25x27x13 | |
6x12x15 | |
4x18x20 | |
20x1x16 | |
5x13x24 | |
11x11x10 | |
12x9x23 | |
1x9x30 | |
17x28x24 | |
9x5x27 | |
21x15x16 | |
17x4x14 | |
8x14x4 | |
13x10x7 | |
17x12x14 | |
9x19x19 | |
2x7x21 | |
8x24x23 | |
19x5x12 | |
11x23x21 | |
13x3x1 | |
5x27x15 | |
12x25x25 | |
13x21x16 | |
9x17x11 | |
1x15x21 | |
4x26x17 | |
11x5x15 | |
23x10x15 | |
12x17x21 | |
27x15x1 | |
4x29x14 | |
5x24x25 | |
10x10x12 | |
18x12x9 | |
11x24x23 | |
24x23x3 | |
28x12x15 | |
29x9x14 | |
11x25x8 | |
5x12x2 | |
26x26x29 | |
9x21x2 | |
8x8x25 | |
1x16x30 | |
17x29x20 | |
9x22x13 | |
7x18x16 | |
3x3x23 | |
26x25x30 | |
15x23x24 | |
20x23x5 | |
20x16x10 | |
23x7x8 | |
20x18x26 | |
8x27x6 | |
30x23x23 | |
7x7x24 | |
21x11x15 | |
1x30x25 | |
26x27x22 | |
30x28x13 | |
20x13x13 | |
3x1x15 | |
16x7x1 | |
7x25x15 | |
12x7x18 | |
16x9x23 | |
16x12x18 | |
29x5x2 | |
17x7x7 | |
21x17x5 | |
9x9x17 | |
26x16x10 | |
29x29x23 | |
17x26x10 | |
5x19x17 | |
1x10x1 | |
14x21x20 | |
13x6x4 | |
13x13x3 | |
23x4x18 | |
4x16x3 | |
16x30x11 | |
2x11x2 | |
15x30x15 | |
20x30x22 | |
18x12x16 | |
23x5x16 | |
6x14x15 | |
9x4x11 | |
30x23x21 | |
20x7x12 | |
7x18x6 | |
15x6x5 | |
18x22x19 | |
16x10x22 | |
26x20x25 | |
9x25x25 | |
29x21x10 | |
9x21x24 | |
7x18x21 | |
14x3x15 | |
18x19x19 | |
4x29x17 | |
14x10x9 | |
2x26x14 | |
13x3x24 | |
4x4x17 | |
6x27x24 | |
2x18x3 | |
14x25x2 | |
30x14x17 | |
11x6x14 | |
4x10x18 | |
15x4x2 | |
27x7x10 | |
13x24x1 | |
7x12x6 | |
25x22x26 | |
19x2x18 | |
23x29x2 | |
2x15x4 | |
12x6x9 | |
16x14x29 | |
9x17x3 | |
21x9x12 | |
23x18x22 | |
10x8x4 | |
29x2x7 | |
19x27x15 | |
4x24x27 | |
25x20x14 | |
8x23x19 | |
1x24x19 | |
6x20x10 | |
15x8x5 | |
18x28x5 | |
17x23x22 | |
9x16x13 | |
30x24x4 | |
26x3x13 | |
12x22x18 | |
29x17x29 | |
26x4x16 | |
15x7x20 | |
9x15x30 | |
12x7x18 | |
28x19x18 | |
11x23x23 | |
24x20x1 | |
20x3x24 | |
1x26x1 | |
14x10x6 | |
5x27x24 | |
13x21x12 | |
20x20x5 | |
6x28x9 | |
11x26x11 | |
26x29x12 | |
21x4x11 | |
20x11x17 | |
22x27x20 | |
19x11x21 | |
2x11x11 | |
13x5x7 | |
12x10x25 | |
21x28x1 | |
15x30x17 | |
28x19x1 | |
4x19x12 | |
11x4x12 | |
4x10x30 | |
11x18x5 | |
22x20x12 | |
3x7x27 | |
20x26x4 | |
13x27x26 | |
23x14x13 | |
4x19x7 | |
26x27x16 | |
20x5x20 | |
18x5x8 | |
19x21x1 | |
22x8x1 | |
29x4x1 | |
24x10x15 | |
24x9x20 | |
10x3x8 | |
29x30x3 | |
2x8x24 | |
16x7x18 | |
2x11x23 | |
23x15x16 | |
21x12x6 | |
24x28x9 | |
6x1x13 | |
14x29x20 | |
27x24x13 | |
16x26x8 | |
5x6x17 | |
21x8x1 | |
28x19x21 | |
1x14x16 | |
18x2x9 | |
29x28x10 | |
22x26x27 | |
18x26x23 | |
22x24x2 | |
28x26x1 | |
27x29x12 | |
30x13x11 | |
1x25x5 | |
13x30x18 | |
3x13x22 | |
22x10x11 | |
2x7x7 | |
18x17x8 | |
9x22x26 | |
30x18x16 | |
10x2x3 | |
7x27x13 | |
3x20x16 | |
9x21x16 | |
1x18x15 | |
21x30x30 | |
4x25x23 | |
3x11x7 | |
5x6x12 | |
27x1x20 | |
13x15x24 | |
23x29x2 | |
13x5x24 | |
22x16x15 | |
28x14x3 | |
29x24x9 | |
2x20x4 | |
30x10x4 | |
23x7x20 | |
22x12x21 | |
3x19x11 | |
4x28x28 | |
5x4x7 | |
28x12x25 | |
2x16x26 | |
23x20x7 | |
5x21x29 | |
9x21x16 | |
9x6x10 | |
9x6x4 | |
24x14x29 | |
28x11x6 | |
10x22x1 | |
21x30x20 | |
13x17x8 | |
2x25x24 | |
19x21x3 | |
28x8x14 | |
6x29x28 | |
27x10x28 | |
30x11x12 | |
17x2x10 | |
14x19x17 | |
2x11x4 | |
26x1x2 | |
13x4x4 | |
23x20x18 | |
2x17x21 | |
28x7x15 | |
3x3x27 | |
24x17x30 | |
28x28x20 | |
21x5x29 | |
13x12x19 | |
24x29x29 | |
19x10x6 | |
19x12x14 | |
21x4x17 | |
27x16x1 | |
4x17x30 | |
23x23x18 | |
23x15x27 | |
26x2x11 | |
12x8x8 | |
15x23x26 | |
30x17x15 | |
17x17x15 | |
24x4x30 | |
9x9x10 | |
14x25x20 | |
25x11x19 | |
20x7x1 | |
9x21x3 | |
7x19x9 | |
10x6x19 | |
26x12x30 | |
21x9x20 | |
15x11x6 | |
30x21x9 | |
10x18x17 | |
22x9x8 | |
8x30x26 | |
28x12x27 | |
17x17x7 | |
11x13x8 | |
5x3x21 | |
24x1x29 | |
1x28x2 | |
18x28x10 | |
8x29x14 | |
26x26x27 | |
17x10x25 | |
22x30x3 | |
27x9x13 | |
21x21x4 | |
30x29x16 | |
22x7x20 | |
24x10x2 | |
16x29x17 | |
28x15x17 | |
19x19x22 | |
9x8x6 | |
26x23x24 | |
25x4x27 | |
16x12x2 | |
11x6x18 | |
19x14x8 | |
9x29x13 | |
23x30x19 | |
10x16x1 | |
4x21x28 | |
23x25x25 | |
19x9x16 | |
30x11x12 | |
24x3x9 | |
28x19x4 | |
18x12x9 | |
7x1x25 | |
28x7x1 | |
24x3x12 | |
30x24x22 | |
27x24x26 | |
9x30x30 | |
29x10x8 | |
4x6x18 | |
10x1x15 | |
10x4x26 | |
23x20x16 | |
6x3x14 | |
30x8x16 | |
25x14x20 | |
11x9x3 | |
15x23x25 | |
8x30x22 | |
22x19x18 | |
25x1x12 | |
27x25x7 | |
25x23x3 | |
13x20x8 | |
5x30x7 | |
18x19x27 | |
20x23x3 | |
1x17x21 | |
21x21x27 | |
13x1x24 | |
7x30x20 | |
21x9x18 | |
23x26x6 | |
22x9x29 | |
17x6x21 | |
28x28x29 | |
19x25x26 | |
9x27x21 | |
5x26x8 | |
11x19x1 | |
10x1x18 | |
29x4x8 | |
21x2x22 | |
14x12x8""" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment