package main import ( "bufio" "fmt" "os" "strconv" "strings" ) func main() { // file, _ := os.Open("test") file, _ := os.Open("input") defer file.Close() scanner := bufio.NewScanner(file) diskMap := []string{} for scanner.Scan() { line := scanner.Text() diskMap = append(diskMap, strings.Split(line, "")...) } fileID := 0 blockSize := 0 blockSizes := []int{} freeSpace := 0 freeSpaces := []int{} blocks := []string{} for i := range diskMap { if i % 2 == 0 { blockSize, _ = strconv.Atoi(diskMap[i]) blockSizes = append(blockSizes, blockSize) for j:=0;j=0;id-- { idPositions := findIDpositions(blocks,id) for moveTo:=0;moveTo<=id;moveTo++ { if moveTo==id { continue } if len(idPositions) <= freeSpaces[moveTo] { //find the spaces after the moveTo idSpacePositions := findSpacesAfterID(blocks,moveTo,freeSpaces[moveTo]) //assign id to spaces for each len(idPositions) for i:=0;i