このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1309527259/120
#  [1] 問題文(含コード&リンク):このスレで「◆QZaw55cn4cって」から始まる定形の書き込みの 
#       間隔を調べ、最短書き込み間隔と最長書き込み間隔を表示しなさい。 
#  [2] 環境 
#   [2.1] 言語: C 
#   [2.2] OS: LINUX 
#   [2.3] コンパイラ名とバージョン: 
#  [3] 回答希望期限:2011年7月8日 
# 
# 

'ログから書き込みの間隔を調べ、最短書き込み間隔と最長書き込み間隔を表示する' :-
        get_split_lines('http://codepad.org/nYthq5XX',[' ','/',':','.'],LL),
        findall([A,B,C,D,E,F],(
                    member(L,LL),
                    append(_,[A,B,C,D,E,F,_],L)),
                LL2),
        日付間隔ならびを得る(LL2,_日付間隔ならび),
        max(_日付間隔ならび,_最長書き込み間隔),
        min(_日付間隔ならび,_最短書き込み間隔),
        表示する(_最長書き込み間隔,_最短書き込み間隔),!.

日付間隔ならびを得る([_],[]) :- !.
日付間隔ならびを得る([[A1,B1,C1,D1,E1,F1],[A2,B2,C2,D2,E2,F2]|R1],[[_何日,_何時間,_何分,_何秒]|R2]) :-
        count(翌日(A1,B1,C1,A2,B2,C2,_,_,_),Count),
        時分秒の補正(Count,D1,E1,F1,D2,E2,F2,_何日,_何時間,_何分,_何秒),
        日付間隔ならびを得る([[A2,B2,C2,D2,E2,F2]|R1],R2).

時分秒の補正(Count,D1,E1,F1,D2,E2,F2,_何日,_何時間,_何分,_何秒) :-
        秒に変換(D1,E1,F1,_秒1),
        秒に変換(D2,E2,F2,_秒2),
        時分秒の補正(_秒1,_秒2,Count,_何日,_何時間,_何分,_何秒).

時分秒の補正(_秒1,_秒2,_何日,_何日,_何時間,_何分,_何秒) :-
        _秒2 @>= _秒1,
        _秒数 is (_秒2 - _秒1),
        秒数から時間の算出(_秒数,_何時間,_何分,_何秒),!.
時分秒の補正(_秒1,_秒2,Count,_何日,_何時間,_何分,_何秒) :-
        _秒2 < _秒1,
        _何日 is Count - 1,
        _秒数 is 38400 + (_秒2 - _秒1),
        秒数から時間の算出(_秒数,_何時間,_何分,_何秒).

秒数から時間の算出(_秒数,_何時間,_何分,_何秒) :-
        _何時間 is _秒数 // 3600,
        S2 is S1 mod 3600,
        _何分 is S2 // 60,
        _何秒 is S2 mod 60,!.

表示する(_最長書き込み間隔,_最短書き込み間隔) :-
        writef('最長書き込み間隔は %t日 %t時間 %t分 %秒 です。\n',_最長書き込み間隔),
        writef('最短書き込み間隔は %t日 %t時間 %t分 %秒 です。\n',_最短書き込み間隔),!.


% 翌日/9の定義は http://nojiriko.asia/prolog/c150_293.html 参照