EDIT: i made several changes (i would prefer to just spam the link to source code, but it doesn’t let me post the link :\ )
/* A lucky number is a 10-based number, which has at least a "6" or an "8" in its digits.
* However, if it has "6" and "8" at the same time, then the number is NOT lucky.
* For example, "16", "38", "666" are lucky numbers, while "234" , "687" are not.
* Now we want to know how many lucky numbers (without leading zeroes)
* are there between L and R, inclusive?
* L is LowerBound
* R is UpperBound
* P is the total occurence of lucky numbers
* between_to_list -> generates all the numbers between L and R included
* digits -> convert the number in digits
* check_number -> check if Cs (number converted in digits) contains 6 and
* not contain 8, or contains 8 and not contain 6, if these constraints
* are satisfied increment P by 1
* query tested -> generate_interval(6,16)
* I generate all numbers and then i move backward from R to L and i check every number,
* 16 is the first element checked, indeed P is incremented to 1, then the program check
* 15 and it fails, after the fail the program quit*/
between_to_list(X,X,0) :- !.
X =< Y,
Z is X+1,
P is P1+1;
P is P1+1.
now i’m able to work with N digits, and the counter should be implemented in the right way as well, the problem is that i don’t know how to keep program iterate after the 1st fail on the check. I assume that if this problem is solved then all should works properly.
If someone could give me a feedback would be really appreciate.