2017 Day 02 Completed in Go
This commit is contained in:
parent
b3860dfb28
commit
dc2725defe
95
2017/day02/day02.go
Normal file
95
2017/day02/day02.go
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"math"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
inp := StdinToStrings()
|
||||||
|
part1(inp)
|
||||||
|
part2(inp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func part1(inp []string) {
|
||||||
|
fmt.Println("= Part 1 =")
|
||||||
|
var chk int
|
||||||
|
for i := range inp {
|
||||||
|
cells := strings.Split(inp[i], "\t")
|
||||||
|
max, min := -1, -1
|
||||||
|
for j := range cells {
|
||||||
|
tst := Atoi(cells[j])
|
||||||
|
if tst > max {
|
||||||
|
max = tst
|
||||||
|
}
|
||||||
|
if min < 0 || tst < min {
|
||||||
|
min = tst
|
||||||
|
}
|
||||||
|
}
|
||||||
|
chk += (max - min)
|
||||||
|
}
|
||||||
|
fmt.Println("Checksum: ", chk)
|
||||||
|
fmt.Println("")
|
||||||
|
}
|
||||||
|
|
||||||
|
func part2(inp []string) {
|
||||||
|
fmt.Println("= Part 2 =")
|
||||||
|
var chk int
|
||||||
|
for i := range inp {
|
||||||
|
cells := strings.Split(inp[i], "\t")
|
||||||
|
var foundIt bool
|
||||||
|
for j := range cells {
|
||||||
|
for k := j; k < len(cells); k++ {
|
||||||
|
jVal, kVal := Atoi(cells[j]), Atoi(cells[k])
|
||||||
|
if isThePair(jVal, kVal) {
|
||||||
|
foundIt = true
|
||||||
|
chk += getResult(jVal, kVal)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if foundIt {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println("Checksum: ", chk)
|
||||||
|
fmt.Println("")
|
||||||
|
}
|
||||||
|
|
||||||
|
func isThePair(k, j int) bool {
|
||||||
|
if k == j {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
jVal, kVal := float64(j), float64(k)
|
||||||
|
return math.Mod(jVal, kVal) == 0 || math.Mod(kVal, jVal) == 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func getResult(k, j int) int {
|
||||||
|
if k > j {
|
||||||
|
return k / j
|
||||||
|
}
|
||||||
|
return j / k
|
||||||
|
}
|
||||||
|
|
||||||
|
func StdinToStrings() []string {
|
||||||
|
var input []string
|
||||||
|
scanner := bufio.NewScanner(os.Stdin)
|
||||||
|
for scanner.Scan() {
|
||||||
|
input = append(input, scanner.Text())
|
||||||
|
}
|
||||||
|
return input
|
||||||
|
}
|
||||||
|
|
||||||
|
func Atoi(i string) int {
|
||||||
|
var ret int
|
||||||
|
var err error
|
||||||
|
if ret, err = strconv.Atoi(i); err != nil {
|
||||||
|
log.Fatal("Invalid Atoi")
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
16
2017/day02/input
Normal file
16
2017/day02/input
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
790 99 345 1080 32 143 1085 984 553 98 123 97 197 886 125 947
|
||||||
|
302 463 59 58 55 87 508 54 472 63 469 419 424 331 337 72
|
||||||
|
899 962 77 1127 62 530 78 880 129 1014 93 148 239 288 357 424
|
||||||
|
2417 2755 254 3886 5336 3655 5798 3273 5016 178 270 6511 223 5391 1342 2377
|
||||||
|
68 3002 3307 166 275 1989 1611 364 157 144 3771 1267 3188 3149 156 3454
|
||||||
|
1088 1261 21 1063 1173 278 1164 207 237 1230 1185 431 232 660 195 1246
|
||||||
|
49 1100 136 1491 647 1486 112 1278 53 1564 1147 1068 809 1638 138 117
|
||||||
|
158 3216 1972 2646 3181 785 2937 365 611 1977 1199 2972 201 2432 186 160
|
||||||
|
244 86 61 38 58 71 243 52 245 264 209 265 308 80 126 129
|
||||||
|
1317 792 74 111 1721 252 1082 1881 1349 94 891 1458 331 1691 89 1724
|
||||||
|
3798 202 3140 3468 1486 2073 3872 3190 3481 3760 2876 182 2772 226 3753 188
|
||||||
|
2272 6876 6759 218 272 4095 4712 6244 4889 2037 234 223 6858 3499 2358 439
|
||||||
|
792 230 886 824 762 895 99 799 94 110 747 635 91 406 89 157
|
||||||
|
2074 237 1668 1961 170 2292 2079 1371 1909 221 2039 1022 193 2195 1395 2123
|
||||||
|
8447 203 1806 6777 278 2850 1232 6369 398 235 212 992 7520 7304 7852 520
|
||||||
|
3928 107 3406 123 2111 2749 223 125 134 146 3875 1357 508 1534 4002 4417
|
88
2017/day02/problem
Normal file
88
2017/day02/problem
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
Advent of Code
|
||||||
|
|
||||||
|
--- Day 2: Corruption Checksum ---
|
||||||
|
|
||||||
|
As you walk through the door, a glowing humanoid shape yells in your
|
||||||
|
direction. "You there! Your state appears to be idle. Come help us repair the
|
||||||
|
corruption in this spreadsheet - if we take another millisecond, we'll have
|
||||||
|
to display an hourglass cursor!"
|
||||||
|
|
||||||
|
The spreadsheet consists of rows of apparently-random numbers. To make sure
|
||||||
|
the recovery process is on the right track, they need you to calculate the
|
||||||
|
spreadsheet's checksum. For each row, determine the difference between the
|
||||||
|
largest value and the smallest value; the checksum is the sum of all of these
|
||||||
|
differences.
|
||||||
|
|
||||||
|
For example, given the following spreadsheet:
|
||||||
|
|
||||||
|
5 1 9 5
|
||||||
|
7 5 3
|
||||||
|
2 4 6 8
|
||||||
|
|
||||||
|
* The first row's largest and smallest values are 9 and 1, and their
|
||||||
|
difference is 8.
|
||||||
|
* The second row's largest and smallest values are 7 and 3, and their
|
||||||
|
difference is 4.
|
||||||
|
* The third row's difference is 6.
|
||||||
|
|
||||||
|
In this example, the spreadsheet's checksum would be 8 + 4 + 6 = 18.
|
||||||
|
|
||||||
|
What is the checksum for the spreadsheet in your puzzle input?
|
||||||
|
|
||||||
|
Your puzzle answer was ____.
|
||||||
|
|
||||||
|
The first half of this puzzle is complete! It provides one gold star: *
|
||||||
|
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
"Great work; looks like we're on the right track after all. Here's a star for
|
||||||
|
your effort." However, the program seems a little worried. Can programs be
|
||||||
|
worried?
|
||||||
|
|
||||||
|
"Based on what we're seeing, it looks like all the User wanted is some
|
||||||
|
information about the evenly divisible values in the spreadsheet.
|
||||||
|
Unfortunately, none of us are equipped for that kind of calculation - most of
|
||||||
|
us specialize in bitwise operations."
|
||||||
|
|
||||||
|
It sounds like the goal is to find the only two numbers in each row where one
|
||||||
|
evenly divides the other - that is, where the result of the division
|
||||||
|
operation is a whole number. They would like you to find those numbers on
|
||||||
|
each line, divide them, and add up each line's result.
|
||||||
|
|
||||||
|
For example, given the following spreadsheet:
|
||||||
|
|
||||||
|
5 9 2 8
|
||||||
|
9 4 7 3
|
||||||
|
3 8 6 5
|
||||||
|
|
||||||
|
* In the first row, the only two numbers that evenly divide are 8 and 2;
|
||||||
|
the result of this division is 4.
|
||||||
|
* In the second row, the two numbers are 9 and 3; the result is 3.
|
||||||
|
* In the third row, the result is 2.
|
||||||
|
|
||||||
|
In this example, the sum of the results would be 4 + 3 + 2 = 9.
|
||||||
|
|
||||||
|
What is the sum of each row's result in your puzzle input?
|
||||||
|
|
||||||
|
Although it hasn't changed, you can still get your puzzle input.
|
||||||
|
|
||||||
|
Answer: _____________________
|
||||||
|
|
||||||
|
You can also [Shareon Twitter Google+ Reddit] this puzzle.
|
||||||
|
|
||||||
|
References
|
||||||
|
|
||||||
|
Visible links
|
||||||
|
. http://adventofcode.com/
|
||||||
|
. http://adventofcode.com/2017/about
|
||||||
|
. http://adventofcode.com/2017/support
|
||||||
|
. http://adventofcode.com/2017/events
|
||||||
|
. http://adventofcode.com/2017/settings
|
||||||
|
. http://adventofcode.com/2017/auth/logout
|
||||||
|
. http://adventofcode.com/2017
|
||||||
|
. http://adventofcode.com/2017
|
||||||
|
. http://adventofcode.com/2017/leaderboard
|
||||||
|
. http://adventofcode.com/2017/stats
|
||||||
|
. http://adventofcode.com/2017/sponsors
|
||||||
|
. http://adventofcode.com/2017/sponsors
|
||||||
|
. http://adventofcode.com/2017/day/2/input
|
Loading…
Reference in New Issue
Block a user