>>878
% Prolog

成績上位11名 :-
  成績データを得る(_成績ならび),
  sort(_成績ならび,_整列した成績ならび),
  上位11名の選別(_整列した成績ならび,_上位11名ならび),
  member([A,B,C],_上位11名ならび),
  write_formatted('%t %t\n',[C,A]),
  fail.
成績上位11名.

成績データを得る(_成績ならび) :-
  get_line(Line),
  成績データを得る(1,Line,_成績ならび).

成績データを得る(_,'0 0',[]).
成績データを得る(N行,_行,[[_成績,N行,_学籍番号]|R]) :-
  split(_行,[' '],[_学籍番号,_成績]),
  get_line(_行2),
  N2行 is N行 + 1,
  成績データを得る(N2行,_行2,R).

上位11名の選別(L,X) :-
  length(X,11),
  append(X,_,L),!.
上位11名の選別(X,X).