Add Files of first version

This commit is contained in:
2025-11-12 22:17:04 +01:00
parent a43b15566b
commit d568231f94
11 changed files with 7294 additions and 0 deletions

86
parse.go Normal file
View File

@@ -0,0 +1,86 @@
package main
import (
"bufio"
"os"
"strconv"
"strings"
)
func parseMap(path string) Map {
file, err := os.Open(path)
if err != nil {
panic(err)
}
defer func() {
file.Close()
}()
scanner := bufio.NewScanner(file)
scanner.Scan()
line := scanner.Text()
amountPaths, err := strconv.ParseInt(line, 10, 8)
if err != nil {
panic(err)
}
paths := parsePaths(scanner, int(amountPaths))
scanner.Scan()
line = scanner.Text()
amountPonds, err := strconv.ParseInt(line, 10, 8)
if err != nil {
panic(err)
}
ponds := parsePonds(scanner, int(amountPonds))
return Map{paths, ponds}
}
func parsePaths(scanner *bufio.Scanner, amount int) []Path {
paths := make([]Path, amount)
for i := 0; i < amount && scanner.Scan(); i++ {
line := scanner.Text()
numbers := strings.Split(line, " ")
startx, _ := strconv.ParseInt(numbers[0], 10, 8)
starty, _ := strconv.ParseInt(numbers[1], 10, 8)
endx, _ := strconv.ParseInt(numbers[2], 10, 8)
endy, _ := strconv.ParseInt(numbers[3], 10, 8)
startc := Coordinate{int(startx), int(starty)}
endc := Coordinate{int(endx), int(endy)}
paths[i] = Path{startc, endc}
}
if scanner.Err() != nil {
panic(scanner.Err())
}
return paths
}
func parsePonds(scanner *bufio.Scanner, amount int) []Pond {
ponds := make([]Pond, amount)
for i := 0; i < amount && scanner.Scan(); i++ {
line := scanner.Text()
amountVertices, err := strconv.ParseInt(line, 10, 8)
vertices := make([]Coordinate, amountVertices)
if err != nil {
panic(err)
}
for j := 0; j < int(amountVertices) && scanner.Scan(); j++ {
line := scanner.Text()
numbers := strings.Split(line, " ")
vx, _ := strconv.ParseInt(numbers[0], 10, 8)
vy, _ := strconv.ParseInt(numbers[1], 10, 8)
vertices[j] = Coordinate{int(vx), int(vy)}
}
if scanner.Err() != nil {
panic(scanner.Err())
}
ponds[i] = Pond{vertices}
}
if scanner.Err() != nil {
panic(scanner.Err())
}
return ponds
}