mirror of
https://github.com/bertptrs/adventofcode.git
synced 2025-12-25 21:00:31 +01:00
Implement day 13 in Go.
This commit is contained in:
54
2017/day-13/solution.go
Normal file
54
2017/day-13/solution.go
Normal file
@@ -0,0 +1,54 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func read_input() map[int]int {
|
||||
var level, depth int
|
||||
|
||||
var result = make(map[int]int)
|
||||
|
||||
for {
|
||||
if n, err := fmt.Scanf("%d: %d", &level, &depth); n != 2 || err != nil {
|
||||
break
|
||||
}
|
||||
|
||||
result[level] = depth
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func penalty(firewalls map[int]int) int {
|
||||
var score = 0
|
||||
|
||||
for level, depth := range firewalls {
|
||||
if level % (2 * depth - 2) == 0 {
|
||||
score += level * depth
|
||||
}
|
||||
}
|
||||
|
||||
return score
|
||||
}
|
||||
|
||||
func caught(firewalls map[int]int, offset int) bool {
|
||||
for level, depth := range firewalls {
|
||||
if (level + offset) % (2 * depth - 2) == 0 {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func main() {
|
||||
firewalls := read_input()
|
||||
|
||||
fmt.Printf("Penalty: %d\n", penalty(firewalls))
|
||||
|
||||
var offset = 1
|
||||
|
||||
for ; caught(firewalls, offset); offset++ {
|
||||
}
|
||||
|
||||
fmt.Printf("Wait time: %d\n", offset)
|
||||
}
|
||||
Reference in New Issue
Block a user