VNBOX2STPE6DWULNVZSMB5BDTCTAPZDOMKYLCVZX67ROZKPSDSDQC
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
}
inp w
mul x 0
add x z
mod x 26
div z 1
add x 14
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 1
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 1
add x 15
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 7
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 1
add x 15
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 13
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 26
add x -6
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 10
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 1
add x 14
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 0
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 26
add x -4
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 13
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 1
add x 15
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 11
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 1
add x 15
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 6
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 1
add x 11
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 1
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 26
add x 0
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 7
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 26
add x 0
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 11
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 26
add x -3
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 14
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 26
add x -9
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 4
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 26
add x -9
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 10
mul y x
add z y
module main
go 1.17