「プロジェクトオイラー問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次元の外積の値で判断します。
それだけ。
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).
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).