aboutsummaryrefslogtreecommitdiff
path: root/challenge-080/adam-russell/prolog/ch-2.p
blob: b0152bdc7f769d43294c3beb1f859038fbadcaf4 (plain)
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.