From 95e2fe57f6e4639f6ae9f1fef368829d5090dbf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1=20Smodi=C5=A1?= Date: Tue, 18 Aug 2015 16:06:19 +0200 Subject: Exported all problems from the SQLite database into the new directory structure. --- .../license_plates/checklicenseplate_3/common.py | 52 ++++++++++++++++++++++ .../license_plates/checklicenseplate_3/en.py | 17 +++++++ 2 files changed, 69 insertions(+) create mode 100644 prolog/problems/license_plates/checklicenseplate_3/common.py create mode 100644 prolog/problems/license_plates/checklicenseplate_3/en.py (limited to 'prolog/problems/license_plates/checklicenseplate_3') 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. +''' diff --git a/prolog/problems/license_plates/checklicenseplate_3/en.py b/prolog/problems/license_plates/checklicenseplate_3/en.py new file mode 100644 index 0000000..1f3ea94 --- /dev/null +++ b/prolog/problems/license_plates/checklicenseplate_3/en.py @@ -0,0 +1,17 @@ +id = 148 +name = 'checkLicensePlate/3' +slug = 'check if the numbers in a license plate form an equation' + +description = '''\ +

checkLicensePlate(LP, E1, E2): the digits in the list LP can be combined into a valid equation E1 = E2. E1 and E2 are arithmetic expressions, obtained from sublists of Plate by inserting arithmetic operators (+, -, * and /) between elements. An additional unary minus can be inserted before the leftmost number of E1 and E2.

+
+  ?- checkLicensePlate([l,j,l,3,-,2,1,7], E1, E2).
+    E1 = 3,       E2 = 21/7 ;
+    E1 = -3,      E2 = -21/7 ;
+    E1 = 3*2,     E2 = -1+7 ;
+    E1 = -3*2,    E2 = 1-7 ;
+    E1 = 3*2+1,   E2 = 7 ;
+    E1 = -3*2-1,  E2 = -7.
+
''' + +hint = {} -- cgit v1.2.1