このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1301553333/212
#  [1]C言語演習 
#  [2]問題文 
#  次の形式のタブ区切りファイルがある。(行数は最大で1000万行とする) 
#  生徒ID クラス名 国語得点 数学得点 英語得点 
#  生徒IDは8桁の0から9で構成される文字列 
#  クラス名は4桁の0から9で構成される文字列 
#  国語得点、数学得点、英語得点は3桁の0から9で構成される文字列とする。 
#   
#  (1)各教科の得点の和が同じ生徒達のグループについて、そのグループが何人で何クラスの 
#  生徒から構成されているかを、得点和毎に表出力せよ 
#  ただし0人で構成されるグループについては出力する必要がない。 
#  形式例 
#  得点:123 人数:5人 グループ数:4 
#  得点:128 人数:3人 グループ数:3 
#  得点:214 人数:11人 グループ数:9 
#  ............ 
#   
#  (2)それぞれの教科の得点が所属しているクラスの各教科の平均点の大小関係と 
#  同じ生徒をリストアップせよ 
#  ただしあるクラスの2つの教科の平均点が一致している場合はその2つの教科の得点の 
#  大小関係は不問として出力する。(3つが一致している場合はそのクラスの生徒全員 
#  がリストアップされることになる 
#  [3] OSはLinux,言語はCです。(C++は不可) 
#  [4] 4/30まで 
#  [5] stdlib.h stdio.h string.hをincludeしても良いがそれ以外は不可だそうです 
#  よろしくお願いします。 
# 
# 

'各教科の得点の和が同じ生徒達のグループについて、そのグループが何人で何クラスの生徒から構成されているかを、得点和毎に表出力せよ'(_ファイル) :-
        get_split_lines(_ファイル,['\t'],LL),
        findall([_得点合計,_クラス名],(
                    append(_,[[_生徒ID,_クラス名,_国語得点,_数学得点,_英語得点]|_],LL),
                    _得点合計 is _国語得点,_数学得点,_英語得点),
                L1),
        findsetof(_得点合計,(
                     append(_,[[_得点合計,_]|_,L1)),
                L2),
        findsetof([_得点合計,_クラス](
                     append(_,[[_得点合計,_クラス]|_,L1)),
                L3),

        findall([_得点合計,_グループ人数,_クラス数],(
                     append(_,[_得点合計|_],L2),
                     count(append(_,[[_得点合計,_]|_],L1),_グループ人数)),
                     count(append(_,[[_得点合計,_]|_],L3),_クラス数)),
                _得点合計・グループ人数・クラス数集計ならび),
        出力する(_得点合計・グループ人数・クラス数集計ならび).

出力する(_得点合計・グループ人数・クラス数集計ならび) :-
        append(_,[[_得点合計,_グループ人数,_クラス数]|R],_得点合計・グループ人数・クラス数集計ならび),
        write_formatted('得点:%t 人数:%t人 グループ数:%t\n',[_得点合計,_グループ人数,_クラス数]),
        R = [],!.