102問目
http://projecteuler.net/index.php?section=problems&id=102
与えられた三角形の中で原点を含むものの数を求める。
∠AOB, ∠BOC, ∠COA の外積を取って、全て正/全て負ならABCは原点を中心に反時計回り/時計回りに並んでいることになるので、原点を含むと分かります。
main = print . euler102 . map (read . ("[" ++) . (++ "]")) . lines =<< readFile "triangles.txt" euler102 :: [[Int]] -> Int euler102 = length . filter containsOrigin . map crossProduct crossProduct :: [Int] -> [Int] crossProduct [xa,ya,xb,yb,xc,yc] = [xa*yb-xb*ya, xb*yc-xc*yb, xc*ya-xa*yc] containsOrigin :: [Int] -> Bool containsOrigin [ab, bc, ca] = (ab >= 0 && bc >= 0 && ca >= 0) || (ab <= 0 && bc <= 0 && ca <= 0)