package main
import (
"bufio"
"log"
"os"
"strconv"
"strings"
)
const impCounter = 14
type pair [2]int
type pairs [impCounter]pair
func main() {
if err := myMain(); err != nil {
log.Println(err)
}
}
func myMain() error {
prs, err := parseInput("input.txt")
if err != nil {
return err
}
solveFirst(prs)
solveSecond(prs)
return nil
}
func solveFirst(prs pairs) {
const start = 9
ret := [impCounter]int{}
stack := [][2]int{}
for i := 0; i < impCounter; i++ {
if prs[i][0] > 0 {
stack = append(stack, [2]int{prs[i][1], i})
} else {
p := stack[len(stack)-1]
stack = stack[:len(stack)-1]
add := start
for add+p[0]+prs[i][0] > start {
add--
}
ret[p[1]] = add
ret[i] = add + p[0] + prs[i][0]
}
}
log.Println(ret)
}
func solveSecond(prs pairs) {
const start = 1
ret := [impCounter]int{}
stack := [][2]int{}
for i := 0; i < impCounter; i++ {
if prs[i][0] > 0 {
stack = append(stack, [2]int{prs[i][1], i})
} else {
p := stack[len(stack)-1]
stack = stack[:len(stack)-1]
add := start
for add+p[0]+prs[i][0] < start {
add++
}
ret[p[1]] = add
ret[i] = add + p[0] + prs[i][0]
}
}
log.Println(ret)
}
func parseInput(fileName string) (pairs, error) {
ret := pairs{}
fd, err := os.Open(fileName)
if err != nil {
return ret, err
}
defer fd.Close()
const (
impLength = 18
offset0 = 5
offset1 = 15
)
buf := bufio.NewScanner(fd)
for line, counter := 0, 0; buf.Scan(); line++ {
if line == impLength*counter+offset0 {
ret[counter][0], err = strconv.Atoi(strings.Split(buf.Text(), " ")[2])
if err != nil {
log.Println(err)
}
}
if line == impLength*counter+offset1 {
ret[counter][1], err = strconv.Atoi(strings.Split(buf.Text(), " ")[2])
if err != nil {
log.Println(err)
}
counter++
}
}
return ret, nil
}