Skip to content

Commit

Permalink
sum-of-multiples: fix tests (#204)
Browse files Browse the repository at this point in the history
See #81
  • Loading branch information
ErikSchierboom authored Mar 31, 2023
1 parent 530f903 commit 80666bb
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 23 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
factored([Curr|Factors], Num) :-
0 is mod(Num, Curr), !;
factored(Factors, Num).
:- use_module(library(clpfd)).

sum_of_multiples(_, 0, 0) :- !.
sum_of_multiples(Factors, Limit, Sum) :-
Next is Limit - 1,
sum_of_multiples(Factors, Next, NextSum),
(
factored(Factors, Limit),
Sum is Limit + NextSum, !;
Sum is NextSum
).

findall(Multiple, multiple(Factors, Limit, Multiple), Multiples),
list_to_set(Multiples, UniqueMultiples),
sum_list(UniqueMultiples, Sum).

multiple(Factors, Limit, Multiple) :-
Upper #= Limit - 1,
between(0, Upper, Multiple),
member(Factor, Factors),
Multiple rem Factor #= 0.
33 changes: 22 additions & 11 deletions exercises/practice/sum-of-multiples/sum_of_multiples_tests.plt
Original file line number Diff line number Diff line change
Expand Up @@ -11,36 +11,47 @@ pending :-
Result == 0.

test(just_one_multiple, condition(pending)) :-
sum_of_multiples([3, 5], 4, 3).
sum_of_multiples([3, 5], 4, Result),
Result == 3.

test(a_few_multiples, condition(pending)) :-
sum_of_multiples([3, 5], 10, 23).
sum_of_multiples([3, 5], 10, Result),
Result == 23.

test(sum_more_multiples, condition(pending)) :-
sum_of_multiples([3, 5], 100, 2318).
sum_of_multiples([3, 5], 100, Result),
Result == 2318.

test(even_more_multiples, condition(pending)) :-
sum_of_multiples([3, 5], 1000, 233168).
sum_of_multiples([3, 5], 1000, Result),
Result == 233168.

test(new_factors, condition(pending)) :-
sum_of_multiples([7, 13, 17], 20, 51).
sum_of_multiples([7, 13, 17], 20, Result),
Result == 51.

test(sum_more_new_factors, condition(pending)) :-
sum_of_multiples([4, 6], 15, 30).
sum_of_multiples([4, 6], 15, Result),
Result == 30.

test(even_more_new_factors, condition(pending)) :-
sum_of_multiples([5, 6, 8], 150, 4419).
sum_of_multiples([5, 6, 8], 150, Result),
Result == 4419.

test(divisible_factor, condition(pending)) :-
sum_of_multiples([5, 25], 51, 275).
sum_of_multiples([5, 25], 51, Result),
Result == 275.

test(large_factors, condition(pending)) :-
sum_of_multiples([43, 47], 10000, 2203160).
sum_of_multiples([43, 47], 10000, Result),
Result == 2203160.

test(every_num, condition(pending)) :-
sum_of_multiples([1], 100, 4950).
sum_of_multiples([1], 100, Result),
Result == 4950.

test(no_factors, condition(pending)) :-
sum_of_multiples([], 10000, 0).
sum_of_multiples([], 10000, Result),
Result == 0.

:- end_tests(sum_of_multiples).

0 comments on commit 80666bb

Please sign in to comment.