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 freeSpace := 0 blocks := []string{} for i := range diskMap { if i % 2 == 0 { blockSize, _ = strconv.Atoi(diskMap[i]) for j:=0;ji;j-- { if blocks[j] != "." { blocks[i] = blocks[j] blocks[j] = "." break } } } } checksum := 0 for i := range blocks { blockID, _ := strconv.Atoi(blocks[i]) checksum = checksum + i * blockID } fmt.Println(checksum) }