ファイルをリストにして読み込んで、ソートし、順番にスコアを計算していくだけです。
ファイルが巨大になった場合、全ての名前を一つの木構造に圧縮してから計算するとよいでしょう。
nameScore([],Score,Score):-!.
nameScore([C|Name],Score,Result):-
Score1 is Score+C-64,
nameScore(Name,Score1,Result).
score(No,Name,Result):-
nameScore(Name,0,Score),
Result is Score*No.
allScore(_,[],AllScore,AllScore):-!.
allScore(No,[Name|Names],AllScore,Result):-
score(No,Name,Score),
AllScore1 is AllScore+Score,
No1 is No+1,
allScore(No1,Names,AllScore1,Result).
myread(FN):-
open(FN,read,IS),
read_term(IS,Names,[]),
msort(Names,Names1),
allScore(1,Names1,0,Ans),
write(Ans),
close(IS).
main22:-myread('pe22.txt').
最終更新:2014年12月05日 02:17