2017 day 13 Complete!
This commit is contained in:
parent
a43d9c4ca7
commit
2554b0b3d9
98
2017/day13/day13.go
Normal file
98
2017/day13/day13.go
Normal file
@ -0,0 +1,98 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"log"
|
||||
"math"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var lyrs map[int]int
|
||||
|
||||
func main() {
|
||||
inp := StdinToStrings()
|
||||
lyrs = make(map[int]int)
|
||||
for i := range inp {
|
||||
pts := strings.Split(inp[i], ":")
|
||||
lyrs[Atoi(pts[0])] = Atoi(strings.TrimSpace(pts[1]))
|
||||
}
|
||||
fmt.Println("== Part 1 ==")
|
||||
fmt.Println("Total Severity:", HitchARide(0, false))
|
||||
|
||||
fmt.Println("== Part 2 ==")
|
||||
fmt.Println("Delay", FindNoSeverity(), "picoseconds")
|
||||
}
|
||||
|
||||
func HitchARide(delay int, brk bool) int {
|
||||
var tm, top, sev int
|
||||
for k := range lyrs {
|
||||
if k > top {
|
||||
top = k
|
||||
}
|
||||
}
|
||||
for tm = delay; tm <= (top + delay); tm++ {
|
||||
if v, ok := lyrs[(tm - delay)]; ok {
|
||||
// There is a scanner here, did it see us?
|
||||
if FindPos2(tm, v) == 0 {
|
||||
sev += (tm * v)
|
||||
if brk {
|
||||
return -1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return sev
|
||||
}
|
||||
|
||||
func FindNoSeverity() int {
|
||||
maxInt := int((^uint(0) >> 1))
|
||||
for i := 0; i < maxInt; i++ {
|
||||
if HitchARide(i, true) == 0 {
|
||||
return i
|
||||
}
|
||||
}
|
||||
return -1
|
||||
}
|
||||
|
||||
func FindPos(tm, lngth int) int {
|
||||
var ret int
|
||||
var isAsc bool
|
||||
for i := tm; i > 0; i-- {
|
||||
if ret == lngth-1 || ret == 0 {
|
||||
isAsc = !isAsc
|
||||
}
|
||||
if isAsc {
|
||||
ret++
|
||||
} else {
|
||||
ret--
|
||||
}
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func FindPos2(tm, lngth int) int {
|
||||
loop := (lngth - 1) * 2
|
||||
pos := (lngth - 1) - int(math.Abs(float64((lngth-1)-(tm%loop))))
|
||||
return pos
|
||||
}
|
||||
|
||||
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
|
||||
}
|
44
2017/day13/input
Normal file
44
2017/day13/input
Normal file
@ -0,0 +1,44 @@
|
||||
0: 3
|
||||
1: 2
|
||||
2: 5
|
||||
4: 4
|
||||
6: 4
|
||||
8: 6
|
||||
10: 6
|
||||
12: 6
|
||||
14: 8
|
||||
16: 6
|
||||
18: 8
|
||||
20: 8
|
||||
22: 8
|
||||
24: 12
|
||||
26: 8
|
||||
28: 12
|
||||
30: 8
|
||||
32: 12
|
||||
34: 12
|
||||
36: 14
|
||||
38: 10
|
||||
40: 12
|
||||
42: 14
|
||||
44: 10
|
||||
46: 14
|
||||
48: 12
|
||||
50: 14
|
||||
52: 12
|
||||
54: 9
|
||||
56: 14
|
||||
58: 12
|
||||
60: 12
|
||||
64: 14
|
||||
66: 12
|
||||
70: 14
|
||||
76: 20
|
||||
78: 17
|
||||
80: 14
|
||||
84: 14
|
||||
86: 14
|
||||
88: 18
|
||||
90: 20
|
||||
92: 14
|
||||
98: 18
|
4
2017/day13/testinput
Normal file
4
2017/day13/testinput
Normal file
@ -0,0 +1,4 @@
|
||||
0: 3
|
||||
1: 2
|
||||
4: 4
|
||||
6: 4
|
Loading…
Reference in New Issue
Block a user