%[test_1000]?

:- set(h,10000)?
:- set(r,1000000)?
:- set(i,2)?
:- set(c,5)?
:- set(nodes,1000)?

:- modeh(*,play([+int,+int,+int]))?
:- modeh(*,play([+int,+int,+int,+int]))?
:- modeh(*,play([+int,+int,+int,+int,+int]))?
:- modeh(*,play([+int,+int,+int,+int,+int,+int]))?





:- modeb(1,and(+int,+int,-int))?
 :- modeb(1,or(+int,+int,-int))?
 :- modeb(1,xor(+int,+int,-int))?
% :- modeb(1,notE(+int,+int))?
%  :- modeb(1,equal(+int,#int))?
%  :- modeb(1,minus(+int,+int,-int))?
%  :- modeb(1,add(+int,+int,-int))?
%  :- modeb(1,mo(+int,#int,#int))?
%  :- modeb(1,cross(+int,+int,#int))?

numList([]).
numList([Num|List]):- numList(List).


mo(Num,Base,X) :- nat(Base),Num \= Base, X is Num mod Base.
add(X,Y,Z) :- Z is X+Y.
minus(X,Y,Z) :- Z is X-Y.
cross(X,Y,Z) :- Z is X*Y.
% di(Num,Base,X) :- nat(Base),X is round((Num-(Num mod Base))/Base).

%% bitwise boolean operators
and(X,Y,Z) :- Z is X /\ Y.
or(X,Y,Z) :- Z is X \/ Y.
xor(X,Y,Z) :- or(X,Y,Z1),and(X,Y,Z2),Z is Z1-Z2.
equal(X,Y) :- X ==Y.

