Re: Efficiently finding combinations
- From: Christophe Delord <no.spam>
- Date: Fri, 20 May 2005 07:04:14 +0200
Hello,
On Thu, 19 May 2005 22:00:33 +0200, Bart Demoen wrote:
> publiustemp-googlegroups@xxxxxxxxx wrote:
> How about
>
>
> one_hundred_bis(A,B,C,D,E) :-
> numbers(Numbers),
> member(A, Numbers),
> member(B, Numbers),
> A =< B, AB is A + B, AB < 100,
> member(C, Numbers),
> B =< C, ABC is AB + C, ABC < 100,
> member(D, Numbers),
> C =< D, ABCD is ABC + D, ABCD < 100,
> member(E, Numbers),
> D =< E,
> 100 is ABCD + E.
If the list is sorted the predicate can be faster (when a number is
choosen, we can forget previous numbers). For instance:
one_hundrer(A,B,C,D,E) :-
numbers(Numbers),
sort(Numbers, Sorted),
get_number(Sorted, A, Sorted_after_A),
A =< 100,
get_number(Sorted_after_A, B, Sorted_after_B),
AB is A+B, AB =< 100,
get_number(Sorted_after_B, C, Sorted_after_C),
ABC is AB+C, ABC =< 100,
get_number(Sorted_after_C, D, Sorted_after_D),
ABCD is ABC+D, ABCD =< 100,
E is 100 - ABCD,
get_number(Sorted_after_D, E, _).
get_number([X|T], X, [X|T]).
get_number([_|T], X, XT) :- get_number(T, X, XT).
.
- References:
- Efficiently finding combinations
- From: publiustemp-googlegroups
- Re: Efficiently finding combinations
- From: Bart Demoen
- Efficiently finding combinations
- Prev by Date: Re: Efficiently finding combinations
- Next by Date: Re: Efficiently finding combinations
- Previous by thread: Re: Efficiently finding combinations
- Next by thread: Re: Efficiently finding combinations
- Index(es):
Relevant Pages
|
|