diff options
Diffstat (limited to 'prolog/problems/license_plates/checklicenseplate_3/common.py')
-rw-r--r-- | prolog/problems/license_plates/checklicenseplate_3/common.py | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/prolog/problems/license_plates/checklicenseplate_3/common.py b/prolog/problems/license_plates/checklicenseplate_3/common.py new file mode 100644 index 0000000..f926481 --- /dev/null +++ b/prolog/problems/license_plates/checklicenseplate_3/common.py @@ -0,0 +1,52 @@ +id = 148 +group = 'license_plates' +number = 55 +visible = True +facts = None + +solution = '''\ +conc148([], L, L). +conc148([H|T], L2, [H|L]) :- + conc148(T, L2, L). + +memb148(X, [X|_]). +memb148(X, [_|T]) :- + memb148(X, T). + +getdigits148([], []). +getdigits148([X|T], [X|NT]) :- + number(X), !, + getdigits148(T, NT). +getdigits148([_|T], NT) :- + getdigits148(T, NT). + +joindigits148([X], [X]). +joindigits148([X,Y|T], NT) :- + XY is 10*X + Y, + joindigits148([XY|T], NT). +joindigits148([X,Y|T], [X|NT]) :- + joindigits148([Y|T], NT). + +genexp148([Exp], Exp). +genexp148(L, Exp) :- + conc148(Before, [N1,N2|After], L), + memb148(Op, ['+','-','*','/']), + NExp =.. [Op, N1, N2], + conc148(Before, [NExp|After], L1), + genexp148(L1, Exp). + +firstMinus148(L, L). +firstMinus148([X|T], [Y|T]) :- + Y is -X. + +checkLicensePlate(LP, E1, E2) :- + getdigits148(LP, Digs), + conc148(L1, L2, Digs), + joindigits148(L1, N1), + joindigits148(L2, N2), + firstMinus148(N1, MN1), + firstMinus148(N2, MN2), + genexp148(MN1, E1), + genexp148(MN2, E2), + E1 =:= E2. +''' |