added files

This commit is contained in:
kapypara 2024-04-26 21:41:08 +03:00
commit e54ed42e3d
5 changed files with 204 additions and 0 deletions

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module lem
go 1.22.0

36
main.go Normal file
View File

@ -0,0 +1,36 @@
package main
import (
"fmt"
"os"
"bufio"
"lem/maze"
)
func main() {
if len(os.Args) != 2 {
fmt.Println("only file please")
return
}
filename := os.Args[1]
file, err := os.Open(filename)
if err != nil {
fmt.Println("can't open file" + filename)
return
}
reader := bufio.NewReader(file)
m := maze.Load(reader)
if (m == nil) {
fmt.Println("Bad input file")
return
}
m.Solve()
}

23
maze.txt Normal file
View File

@ -0,0 +1,23 @@
3
##start
1 23 3
2 16 7
3 16 3
4 16 5
5 9 3
6 1 5
7 4 8
##end
0 9 5
0-4
0-6
1-3
4-3
5-2
3-5
4-2
2-1
7-6
7-2
7-4
6-5

138
maze/maze.go Normal file
View File

@ -0,0 +1,138 @@
package maze
import (
"bufio"
"strconv"
"strings"
)
type Maze struct {
antCount int
rooms []Room
}
type Room struct {
connections []Room
distance int
name string
occupancies int
isEnd bool
}
func Load(inputStream *bufio.Reader) *Maze {
maze := &Maze{}
// first line (ant count)
line, err := inputStream.ReadString('\n')
if (err != nil || len(line) == 0) {
return nil
}
maze.antCount, err = strconv.Atoi(line[:len(line)-1])
if (err != nil) {
return nil
}
// second line (##start)
line, err = inputStream.ReadString('\n')
if (err != nil || len(line) == 0 || line != "##start\n") {
return nil
}
if !maze.loadRooms(inputStream) {
return nil
}
if !maze.mapFarm(inputStream) { // connect rooms and calculate distance
return nil
}
return maze
}
func (maze *Maze) Solve() {
}
func (maze *Maze) loadRooms(inputStream *bufio.Reader) bool {
var line string
var err error
var roomName string
readName := func() {
roomName = ""
line, err = inputStream.ReadString('\n')
if err != nil || len(line) == 0 {
// print("can't read")
return
}
// print(line)
parts := strings.Split(line[:len(line)-1], " ")
if len(parts) != 3 {
// println("parts error ", line[:len(line)-1], len(parts))
return
}
_, err1 := strconv.Atoi(parts[1])
_, err2 := strconv.Atoi(parts[2])
// anti fun measure
if err1 != nil || err2 != nil {
// print(parts[1], err1 == nil, parts[2], err2 == nil)
return
}
roomName = parts[0]
}
// first Room
readName()
if roomName == "" {
return false
}
room := Room{ name: roomName, occupancies: maze.antCount }
maze.rooms = append(maze.rooms, room)
// rest of the farm
readName()
for err == nil {
if (line == "##end\n") {
// print("end?")
maze.rooms[len(maze.rooms)-1].isEnd = true
return true
} else if (roomName == "") {
// print("loop empty")
return false
}
room = Room{ name: roomName, occupancies: 0 }
maze.rooms = append(maze.rooms, room)
readName()
}
// print("bad exit")
return false
}
func (maze *Maze) mapFarm(inputStream *bufio.Reader) bool {
for _, v := range maze.rooms {
println(v.name, v.occupancies, v.isEnd)
}
return true
}

4
maze/parser.go Normal file
View File

@ -0,0 +1,4 @@
package maze