31 lines
446 B
Go
31 lines
446 B
Go
package defrag
|
|
|
|
import (
|
|
"strconv"
|
|
)
|
|
|
|
func Blocks(diskMap []byte) ([]int, error) {
|
|
current := 0
|
|
onFile := false
|
|
out := []int{}
|
|
for _, by := range diskMap {
|
|
count, err := strconv.Atoi(string(by))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
onFile = !onFile
|
|
|
|
if count == 0 {
|
|
continue
|
|
}
|
|
val := -1
|
|
if onFile {
|
|
val = current
|
|
current++
|
|
}
|
|
for idx := 0; idx < count; idx++ {
|
|
out = append(out, val)
|
|
}
|
|
}
|
|
return out, nil
|
|
}
|