func MakeComputer(PuzzleInput []int, PhaseSetting int) Intcode {
	puzzleInputCopy := make([]int, len(PuzzleInput))
	copy(puzzleInputCopy, PuzzleInput)
	comp := Intcode{
		PhaseSetting,
		puzzleInputCopy,
		0,
		0,
	}
	comp.Step(PhaseSetting)
	return comp
}
MakeComputer initializes a new comp
package main
import (
	"fmt"
	"log"
	"strconv"
	"strings"
	"github.com/alexchao26/advent-of-code-go/algos"
	"github.com/alexchao26/advent-of-code-go/util"
)
func main() {
	inputFile := util.ReadFile("../input.txt")
	splitStrings := strings.Split(inputFile, ",")
	inputNumbers := make([]int, len(splitStrings))
	for i, v := range splitStrings {
		inputNumbers[i], _ = strconv.Atoi(v)
	}
	perms := algos.PermuteIntSlice([]int{0, 1, 2, 3, 4})
	highestOutput := 0
	for _, perm := range perms {
		ampA := MakeComputer(inputNumbers, perm[0])
		ampB := MakeComputer(inputNumbers, perm[1])
		ampC := MakeComputer(inputNumbers, perm[2])
		ampD := MakeComputer(inputNumbers, perm[3])
		ampE := MakeComputer(inputNumbers, perm[4])
		ampA.Step(0)
		ampB.Step(ampA.LastOutput)
		ampC.Step(ampB.LastOutput)
		ampD.Step(ampC.LastOutput)
		ampE.Step(ampD.LastOutput)
		if ampE.LastOutput > highestOutput {
			highestOutput = ampE.LastOutput
		}
	}
	fmt.Printf("Highest output is %v\n", highestOutput)
}
type Intcode struct {
	PhaseSetting     int    
	PuzzleInput      []int  
	InstructionIndex int    
	LastOutput       int    
}