Add Files of first version
This commit is contained in:
11
data/hund01.txt
Normal file
11
data/hund01.txt
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
5
|
||||||
|
13 18 29 8
|
||||||
|
29 8 31 19
|
||||||
|
31 19 41 30
|
||||||
|
41 30 17 32
|
||||||
|
17 32 13 18
|
||||||
|
1
|
||||||
|
3
|
||||||
|
23 19
|
||||||
|
31 25
|
||||||
|
21 27
|
||||||
27
data/hund02.txt
Normal file
27
data/hund02.txt
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
9
|
||||||
|
54 42 52 32
|
||||||
|
54 64 54 42
|
||||||
|
2 64 54 64
|
||||||
|
2 42 2 64
|
||||||
|
8 38 2 42
|
||||||
|
18 44 8 38
|
||||||
|
52 32 18 44
|
||||||
|
36 2 52 32
|
||||||
|
8 38 36 2
|
||||||
|
2
|
||||||
|
8
|
||||||
|
30 22
|
||||||
|
35 16
|
||||||
|
40 21
|
||||||
|
36 23
|
||||||
|
37 28
|
||||||
|
36 32
|
||||||
|
26 34
|
||||||
|
25 23
|
||||||
|
6
|
||||||
|
38 46
|
||||||
|
43 40
|
||||||
|
48 45
|
||||||
|
44 56
|
||||||
|
18 57
|
||||||
|
23 48
|
||||||
116
data/hund03.txt
Normal file
116
data/hund03.txt
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
30
|
||||||
|
87 63 68 91
|
||||||
|
68 91 34 94
|
||||||
|
68 91 55 53
|
||||||
|
55 53 34 94
|
||||||
|
55 53 87 63
|
||||||
|
87 63 66 26
|
||||||
|
66 26 31 6
|
||||||
|
34 94 29 59
|
||||||
|
66 26 99 53
|
||||||
|
55 53 31 6
|
||||||
|
29 59 31 6
|
||||||
|
99 53 90 17
|
||||||
|
90 17 66 26
|
||||||
|
87 63 99 53
|
||||||
|
29 59 1 36
|
||||||
|
31 6 90 17
|
||||||
|
1 36 31 6
|
||||||
|
99 53 99 91
|
||||||
|
29 59 5 83
|
||||||
|
55 53 66 26
|
||||||
|
5 83 34 94
|
||||||
|
29 59 55 53
|
||||||
|
87 63 99 91
|
||||||
|
68 91 99 91
|
||||||
|
1 36 6 6
|
||||||
|
1 36 5 83
|
||||||
|
31 6 6 6
|
||||||
|
31 6 19 34
|
||||||
|
19 34 29 59
|
||||||
|
19 34 1 36
|
||||||
|
11
|
||||||
|
8
|
||||||
|
91 2
|
||||||
|
95 5
|
||||||
|
95 9
|
||||||
|
89 4
|
||||||
|
80 9
|
||||||
|
79 5
|
||||||
|
91 1
|
||||||
|
91 2
|
||||||
|
4
|
||||||
|
16 56
|
||||||
|
15 63
|
||||||
|
8 62
|
||||||
|
16 56
|
||||||
|
11
|
||||||
|
12 98
|
||||||
|
6 93
|
||||||
|
5 99
|
||||||
|
5 100
|
||||||
|
5 92
|
||||||
|
8 93
|
||||||
|
13 92
|
||||||
|
17 93
|
||||||
|
20 100
|
||||||
|
15 95
|
||||||
|
12 98
|
||||||
|
7
|
||||||
|
53 77
|
||||||
|
57 77
|
||||||
|
59 79
|
||||||
|
57 84
|
||||||
|
55 83
|
||||||
|
53 78
|
||||||
|
53 77
|
||||||
|
6
|
||||||
|
59 3
|
||||||
|
66 3
|
||||||
|
72 1
|
||||||
|
75 6
|
||||||
|
57 2
|
||||||
|
59 3
|
||||||
|
5
|
||||||
|
52 79
|
||||||
|
52 83
|
||||||
|
46 85
|
||||||
|
50 80
|
||||||
|
52 79
|
||||||
|
5
|
||||||
|
35 43
|
||||||
|
35 42
|
||||||
|
38 36
|
||||||
|
41 38
|
||||||
|
35 43
|
||||||
|
6
|
||||||
|
72 67
|
||||||
|
76 65
|
||||||
|
70 69
|
||||||
|
68 68
|
||||||
|
68 64
|
||||||
|
72 67
|
||||||
|
10
|
||||||
|
42 44
|
||||||
|
45 45
|
||||||
|
46 50
|
||||||
|
43 49
|
||||||
|
42 50
|
||||||
|
38 50
|
||||||
|
41 47
|
||||||
|
41 46
|
||||||
|
41 43
|
||||||
|
42 44
|
||||||
|
5
|
||||||
|
10 17
|
||||||
|
10 16
|
||||||
|
16 11
|
||||||
|
15 12
|
||||||
|
10 17
|
||||||
|
6
|
||||||
|
100 93
|
||||||
|
110 97
|
||||||
|
113 98
|
||||||
|
110 103
|
||||||
|
92 107
|
||||||
|
95 103
|
||||||
45
data/hund04.txt
Normal file
45
data/hund04.txt
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
22
|
||||||
|
90 56 50 55
|
||||||
|
50 55 95 42
|
||||||
|
90 56 52 68
|
||||||
|
90 56 95 42
|
||||||
|
50 55 52 68
|
||||||
|
52 68 12 73
|
||||||
|
50 55 12 73
|
||||||
|
52 68 57 98
|
||||||
|
52 68 27 91
|
||||||
|
50 55 21 36
|
||||||
|
90 56 69 78
|
||||||
|
21 36 17 5
|
||||||
|
17 5 2 42
|
||||||
|
2 42 50 55
|
||||||
|
50 55 17 5
|
||||||
|
52 68 69 78
|
||||||
|
69 78 57 98
|
||||||
|
50 55 66 15
|
||||||
|
17 5 49 26
|
||||||
|
57 98 27 91
|
||||||
|
17 5 66 15
|
||||||
|
50 55 49 26
|
||||||
|
4
|
||||||
|
4
|
||||||
|
53 52
|
||||||
|
69 13
|
||||||
|
105 27
|
||||||
|
98 39
|
||||||
|
7
|
||||||
|
79 107
|
||||||
|
85 113
|
||||||
|
77 127
|
||||||
|
80 112
|
||||||
|
70 114
|
||||||
|
68 130
|
||||||
|
65 110
|
||||||
|
3
|
||||||
|
9 50
|
||||||
|
22 55
|
||||||
|
5 66
|
||||||
|
3
|
||||||
|
20 80
|
||||||
|
30 75
|
||||||
|
1 105
|
||||||
4297
data/hund05.txt
Normal file
4297
data/hund05.txt
Normal file
File diff suppressed because it is too large
Load Diff
2626
data/hund06.txt
Normal file
2626
data/hund06.txt
Normal file
File diff suppressed because it is too large
Load Diff
25
main.go
Normal file
25
main.go
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
maps := make([]Map, len(os.Args)-1)
|
||||||
|
for i, a := range os.Args {
|
||||||
|
if i == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
maps[i-1] = parseMap(a)
|
||||||
|
}
|
||||||
|
printMaps(maps)
|
||||||
|
minDist := calcMin(maps)
|
||||||
|
fmt.Printf("The max distance is: %f", minDist)
|
||||||
|
}
|
||||||
|
|
||||||
|
func printMaps(maps []Map) {
|
||||||
|
for i, v := range maps {
|
||||||
|
fmt.Printf("%d:\n\tPaths: %v\n\tPonds: %v\n", i, v.paths, v.ponds)
|
||||||
|
}
|
||||||
|
}
|
||||||
32
minpath.go
Normal file
32
minpath.go
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"math"
|
||||||
|
)
|
||||||
|
|
||||||
|
func calcMin(maps []Map) float64 {
|
||||||
|
var minDist float64 = math.MaxFloat64
|
||||||
|
for _, m := range maps {
|
||||||
|
for _, path := range m.paths {
|
||||||
|
minDist = math.Min(minDist, calcMinPath(path, m.ponds))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return minDist
|
||||||
|
}
|
||||||
|
|
||||||
|
func calcMinPath(path Path, ponds []Pond) float64 {
|
||||||
|
var minDist float64 = math.MaxFloat64
|
||||||
|
for _, pond := range ponds {
|
||||||
|
for _, vertex := range pond.vertices {
|
||||||
|
cinitial := path.start.distance(path.end)
|
||||||
|
ainitial := path.end.distance(vertex)
|
||||||
|
c := path.start.distance(vertex)
|
||||||
|
alpha := math.Acos((ainitial*ainitial - cinitial*cinitial - c*c) / (-2 * cinitial * c))
|
||||||
|
height := math.Sin(alpha) * c
|
||||||
|
minDist = math.Min(minDist, height)
|
||||||
|
fmt.Printf("alpha: %f, c: %f, cinital: %f, ainitial: %F, h: %f\n", alpha, c, cinitial, ainitial, height)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return minDist
|
||||||
|
}
|
||||||
86
parse.go
Normal file
86
parse.go
Normal 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
|
||||||
|
}
|
||||||
26
structs.go
Normal file
26
structs.go
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import "math"
|
||||||
|
|
||||||
|
type Coordinate struct {
|
||||||
|
x, y int
|
||||||
|
}
|
||||||
|
|
||||||
|
type Path struct {
|
||||||
|
start, end Coordinate
|
||||||
|
}
|
||||||
|
|
||||||
|
type Pond struct {
|
||||||
|
vertices []Coordinate
|
||||||
|
}
|
||||||
|
|
||||||
|
type Map struct {
|
||||||
|
paths []Path
|
||||||
|
ponds []Pond
|
||||||
|
}
|
||||||
|
|
||||||
|
func (current Coordinate) distance(other Coordinate) float64 {
|
||||||
|
dx := math.Abs(float64(current.x - other.x))
|
||||||
|
dy := math.Abs(float64(current.y - other.y))
|
||||||
|
return math.Sqrt(dx*dx + dy*dy)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user