diff options
Diffstat (limited to 'p102/p_102.go')
-rw-r--r-- | p102/p_102.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/p102/p_102.go b/p102/p_102.go new file mode 100644 index 0000000..d7e3f57 --- /dev/null +++ b/p102/p_102.go @@ -0,0 +1,56 @@ +package main + +import ( + "fmt" + "bufio" + "os" + "log" +) + +type Point struct { + x,y int +} + +type Triangle struct { + a,b,c Point +} + +func readTriangle( str string ) (ret Triangle) { + fmt.Sscanf(str, "%d,%d,%d,%d,%d,%d", &ret.a.x, &ret.a.y, &ret.b.x, &ret.b.y, &ret.c.x, &ret.c.y) + return ret +} +func det( a, b Point) int { + return a.x*b.y - a.y*b.x; +} + +func signe( c, a Point) bool { + return det(Point{ c.x - a.x, c.y - a.y}, Point{ -a.x, -a.y }) < 0 +} + + +func main() { + file, err := os.Open("p102_triangles.txt") + cmp := 0 + + if err != nil { + log.Fatal(err) + } + + defer file.Close() + + scan := bufio.NewScanner(file) + scan.Split(bufio.ScanLines) + + for scan.Scan() { + trian := readTriangle(scan.Text()) + + sign := signe( trian.c, trian.a ) + + if signe( trian.a, trian.b) == sign && signe( trian.b, trian.c ) == sign { + cmp++ + } + } + + fmt.Print(cmp); +} + |