このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1255709298/442
#  [1] 授業単元: C言語 
#  [2] 問題文(含コード&リンク):  
#  http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10025.txt
#  「スコアー,ステージナンバー,名前」が入っているファイルがあるとする。 
#   
#  降順にソート済みのスコアーデータのファイルから、上位10件を配列に読み込み、 
#  新たに11件目のスコアーデータを入力後、スコアーの大きい順に並び替えを行い、 
#  上位10件のデータを再度書き込むプログラムを作成せよ 
#   
# 999999,6,faegalr
# 999976,123,aaaaaa
# 999923,23,Steel
# 999765,43,tyudayo
# 786754,34,tyui
# 713146,10,gawehgpoin
# 654789,12,abaeuogn
# 479136,65,gwerhja
# 456789,43,tyu
# 454545,45,454545
# 123456,34,ert

'降順にソート済みのスコアーデータのファイルから、上位10件を配列に読み込み、
新たに11件目のスコアーデータを入力後、スコアーの大きい順に並び替えを行い、
上位10件のデータを再度書き込むプログラムを作成せよ'(_ファイル) :-
行ならび入力(ファイル,_行ならび),
findall(U,(member(A,Lines),split(A,[','],U)),LL1),
降順整列状態を保って挿入する(L,LL1,LL2),
forall(member(L,LL2),(atomic_list_concat(L,',',A),writef('%w\n',[A]))).

行ならび入力(_ファイル,_行ならび) :-
open(_ファイル,read,_入力),
findall(_行,(repeat,(at_end_of_stream(_入力),close(_入力),!,fail; 行入力(_入力,_行))),_行ならび).

一行追加に入力する(LL1,LL2) :-
行入力(_行),
項目区切り(_行,[','],L),
降順整列状態を保って挿入する(L,LL1,LL2).

行入力(_行) :-
行入力(user_input,_行).

行入力(_入力,_行) :-
read_line_to_codes(_入力,_コードならび),
atom_codes(_行,_コードならび).

項目区切り(_文字列,_区切り文字ならび,[_項|_項目区切りならび]) :-
'前文字列,区切り文字列,後文字列を確定し、前文字列は可能ならば数値に変換する'(_区切り文字列ならび,_文字列,_前文字列,_区切り文字列,_項),
項目区切り(_後文字列,_区切り文字列ならび,_項目区切りならび),!.
項目区切り(_文字列,_,[_項]) :- 可能ならば数値に変換(_文字列,_項).

'前文字列,区切り文字列,後文字列を確定し、前文字列は可能ならば数値に変換する'(_区切り文字列ならび,_文字列,_前文字列,_区切り文字列,_変換された項) :-
副文字列(_文字列,_前文字列,_区切り文字列,_後文字列),
member(_区切り文字列,_区切り文字名列ならび),
前文字列は可能ならば数値に変換する(_前文字列,_変換された項).

前文字列は可能ならば数値に変換(_前文字列,_数値に変換した前文字列) :-
atom_number(_前文字列,_数値に変換した前文字列),!.
前文字列は可能ならば数値に変換(_前文字列,_前文字列).

副文字列(_文字列,_前文字列,_副文字列,_後文字列) :-
atom_concat(_前文字列,_残り文字列,_文字列),
atom_concat(_副文字列,_後文字列,_残り文字列).

降順整列状態を保って挿入する(_挿入要素,L1,L2) :-
挿入点を求め挿入した上で最終要素を切り落とす(_挿入要素,L1,L2),!.
降順整列状態を保って挿入する(_挿入要素,L1,L1).

挿入点を求め挿入した上で最終要素を切り落とす(_挿入要素,L1,L2) :-
挿入点を求め(_挿入要素,L1,_1,_2,_3),
挿入した上で最終要素を切り落とす(_挿入要素,_1,_2,_3,L2).

挿入点を求め(_挿入要素,L1,_1,_2,_3) :-
append(_1,[_2|_3],L1),
_挿入要素 @>= _2.

挿入した上で最終要素を切り落とす(_挿入要素,_1,_2,_3,L2) :-
append(_1,[_挿入要素,_2|_3],L1_1),
append(L2,[_],L1_1).