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

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2018
三角形に並んだ数字の表を上から下にまで移動するとき最大値は幾らになるか。
詳細はリンク先参照のこと。




三角形をリストに直して'peb18.txt'に保管し後はdpで一発です。
コードは一行ずつdpで処理しその結果を出します。
一番最後に出力される行にある一番大きな数字が答えです。


read_data(X):-
	see('peb18.txt'),
	read(X),
	seen.

max(A,B,A):-A>B,!.
max(_,B,B):-!.

dp([X],[Y],[Z]):-
	!,
	Z is X+Y.

dp([X,X1|RestX],[Y|RestY],[Z3|Result]):-
	!,
	Z1 is X+Y,
	Z2 is X1+Y,
	max(Z1,Z2,Z3),
	dp([X1|RestX],RestY,Result).

calc_row([],Sum):-
	!,
 	write(Sum).

calc_row([R|Rows],Sum):-
	[TopS|_]=Sum,
	[TopR|RestR]=R,
 	dp(Sum,RestR,Sum1),
	TopS1 is TopS+TopR,
	Sum2=[TopS1|Sum1],
	write(Sum2),nl,
	calc_row(Rows,Sum2).
main:-
	read_data([Sum|Rows]),
	calc_row(Rows,Sum).
最終更新:2014年11月16日 11:05