三角形をリストに直して'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