「プロジェクトオイラー問102」の編集履歴(バックアップ)一覧に戻る

プロジェクトオイラー問102 - (2014/03/05 (水) 11:51:44) のソース

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%20102


*Problem 102 「三角形の包含」 †
2次元平面に三角形の座標が与えられるので、原点を含む三角形の数をこたえる問題。
詳細はリンク先参照のこと。




解法
2次元の外積の値で判断します。
それだけ。
三角形のデータファイルはテキストエディタでPrologのリスト形式に変換してから読み込んだ。


 check(T1,T2,T3):-T1=<0,T2=<0,T3=<0,!.
 check(T1,T2,T3):-0=<T1,0=<T2,0=<T3,!.
 
 
 isIns(Rows,1):-
 	member([X1,Y1,X2,Y2,X3,Y3],Rows),
 	T1 is X1*Y2-X2*Y1,
 	T2 is X2*Y3-X3*Y2,
 	T3 is X3*Y1-X1*Y3,
 	check(T1,T2,T3).
 
 
 main102:-
 	open('pe102.txt',read,IS),
 	read_term(IS,Rows,[]),
 	close(IS),
 	findall(C,isIns(Rows,C),Count),
 	length(Count,Ans),
 	write(Ans).