from math import acos, sqrt, pi, atan import matplotlib.pyplot as plt def triangle(euler_text_line): ps = list(map(int, euler_text_line.split(","))) ps = [(ps[0], ps[1]), (ps[2], ps[3]), (ps[4], ps[5])] return ps def angle_x(x, y): if x > 0 and y == 0: return 0 elif x < 0 and y == 0: return pi elif x == 0 and y > 0: return pi / 2 elif x == 0 and y < 0: return 3 / 2 * pi elif x > 0 and y > 0: return atan(y / x) elif x < 0 and y > 0: return pi - atan(y / abs(x)) elif x < 0 and y < 0: return pi + atan(abs(y) / abs(x)) elif x > 0 and y < 0: return 2 * pi - atan(abs(y) / x) else: raise Exception("Unhandled case") def contains_origin(triangle): a, b, c = triangle angles = sorted([angle_x(*a), angle_x(*b), angle_x(*c)]) a = angles[1] - angles[0] b = angles[2] - angles[1] c = angles[0] + 2 * pi - angles[2] return not (a + b < pi or b + c < pi or c + a < pi) def euler_102(): with open("../txt/e102.txt", "r") as f: triangles = list(map(triangle, f.readlines())) return len([1 for t in triangles if contains_origin(t)]) if __name__ == "__main__": solution = euler_102() print("e102.py: " + str(solution)) assert(solution == 228)