57 lines
1.1 KiB
Go
57 lines
1.1 KiB
Go
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;j<blockSize;j++ {
|
|
blocks = append(blocks, strconv.Itoa(fileID))
|
|
}
|
|
fileID++
|
|
} else {
|
|
freeSpace, _ = strconv.Atoi(diskMap[i])
|
|
for j:=0;j<freeSpace;j++ {
|
|
blocks = append(blocks, ".")
|
|
}
|
|
}
|
|
}
|
|
for i := range blocks {
|
|
if blocks[i] == "." {
|
|
for j:=len(blocks)-1;j>i;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)
|
|
}
|