1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
/*
* You are given rankings of N candidates.
* Write a script to find out the total candies needed for all candidates.
* You are asked to follow the rules below:
* a) You must given at least one candy to each candidate.
* b) Candidate with higher ranking get more candies than their immediate
* neighbors on either side.
*/
n([1, 2, 2]).
%n([1, 4, 3, 2]).
candies(N, Candies):-
length(N, CandiesAccum),
candies(N, CandiesAccum, Candies).
candies([], Candies, Candies).
candies([H0, H1|[]], CandiesAccum, Candies):-
H0 > H1,
C is CandiesAccum + 1,
candies([], C, Candies).
candies([_, _|[]], CandiesAccum, Candies):-
candies([], CandiesAccum, Candies).
candies([H0, H1|T], CandiesAccum, Candies):-
H0 > H1,
C is CandiesAccum + 1,
candies([H1|T], C, Candies).
candies([H0, H1|T], CandiesAccum, Candies):-
H1 > H0,
C is CandiesAccum + 1,
candies([H1|T], C, Candies).
main:-
n(N),
candies(N, C),
writeln(C),
halt.
|