Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- :- use_module(library(lists)).
- %% Teste Modelo 17/18
- %participant(Id,Age,Performance)
- participant(1234, 17, 'Pé coxinho').
- participant(3423, 21, 'Programar com os pés').
- participant(3788, 20, 'Sing a Bit').
- participant(4865, 22, 'Pontes de esparguete').
- participant(8937, 19, 'Pontes de pen-drives').
- participant(2564, 20, 'Moodle hack').
- %performance(Id,Times)
- performance(1234,[120,120,120,120]).
- performance(3423,[32,120,45,120]).
- performance(3788,[110,2,6,43]).
- performance(4865,[120,120,110,120]).
- performance(8937,[97,101,105,110]).
- % P1 madeItThrough(+Id)
- madeItThrough(Id) :-
- performance(Id, Times),
- member(120, Times).
- % P2 juriTimes(+Participants, +JuriMember, -Times, -Total)
- juriTimes([], _, [], 0).
- juriTimes([First | OtherParticipants], JuriMember, [FirstTime | OtherTimes], Total) :-
- performance(First, Times),
- nth1(JuriMember, Times, FirstTime),
- juriTimes(OtherParticipants, JuriMember, OtherTimes, NTotal),
- Total is NTotal + FirstTime.
- % P3 patientJuri(+JuriMember)
- patientJuri(JuriMember) :-
- performance(Id1, Times1),
- nth1(JuriMember, Times1, 120),
- performance(Id2, Times2),
- Id1 \= Id2,
- nth1(JuriMember, Times2, 120).
- % P4 bestParticipant(+P1, +P2, -P)
- bestParticipant(P1, P2, P) :-
- performance(P1, Times1),
- performance(P2, Times2),
- sum_list(Times1, Sum1),
- sum_list(Times2, Sum2),
- Diff is Sum1 - Sum2,
- bestParticipantAux(P1, P2, Diff, P).
- bestParticipantAux(P1, _P2, Diff, P1) :-
- Diff > 0.
- bestParticipantAux(_P1, P2, Diff, P2) :-
- Diff < 0.
- sum_list([], 0).
- sum_list([First | Rest], Sum) :-
- sum_list(Rest, RestSum),
- Sum is RestSum + First.
- % P5 allPerfs
- allPerfs :-
- performance(Id, Times),
- participant(Id, _, Name),
- write(Id), write(':'),
- write(Name), write(':'),
- write(Times), nl,
- fail.
- allPerfs.
- % P6 nSuccessfulParticipants(-N)
- nSuccessfulParticipants(N) :-
- findall(Id, (performance(Id, Times), successfulTimes(Times)), Result),
- length(Result, N).
- successfulTimes(Times) :-
- member(Elem, Times),
- Elem < 120, !, fail.
- successfulTimes(_).
- % P7 juriFans(-juriFansList)
- juriFans(List) :-
- findall(Id-Fans, (performance(Id, Times), juriFansAux(Times, Fans, 1)), List).
- juriFansAux([], [], _).
- juriFansAux([120 | RestT], [Count | OtherFans], Count) :-
- !, NCount is Count + 1,
- juriFansAux(RestT, OtherFans, NCount).
- juriFansAux([_ | RestT], OtherFans, Count) :-
- NCount is Count + 1,
- juriFansAux(RestT, OtherFans, NCount).
- % P8 nextPhase(+N, -Participants)
- nextPhase(N, Participants) :-
- setof(Score-Id-Name, eligibleOutcome(Id, Name, Score), AllParticipants),
- selectBestN(N, AllParticipants, Participants).
- eligibleOutcome(Id,Perf,TT) :-
- performance(Id,Times),
- madeItThrough(Id),
- participant(Id,_,Perf),
- sumlist(Times,TT).
- selectBestN(0, _, []).
- selectBestN(N, L, [LastElem | Rest]) :-
- N1 is N - 1,
- append(L1, [LastElem], L),
- selectBestN(N1, L1, Rest).
- % P9 predX(+Idade, +L, -Ps)
- predX(Q,[R|Rs],[P|Ps]) :-
- participant(R,I,P), I=<Q, !,
- predX(Q,Rs,Ps).
- predX(Q,[R|Rs],Ps) :-
- participant(R,I,_), I>Q,
- predX(Q,Rs,Ps).
- predX(_,[],[]).
- % O predicado predX/3 recebe um inteiro, Idade, e uma lista, L, de Ids de
- % participantes, e unifica o terceiro argumento com as performances cujo
- % participante tem menos de Idade anos.
- % P10
- impoe(X,L) :-
- length(Mid,X),
- append(L1,[X|_],L), append(_,[X|Mid],L1).
- % O predicado impoe/2 avalia se é cumprida parte da condição enunciada, nomeadamente:
- % que L tem uma sub-lista de tamanho X cujo primeiro e último elemento é X.
- % P11 langford(+N, -L)
- langford(N, L) :-
- N > 0, N2 is N * 2,
- length(UninitializedList, N2),
- langfordAux(N, UninitializedList, L).
- langfordAux(0, L, L).
- langfordAux(N, UL, L) :-
- impoe(N, UL), N1 is N - 1,
- langfordAux(N1, UL, L).
Add Comment
Please, Sign In to add comment