1package pdfexport23import (4 "encoding/json"5 "fmt"6 "strings"7)89type fillominoSave struct {10 Width int `json:"width"`11 Height int `json:"height"`12 State string `json:"state"`13 Provided string `json:"provided"`14}1516func ParseFillominoPrintData(saveData []byte) (*FillominoData, error) {17 if len(strings.TrimSpace(string(saveData))) == 0 {18 return nil, nil19 }2021 var save fillominoSave22 if err := json.Unmarshal(saveData, &save); err != nil {23 return nil, fmt.Errorf("decode fillomino save: %w", err)24 }25 if save.Width <= 0 || save.Height <= 0 {26 return nil, nil27 }2829 state, err := parseNumberGrid(save.State, save.Width, save.Height)30 if err != nil {31 return nil, err32 }33 provided := parseProvidedMask(save.Provided, save.Width, save.Height)3435 givens := make([][]int, save.Height)36 for y := 0; y < save.Height; y++ {37 givens[y] = make([]int, save.Width)38 for x := 0; x < save.Width; x++ {39 if provided[y][x] {40 givens[y][x] = state[y][x]41 }42 }43 }4445 return &FillominoData{46 Width: save.Width,47 Height: save.Height,48 Givens: givens,49 }, nil50}