Skip to content

Commit 1e40eaa

Browse files
committed
feat(2017): refactor day 2
Refactored Day 2 of 2017 to use the common framework. Successfully migrated solution and integrated it into the runner.
1 parent 8d4ff12 commit 1e40eaa

3 files changed

Lines changed: 84 additions & 0 deletions

File tree

2017/days/2/day02.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"strconv"
6+
"strings"
7+
8+
"github.com/markkovari/advent_of_code/aoc-go-common"
9+
)
10+
11+
type Day02 struct{}
12+
13+
func (d Day02) Part1(input string) string {
14+
sum := 0
15+
for _, line := range strings.Split(input, "\n") {
16+
if line == "" { continue }
17+
numbers := parseRow(line)
18+
min, max := findSmallestAndBiggest(numbers)
19+
sum += max - min
20+
}
21+
return fmt.Sprintf("%d", sum)
22+
}
23+
24+
func (d Day02) Part2(input string) string {
25+
sum := 0
26+
for _, line := range strings.Split(input, "\n") {
27+
if line == "" { continue }
28+
numbers := parseRow(line)
29+
sum += getDivisible(numbers)
30+
}
31+
return fmt.Sprintf("%d", sum)
32+
}
33+
34+
func parseRow(line string) []int {
35+
var row []int
36+
for _, part := range strings.Fields(line) {
37+
val, _ := strconv.Atoi(part)
38+
row = append(row, val)
39+
}
40+
return row
41+
}
42+
43+
func findSmallestAndBiggest(numbers []int) (int, int) {
44+
smallest, biggest := numbers[0], numbers[0]
45+
for _, num := range numbers {
46+
if num < smallest { smallest = num }
47+
if num > biggest { biggest = num }
48+
}
49+
return smallest, biggest
50+
}
51+
52+
func getDivisible(numbers []int) int {
53+
for i, num := range numbers {
54+
for j, num2 := range numbers {
55+
if i != j && num%num2 == 0 {
56+
return num / num2
57+
}
58+
}
59+
}
60+
return 0
61+
}
62+
63+
func main() {
64+
common.Run(2017, 2, Day02{})
65+
}

2017/inputs/2/prod.txt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
157 564 120 495 194 520 510 618 244 443 471 473 612 149 506 138
2+
1469 670 47 604 1500 238 1304 1426 54 749 1218 1409 60 51 1436 598
3+
578 184 2760 3057 994 167 2149 191 2913 2404 213 1025 1815 588 2421 3138
4+
935 850 726 155 178 170 275 791 1028 75 781 138 176 621 773 688
5+
212 977 297 645 229 194 207 640 804 509 833 726 197 825 242 743
6+
131 43 324 319 64 376 231 146 382 162 464 314 178 353 123 446
7+
551 121 127 155 1197 288 1412 1285 557 137 145 1651 1549 1217 681 1649
8+
1723 1789 5525 4890 3368 188 3369 4842 3259 2502 4825 163 146 2941 126 5594
9+
311 2420 185 211 2659 2568 2461 231 2599 1369 821 506 2227 180 220 1372
10+
197 4490 141 249 3615 3314 789 4407 169 352 4383 5070 5173 3115 132 3513
11+
4228 2875 3717 504 114 2679 165 3568 3002 116 756 151 4027 261 4813 2760
12+
651 3194 2975 2591 1019 835 3007 248 3028 1382 282 3242 296 270 3224 3304
13+
1858 1650 1720 1848 95 313 500 1776 207 1186 72 259 281 1620 79 77
14+
3841 3217 440 3481 3643 940 3794 4536 1994 4040 3527 202 193 1961 230 217
15+
2837 2747 2856 426 72 78 2361 96 2784 2780 98 2041 2444 1267 2167 2480
16+
411 178 4263 4690 3653 162 3201 4702 3129 2685 3716 147 3790 4888 79 165

2017/inputs/2/test.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
5 1 9 5
2+
7 5 3
3+
2 4 6 8

0 commit comments

Comments
 (0)