# Foundations of AI Logic Puzzles 1. Write a Prolog program, in a f...

## Transcribed Text

Foundations of AI Logic Puzzles 1. Write a Prolog program, in a file named crypta.pl, to solve the cryptarithmetic puzzle which says: Recall that in such a puzzle, each letter (S, E, N, D, T, H, M, O and Y) stands for a single digit in the range 0 to 9. No two letters can be bound to the same digit – that is, each letter stands for a different digit. When the digits are substituted for the letters, the arithmetic equation should be correct! The solution is a set of variables with values, like: E = …, O = …, S = etc. Your program, given the problem details, must print out the solution (any valid solution, though usually these puzzles have unique solutions). Optional: For fun, if you are done with the problem above, you can also try to solve the puzzle: The fun part is to see how easy it is to change the data for a different problem, and have it churn out the answer. In solving this problem, you will need to use an alldiff condition. For simplicity, since it includes the confusing “!” operator, that function is provided here: % Succeeds if all elements in the argument list are bound and all different. % Fails if any of the elements are unbound, or equal to some other element. alldiff([H | T]) :- member(H, T), !, fail. alldiff([_ | T]) :- alldiff(T). alldiff([_]). This problem is worth 4 points. 2. In this problem, you will develop a Prolog program named puzzle.pl to solve a specific logic puzzle. What’s a logic puzzle? “Logic puzzles come in all shapes and sizes, but the kind of puzzles we offer here are most commonly referred to as "logic grid" puzzles. In each puzzle you are given a series of categories, and an equal number of options within each category. Each option is used once and only once. Your goal is to figure out which options are linked together based on a series of given clues. Each 2 puzzle has only one unique solution, and each can be solved using simple logical processes (i.e. educated guesses are not required).” That’s the kind we’ll see here, though the problems are from another source. These problems are usually solved by hand with a grid, but you will solve it using Prolog. Here is the statement of the problem: Bill eats a snack every night, having a different fruit and different nuts each night. From the statements below, identify what Bill had for a snack for each weeknight last week. 1. The apple was eaten later in the week than the mango. 2. The banana was eaten later in the week than both the almonds and peanuts, but earlier in the week than the pear. 3. The cashews were eaten earlier in the week than both the banana and the apricot, but later in the week than the peanuts. 4. The pecans were not eaten the evening after the almonds. 5. Bill ate walnuts one night. Note that the problem is about 5 weeknights (Monday through Friday), and mentions 5 kinds of fruit and 5 kinds of nuts. Your program should solve the problem and print out the solution, which will be a set of 5 triples like (Monday, apple, pecans), … (Friday, mango, walnuts). Clearly, these are not the correct answers, but just values to show you what the solution will look like. Note: 1. You will again need to use the alldiff function, since all options are used only once. 2. How do you verify the solution? Examine it, and make sure all the constraints are satisfied. 3. You will need to use negation to express one or more constraints, for example condition 4 above. Negation is tricky in Prolog and needs some understanding. Normally, Prolog tries to prove things, and in the process bind values to unbound variables. Given an expression E with unbound variables, Prolog tries to find variable bindings that make E true. But if you use the negation operator \+ with an expression E that contains unbound variables, as usual, \+E will try to find variable bindings that make E true. If it succeeds, \+E will fail, and no new bindings are formed. If it fails, (i.e. it cannot find bindings to make E true), no new bindings are formed either. The thing to remember is that negation is useful to stop certain (unifications or) bindings from happening. You cannot use it to identify new bindings. This problem is worth 6 points.

## Solution Preview

These solutions may offer step-by-step problem-solving explanations or good writing examples that include modern styles of formatting and construction of bibliographies out of text citations and references. Students may use these solutions for personal skill-building and practice. Unethical use is strictly forbidden.

?- solution().
[9,6,3,8,7,2,1,0,4]
true .

S=9,E=6,N=3,D=8,T=7,H=2,M=1,O=0,Y=4

?- solutionOpt().
[7,3,4,1,6,8]
true

T=7,W=3,O=4,F=1,U=6,R=8

2. Answer to the problem 2

?- solution(S)
[tuesday, apple, cashew...

By purchasing this solution you'll be able to access the following files:
Solution.zip.

\$135.00
for this solution

PayPal, G Pay, ApplePay, Amazon Pay, and all major credit cards accepted.

### Find A Tutor

View available Computer Science - Other Tutors

Get College Homework Help.

Are you sure you don't want to upload any files?

Fast tutor response requires as much info as possible.