プロジェクトオイラー問102

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%20102
Problem 102 「三角形の包含」 †
平面上の三角形の座標が与えられるのでそれが原点を含んでいるか調べる問題。


解法
ファイルはProlog言語で読みやすいようにテキストエディタで置き返してから読み込み。
原点を中心に三角形2点との外積とって全部時計回りか反時計回りなら原点を内部に含む。
線上に原点がある場合は内部に含まないでいいようだ。


check2(A,B,C):-A<0,B<0,C<0,!.
check2(A,B,C):-A>0,B>0,C>0,!.

check([X1,Y1,X2,Y2,X3,Y3]):-
	A is X1*Y2-X2*Y1,
 	B is X2*Y3-X3*Y2,
	C is X3*Y1-X1*Y3,
	check2(A,B,C).

ok(Es,1):-
	member(E,Es),
	check(E).

main:-
	see('pe102.txt'),
	read(Es),
	seen,
	findall(E,ok(Es,E),Ans),
	length(Ans,Ans1),
	write(Ans1).
最終更新:2014年12月31日 03:37