home *** CD-ROM | disk | FTP | other *** search
/ Eagles Nest BBS 8 / Eagles_Nest_Mac_Collection_Disc_8.TOAST / Developer Environments / AAISProlog / Examples / crypt.p < prev    next >
MacBinary  |  1992-04-07  |  10.1 KB  |  [TEXT/AIFC]

open in: MacOS 8.1     |     Win98     |     DOS

browse contents    |     view JSON data     |     view as text


This file was processed as: MacBinary (archive/macBinary).

ConfidenceProgramDetectionMatch TypeSupport
66% dexvert ZX81 Sinclair BASIC (image/sinclairBASIC) ext Supported
10% dexvert MacBinary (archive/macBinary) fallback Supported
1% dexvert bsdiff patch (other/bsdiffPatch) ext Unsupported
1% dexvert imgdiff patch (other/imgdiffPatch) ext Unsupported
1% dexvert WSUS Patch Storage File (other/wsusPatchStorageFile) ext Unsupported
1% dexvert Text File (text/txt) fallback Supported
100% file MacBinary II, inited, Tue Apr 7 15:20:31 1992, modified Tue Apr 7 15:20:31 1992, creator 'AIFC', type ASCII, 9673 bytes "crypt.p" , at 0x2649 460 bytes resource default (weak)
99% file data default
74% TrID Macintosh plain text (MacBinary) default
25% TrID MacBinary 2 default (weak)
100% siegfried fmt/1762 MacBinary (II) default
100% lsar MacBinary default


id metadata
keyvalue
macFileType[TEXT]
macFileCreator[AIFC]



hex view
+--------+-------------------------+-------------------------+--------+--------+
|00000000| 00 07 63 72 79 70 74 2e | 70 00 00 00 00 00 00 00 |..crypt.|p.......|
|00000010| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000020| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000030| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000040| 00 54 45 58 54 41 49 46 | 43 01 00 00 00 00 00 00 |.TEXTAIF|C.......|
|00000050| 00 00 00 00 00 25 c9 00 | 00 01 cc a6 07 a6 7f a6 |.....%..|........|
|00000060| 07 a6 7f 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000070| 00 00 00 00 00 00 00 00 | 00 00 81 81 25 c1 00 00 |........|....%...|
|00000080| 2f 2a 0d 20 2a 20 63 72 | 79 70 74 2e 70 3a 20 20 |/*. * cr|ypt.p: |
|00000090| 41 20 70 72 6f 67 72 61 | 6d 20 74 6f 20 73 6f 6c |A progra|m to sol|
|000000a0| 76 65 20 63 72 79 70 74 | 61 72 69 74 68 6d 20 70 |ve crypt|arithm p|
|000000b0| 75 7a 7a 6c 65 73 2e 0d | 20 2a 0d 20 2a 20 43 6f |uzzles..| *. * Co|
|000000c0| 70 79 72 69 67 68 74 2c | 20 a9 20 31 39 38 36 20 |pyright,| . 1986 |
|000000d0| 2d 20 31 39 39 32 20 41 | 64 76 61 6e 63 65 64 20 |- 1992 A|dvanced |
|000000e0| 41 2e 20 49 2e 20 53 79 | 73 74 65 6d 73 2c 20 49 |A. I. Sy|stems, I|
|000000f0| 6e 63 2e 0d 20 2a 20 41 | 6c 6c 20 72 69 67 68 74 |nc.. * A|ll right|
|00000100| 73 20 72 65 73 65 72 76 | 65 64 2e 0d 20 2a 20 54 |s reserv|ed.. * T|
|00000110| 68 69 73 20 66 69 6c 65 | 20 6d 61 79 20 6e 6f 74 |his file| may not|
|00000120| 20 62 65 20 63 6f 70 69 | 65 64 20 6f 72 20 64 69 | be copi|ed or di|
|00000130| 73 74 72 69 62 75 74 65 | 64 20 77 69 74 68 6f 75 |stribute|d withou|
|00000140| 74 20 74 68 65 20 0d 20 | 2a 20 77 72 69 74 74 65 |t the . |* writte|
|00000150| 6e 20 70 65 72 6d 69 73 | 73 69 6f 6e 20 6f 66 20 |n permis|sion of |
|00000160| 41 64 76 61 6e 63 65 64 | 20 41 2e 20 49 2e 20 53 |Advanced| A. I. S|
|00000170| 79 73 74 65 6d 73 2c 20 | 49 6e 63 2e 0d 20 2a 0d |ystems, |Inc.. *.|
|00000180| 20 2a 20 54 68 69 73 20 | 70 72 6f 67 72 61 6d 20 | * This |program |
|00000190| 77 61 73 20 6f 72 69 67 | 69 6e 61 6c 6c 79 20 77 |was orig|inally w|
|000001a0| 72 69 74 74 65 6e 20 61 | 6e 64 20 63 6f 6e 74 72 |ritten a|nd contr|
|000001b0| 69 62 75 74 65 64 20 62 | 79 0d 20 2a 20 48 61 72 |ibuted b|y. * Har|
|000001c0| 72 79 20 42 61 72 72 6f | 77 2e 20 20 57 65 20 61 |ry Barro|w. We a|
|000001d0| 72 65 20 67 72 61 74 65 | 66 75 6c 20 74 6f 20 68 |re grate|ful to h|
|000001e0| 69 6d 20 66 6f 72 20 69 | 74 2e 0d 20 2a 0d 20 2a |im for i|t.. *. *|
|000001f0| 20 54 68 69 73 20 70 72 | 6f 67 72 61 6d 20 77 72 | This pr|ogram wr|
|00000200| 69 74 65 73 20 61 20 70 | 72 6f 67 72 61 6d 20 61 |ites a p|rogram a|
|00000210| 6e 64 20 74 68 65 6e 20 | 72 75 6e 73 20 69 74 2e |nd then |runs it.|
|00000220| 0d 0d 09 20 20 44 4f 4e | 41 4c 44 09 20 20 53 45 |... DON|ALD. SE|
|00000230| 4e 44 09 09 20 20 57 52 | 4f 4e 47 0d 09 2b 20 47 |ND.. WR|ONG..+ G|
|00000240| 45 52 41 4c 44 09 2b 20 | 4d 4f 52 45 09 09 2b 20 |ERALD.+ |MORE..+ |
|00000250| 57 52 4f 4e 47 0d 09 20 | 20 2d 2d 2d 2d 2d 2d 09 |WRONG.. | ------.|
|00000260| 20 2d 2d 2d 2d 2d 09 09 | 20 20 2d 2d 2d 2d 2d 0d | -----..| -----.|
|00000270| 09 20 20 52 4f 42 45 52 | 54 09 20 4d 4f 4e 45 59 |. ROBER|T. MONEY|
|00000280| 09 09 20 20 52 49 47 48 | 54 0d 0d 0d 09 54 6f 20 |.. RIGH|T....To |
|00000290| 73 6f 6c 76 65 20 6f 6e | 65 20 6f 66 20 74 68 65 |solve on|e of the|
|000002a0| 20 61 62 6f 76 65 20 70 | 75 7a 7a 6c 65 73 2c 20 | above p|uzzles, |
|000002b0| 74 79 70 65 3a 0d 09 0d | 09 09 73 6f 6c 76 65 28 |type:...|..solve(|
|000002c0| 20 64 6f 6e 61 6c 64 2b | 67 65 72 61 6c 64 3d 72 | donald+|gerald=r|
|000002d0| 6f 62 65 72 74 20 29 2e | 0d 09 6f 72 09 73 6f 6c |obert ).|..or.sol|
|000002e0| 76 65 28 20 73 65 6e 64 | 20 2b 20 6d 6f 72 65 20 |ve( send| + more |
|000002f0| 3d 20 6d 6f 6e 65 79 20 | 29 2e 0d 09 6f 72 09 73 |= money |)...or.s|
|00000300| 6f 6c 76 65 28 20 77 72 | 6f 6e 67 2b 77 72 6f 6e |olve( wr|ong+wron|
|00000310| 67 20 3d 20 72 69 67 68 | 74 29 2e 0d 0d 09 54 68 |g = righ|t)....Th|
|00000320| 65 20 70 72 6f 67 72 61 | 6d 20 77 69 6c 6c 20 61 |e progra|m will a|
|00000330| 63 63 65 70 74 20 6e 75 | 6d 62 65 72 73 20 61 6e |ccept nu|mbers an|
|00000340| 64 20 6d 75 6c 74 69 70 | 6c 65 20 61 64 64 69 74 |d multip|le addit|
|00000350| 69 6f 6e 73 20 6f 72 0d | 09 73 75 62 74 72 61 63 |ions or.|.subtrac|
|00000360| 74 69 6f 6e 73 20 6f 6e | 20 65 69 74 68 65 72 20 |tions on| either |
|00000370| 73 69 64 65 20 6f 66 20 | 74 68 65 20 65 71 75 61 |side of |the equa|
|00000380| 74 69 6f 6e 2e 0d 09 0d | 09 45 2e 67 2e 09 73 6f |tion....|.E.g..so|
|00000390| 6c 76 65 28 20 61 62 63 | 20 2b 20 31 32 33 20 3d |lve( abc| + 123 =|
|000003a0| 20 63 62 61 20 2d 20 64 | 39 39 20 2d 20 35 20 29 | cba - d|99 - 5 )|
|000003b0| 2e 0d 0d 09 54 68 65 20 | 62 65 73 74 20 77 61 79 |....The |best way|
|000003c0| 20 74 6f 20 75 6e 64 65 | 72 73 74 61 6e 64 20 74 | to unde|rstand t|
|000003d0| 68 69 73 20 70 72 6f 67 | 72 61 6d 20 69 73 20 74 |his prog|ram is t|
|000003e0| 6f 20 72 75 6e 20 69 74 | 20 6f 6e 20 61 20 70 72 |o run it| on a pr|
|000003f0| 6f 62 6c 65 6d 2c 0d 09 | 41 6e 64 20 74 68 65 6e |oblem,..|And then|
|00000400| 20 65 78 61 6d 69 6e 65 | 20 74 68 65 20 72 75 6c | examine| the rul|
|00000410| 65 20 77 68 69 63 68 20 | 69 74 20 63 72 65 61 74 |e which |it creat|
|00000420| 65 64 2e 0d 09 54 6f 20 | 65 78 61 6d 69 6e 65 20 |ed...To |examine |
|00000430| 74 68 65 20 72 75 6c 65 | 20 63 72 65 61 74 65 64 |the rule| created|
|00000440| 2c 20 6c 69 73 74 20 61 | 6c 6c 20 72 75 6c 65 73 |, list a|ll rules|
|00000450| 20 66 6f 72 20 73 6f 6c | 76 65 5f 63 6f 64 65 2e | for sol|ve_code.|
|00000460| 0d 09 0d 09 3f 2d 20 6c | 69 73 74 69 6e 67 28 73 |....?- l|isting(s|
|00000470| 6f 6c 76 65 5f 63 6f 64 | 65 29 2e 0d 09 0d 09 42 |olve_cod|e).....B|
|00000480| 61 73 69 63 61 6c 6c 79 | 20 74 68 65 20 63 6f 64 |asically| the cod|
|00000490| 65 20 63 72 65 61 74 65 | 64 20 63 68 6f 69 63 65 |e create|d choice|
|000004a0| 73 20 61 20 76 61 6c 75 | 65 20 66 6f 72 20 65 61 |s a valu|e for ea|
|000004b0| 63 68 20 76 61 72 69 61 | 62 6c 65 2c 0d 09 61 6e |ch varia|ble,..an|
|000004c0| 64 20 74 68 65 6e 20 70 | 72 6f 63 65 65 64 73 20 |d then p|roceeds |
|000004d0| 74 6f 20 74 65 73 74 20 | 69 74 20 61 67 61 69 6e |to test |it again|
|000004e0| 73 74 20 74 68 65 20 65 | 71 75 61 74 69 6f 6e 2e |st the e|quation.|
|000004f0| 20 20 49 66 20 74 68 65 | 20 65 71 75 61 74 69 6f | If the| equatio|
|00000500| 6e 0d 09 66 61 69 6c 73 | 2c 20 74 68 65 20 63 68 |n..fails|, the ch|
|00000510| 6f 69 63 65 20 69 73 20 | 63 68 61 6e 67 65 64 20 |oice is |changed |
|00000520| 62 79 20 62 61 63 6b 74 | 72 61 63 6b 69 6e 67 20 |by backt|racking |
|00000530| 61 6e 64 20 74 72 79 69 | 6e 67 20 61 6e 6f 74 68 |and tryi|ng anoth|
|00000540| 65 72 20 63 68 6f 69 63 | 65 2e 0d 2a 2f 0d 0d 3a |er choic|e..*/..:|
|00000550| 2d 20 6f 70 28 31 30 30 | 2c 78 66 78 2c 23 29 2e |- op(100|,xfx,#).|
|00000560| 0d 0d 2f 2a 0d 20 2a 20 | 42 61 73 69 63 20 74 6f |../*. * |Basic to|
|00000570| 70 20 6c 65 76 65 6c 20 | 73 6f 6c 76 65 20 72 6f |p level |solve ro|
|00000580| 75 74 69 6e 65 2e 0d 20 | 2a 2f 0d 73 6f 6c 76 65 |utine.. |*/.solve|
|00000590| 28 50 72 6f 62 6c 65 6d | 29 20 3a 2d 20 73 6f 6c |(Problem|) :- sol|
|000005a0| 76 65 28 50 72 6f 62 6c | 65 6d 2c 5b 5d 29 2e 0d |ve(Probl|em,[])..|
|000005b0| 0d 2f 2a 0d 20 2a 20 54 | 68 69 73 20 73 6f 6c 76 |./*. * T|his solv|
|000005c0| 65 20 74 61 6b 65 73 20 | 61 20 73 65 63 6f 6e 64 |e takes |a second|
|000005d0| 20 61 72 67 75 6d 65 6e | 74 20 77 68 69 63 68 20 | argumen|t which |
|000005e0| 74 61 6b 65 73 20 61 20 | 70 6f 73 73 69 62 6c 65 |takes a |possible|
|000005f0| 20 63 6f 6e 73 74 72 61 | 69 6e 74 2e 0d 20 2a 09 | constra|int.. *.|
|00000600| 43 75 72 72 65 6e 74 6c | 79 20 63 6f 6e 73 74 72 |Currentl|y constr|
|00000610| 61 69 6e 74 20 6d 61 79 | 20 62 65 20 6e 6f 6e 7a |aint may| be nonz|
|00000620| 65 72 6f 2c 20 77 68 69 | 63 68 20 6d 65 61 6e 73 |ero, whi|ch means|
|00000630| 20 74 68 61 74 20 6e 6f | 20 64 69 67 69 74 20 69 | that no| digit i|
|00000640| 6e 20 74 68 65 0d 20 2a | 09 70 72 6f 62 6c 65 6d |n the. *|.problem|
|00000650| 20 63 61 6e 20 65 71 75 | 61 6c 20 30 2e 0d 20 2a | can equ|al 0.. *|
|00000660| 0d 20 2a 20 54 68 65 20 | 70 72 6f 62 6c 65 6d 20 |. * The |problem |
|00000670| 69 73 20 73 6f 6c 76 65 | 64 20 62 79 20 73 65 74 |is solve|d by set|
|00000680| 74 69 6e 67 20 61 20 72 | 75 6c 65 20 74 6f 20 73 |ting a r|ule to s|
|00000690| 6f 6c 76 65 20 74 68 65 | 20 70 72 6f 62 6c 65 6d |olve the| problem|
|000006a0| 2c 0d 20 2a 09 61 6e 64 | 20 74 68 65 6e 20 69 6e |,. *.and| then in|
|000006b0| 76 6f 6b 69 6e 67 20 74 | 68 69 73 20 72 75 6c 65 |voking t|his rule|
|000006c0| 2e 20 54 68 65 20 72 75 | 6c 65 20 63 72 65 61 74 |. The ru|le creat|
|000006d0| 65 64 20 69 73 20 74 6f | 20 73 6f 6c 76 65 20 74 |ed is to| solve t|
|000006e0| 68 65 20 67 6f 61 6c 3a | 0d 20 2a 09 73 6f 6c 76 |he goal:|. *.solv|
|000006f0| 65 5f 63 6f 64 65 2f 31 | 2e 0d 20 2a 2f 0d 73 6f |e_code/1|.. */.so|
|00000700| 6c 76 65 28 50 72 6f 62 | 6c 65 6d 2c 43 6f 6e 73 |lve(Prob|lem,Cons|
|00000710| 74 72 61 69 6e 74 29 20 | 3a 2d 0d 09 6e 6c 2c 77 |traint) |:-..nl,w|
|00000720| 72 69 74 65 28 27 53 65 | 74 74 69 6e 67 20 75 70 |rite('Se|tting up|
|00000730| 20 74 68 65 20 70 72 6f | 62 6c 65 6d 2e 2e 2e 27 | the pro|blem...'|
|00000740| 29 2c 6e 6c 2c 0d 09 73 | 65 74 75 70 28 50 72 6f |),nl,..s|etup(Pro|
|00000750| 62 6c 65 6d 2c 56 61 72 | 69 61 62 6c 65 73 2c 45 |blem,Var|iables,E|
|00000760| 78 70 61 6e 73 69 6f 6e | 2c 4e 43 6f 6c 73 29 2c |xpansion|,NCols),|
|00000770| 0d 09 70 6f 73 73 5f 76 | 61 6c 75 65 73 28 56 61 |..poss_v|alues(Va|
|00000780| 6c 75 65 73 2c 43 6f 6e | 73 74 72 61 69 6e 74 29 |lues,Con|straint)|
|00000790| 2c 0d 09 77 72 69 74 65 | 28 27 53 65 61 72 63 68 |,..write|('Search|
|000007a0| 69 6e 67 20 66 6f 72 20 | 73 6f 6c 75 74 69 6f 6e |ing for |solution|
|000007b0| 73 2e 2e 2e 27 29 2c 6e | 6c 2c 0d 09 73 6f 6c 76 |s...'),n|l,..solv|
|000007c0| 65 5f 63 6f 64 65 28 56 | 61 6c 75 65 73 29 2c 0d |e_code(V|alues),.|
|000007d0| 09 70 72 69 6e 74 5f 61 | 6e 73 77 65 72 28 56 61 |.print_a|nswer(Va|
|000007e0| 72 69 61 62 6c 65 73 2c | 56 61 6c 75 65 73 2c 45 |riables,|Values,E|
|000007f0| 78 70 61 6e 73 69 6f 6e | 2c 4e 43 6f 6c 73 29 2e |xpansion|,NCols).|
|00000800| 0d 0d 2f 2a 0d 20 2a 20 | 54 68 65 73 65 20 72 75 |../*. * |These ru|
|00000810| 6c 65 73 20 77 69 6c 6c | 20 73 6f 6c 76 65 20 66 |les will| solve f|
|00000820| 6f 72 20 61 6c 6c 20 61 | 6e 73 77 65 72 73 2e 0d |or all a|nswers..|
|00000830| 20 2a 09 62 79 20 62 61 | 63 6b 74 72 61 63 6b 69 | *.by ba|cktracki|
|00000840| 6e 67 2e 0d 20 2a 2f 0d | 73 6f 6c 76 65 5f 61 6c |ng.. */.|solve_al|
|00000850| 6c 28 50 72 6f 62 6c 65 | 6d 29 20 3a 2d 20 73 6f |l(Proble|m) :- so|
|00000860| 6c 76 65 5f 61 6c 6c 28 | 50 72 6f 62 6c 65 6d 2c |lve_all(|Problem,|
|00000870| 5b 5d 29 2e 0d 0d 73 6f | 6c 76 65 5f 61 6c 6c 28 |[])...so|lve_all(|
|00000880| 50 72 6f 62 6c 65 6d 2c | 43 6f 6e 73 74 72 61 69 |Problem,|Constrai|
|00000890| 6e 74 29 20 3a 2d 20 73 | 6f 6c 76 65 28 50 72 6f |nt) :- s|olve(Pro|
|000008a0| 62 6c 65 6d 2c 43 6f 6e | 73 74 72 61 69 6e 74 29 |blem,Con|straint)|
|000008b0| 2c 20 66 61 69 6c 2e 0d | 73 6f 6c 76 65 5f 61 6c |, fail..|solve_al|
|000008c0| 6c 28 5f 50 72 6f 62 6c | 65 6d 2c 5f 43 6f 6e 73 |l(_Probl|em,_Cons|
|000008d0| 74 72 61 69 6e 74 29 2e | 0d 0d 2f 2a 0d 20 2a 20 |traint).|../*. * |
|000008e0| 4e 6f 77 20 77 65 20 73 | 65 74 20 75 70 20 74 68 |Now we s|et up th|
|000008f0| 65 20 70 72 6f 62 6c 65 | 6d 20 28 63 72 65 61 74 |e proble|m (creat|
|00000900| 65 20 74 68 65 20 72 75 | 6c 65 20 74 6f 20 73 6f |e the ru|le to so|
|00000910| 6c 76 65 20 69 74 29 2e | 0d 20 2a 2f 0d 73 65 74 |lve it).|. */.set|
|00000920| 75 70 28 50 72 6f 62 6c | 65 6d 2c 56 61 72 69 61 |up(Probl|em,Varia|
|00000930| 62 6c 65 73 2c 45 78 70 | 61 6e 73 69 6f 6e 2c 4e |bles,Exp|ansion,N|
|00000940| 43 6f 6c 73 29 20 3a 2d | 0d 09 65 78 70 61 6e 64 |Cols) :-|..expand|
|00000950| 5f 65 78 70 72 28 50 72 | 6f 62 6c 65 6d 2c 56 61 |_expr(Pr|oblem,Va|
|00000960| 72 69 61 62 6c 65 73 2c | 45 78 70 61 6e 73 69 6f |riables,|Expansio|
|00000970| 6e 29 2c 0d 09 63 6f 6c | 75 6d 6e 73 28 45 78 70 |n),..col|umns(Exp|
|00000980| 61 6e 73 69 6f 6e 2c 4e | 43 6f 6c 73 2c 43 6f 6c |ansion,N|Cols,Col|
|00000990| 75 6d 6e 73 29 2c 0d 09 | 63 6f 64 65 5f 63 6f 6c |umns),..|code_col|
|000009a0| 75 6d 6e 73 28 43 6f 6c | 75 6d 6e 73 2c 5b 5d 2c |umns(Col|umns,[],|
|000009b0| 30 2c 50 6f 73 73 2c 43 | 6f 64 65 29 2c 0d 09 61 |0,Poss,C|ode),..a|
|000009c0| 62 6f 6c 69 73 68 28 73 | 6f 6c 76 65 5f 63 6f 64 |bolish(s|olve_cod|
|000009d0| 65 2c 31 29 2c 0d 09 61 | 73 73 65 72 74 28 28 73 |e,1),..a|ssert((s|
|000009e0| 6f 6c 76 65 5f 63 6f 64 | 65 28 50 6f 73 73 29 20 |olve_cod|e(Poss) |
|000009f0| 3a 2d 20 2e 2e 2e 20 43 | 6f 64 65 29 29 2c 0d 09 |:- ... C|ode)),..|
|00000a00| 21 2e 0d 0d 2f 2a 0d 20 | 2a 20 57 65 20 68 61 76 |!.../*. |* We hav|
|00000a10| 65 20 61 6e 20 61 73 73 | 6f 63 20 6c 69 73 74 20 |e an ass|oc list |
|00000a20| 75 73 65 64 20 66 6f 72 | 20 70 6f 73 73 69 62 6c |used for| possibl|
|00000a30| 65 20 76 61 6c 75 65 73 | 2e 0d 20 2a 09 45 69 74 |e values|.. *.Eit|
|00000a40| 68 65 72 20 61 20 76 61 | 6c 75 65 20 63 61 6e 20 |her a va|lue can |
|00000a50| 62 65 20 7a 65 72 6f 20 | 6f 72 20 6e 6f 74 2e 0d |be zero |or not..|
|00000a60| 20 2a 09 45 61 63 68 20 | 65 6c 65 6d 65 6e 74 20 | *.Each |element |
|00000a70| 69 6e 20 74 68 65 20 61 | 73 73 6f 63 20 6c 69 73 |in the a|ssoc lis|
|00000a80| 74 20 69 73 20 61 20 70 | 61 69 72 2c 20 20 54 68 |t is a p|air, Th|
|00000a90| 65 20 6c 65 66 74 20 73 | 69 64 65 20 6f 66 20 23 |e left s|ide of #|
|00000aa0| 20 69 73 0d 20 2a 09 74 | 68 65 20 6c 65 74 74 65 | is. *.t|he lette|
|00000ab0| 72 2c 20 61 6e 64 20 74 | 68 65 20 72 69 67 68 74 |r, and t|he right|
|00000ac0| 20 73 69 64 65 20 69 73 | 20 69 74 73 20 76 61 6c | side is| its val|
|00000ad0| 75 65 2e 20 20 57 65 20 | 73 74 61 72 74 20 77 69 |ue. We |start wi|
|00000ae0| 74 68 20 61 6c 6c 0d 20 | 2a 09 6c 65 74 74 65 72 |th all. |*.letter|
|00000af0| 73 20 75 6e 62 6f 75 6e | 64 2e 0d 20 2a 09 42 61 |s unboun|d.. *.Ba|
|00000b00| 63 6b 74 72 61 63 6b 69 | 6e 67 20 77 69 6c 6c 20 |cktracki|ng will |
|00000b10| 72 65 70 65 61 74 65 64 | 6c 79 20 74 72 79 20 64 |repeated|ly try d|
|00000b20| 69 66 66 65 72 65 6e 74 | 20 76 61 6c 75 65 20 66 |ifferent| value f|
|00000b30| 6f 72 20 65 61 63 68 20 | 6c 65 74 74 65 72 2e 0d |or each |letter..|
|00000b40| 20 2a 2f 0d 70 6f 73 73 | 5f 76 61 6c 75 65 73 28 | */.poss|_values(|
|00000b50| 56 61 6c 75 65 73 2c 6e | 6f 6e 7a 65 72 6f 29 20 |Values,n|onzero) |
|00000b60| 3a 2d 20 21 2c 0d 09 56 | 61 6c 75 65 73 20 3d 20 |:- !,..V|alues = |
|00000b70| 5b 5f 23 31 2c 20 5f 23 | 32 2c 20 5f 23 33 2c 20 |[_#1, _#|2, _#3, |
|00000b80| 5f 23 34 2c 0d 09 09 09 | 5f 23 35 2c 20 5f 23 36 |_#4,....|_#5, _#6|
|00000b90| 2c 20 5f 23 37 2c 20 5f | 23 38 2c 20 5f 23 39 5d |, _#7, _|#8, _#9]|
|00000ba0| 2e 0d 70 6f 73 73 5f 76 | 61 6c 75 65 73 28 56 61 |..poss_v|alues(Va|
|00000bb0| 6c 75 65 73 2c 5f 43 6f | 6e 73 74 72 61 69 6e 74 |lues,_Co|nstraint|
|00000bc0| 29 20 3a 2d 0d 09 56 61 | 6c 75 65 73 20 3d 20 5b |) :-..Va|lues = [|
|00000bd0| 5f 23 30 2c 20 5f 23 31 | 2c 20 5f 23 32 2c 20 5f |_#0, _#1|, _#2, _|
|00000be0| 23 33 2c 20 5f 23 34 2c | 0d 09 09 09 5f 23 35 2c |#3, _#4,|...._#5,|
|00000bf0| 20 5f 23 36 2c 20 5f 23 | 37 2c 20 5f 23 38 2c 20 | _#6, _#|7, _#8, |
|00000c00| 5f 23 39 5d 2e 0d 0d 2f | 2a 0d 20 2a 20 46 69 72 |_#9].../|*. * Fir|
|00000c10| 73 74 20 65 78 70 61 6e | 64 20 73 79 6d 62 6f 6c |st expan|d symbol|
|00000c20| 73 20 61 6e 64 20 6e 75 | 6d 62 65 72 73 20 69 6e |s and nu|mbers in|
|00000c30| 20 65 78 70 72 65 73 73 | 69 6f 6e 20 69 6e 74 6f | express|ion into|
|00000c40| 20 63 6f 6e 73 74 69 74 | 75 65 6e 74 73 0d 20 2a | constit|uents. *|
|00000c50| 20 28 72 65 70 72 65 73 | 65 6e 74 65 64 20 61 73 | (repres|ented as|
|00000c60| 20 6c 69 73 74 73 29 2e | 0d 20 2a 0d 20 2a 20 57 | lists).|. *. * W|
|00000c70| 65 20 73 68 61 6c 6c 20 | 63 6f 6e 76 65 72 74 20 |e shall |convert |
|00000c80| 74 68 65 20 65 71 75 61 | 74 69 6f 6e 20 69 6e 74 |the equa|tion int|
|00000c90| 6f 20 65 71 75 61 74 69 | 6f 6e 73 20 77 69 74 68 |o equati|ons with|
|00000ca0| 20 74 68 65 20 73 69 6e | 67 6c 65 20 64 69 67 69 | the sin|gle digi|
|00000cb0| 74 73 0d 20 2a 09 69 6e | 20 6c 69 73 74 73 2e 20 |ts. *.in| lists. |
|00000cc0| 20 28 54 68 65 20 66 69 | 72 73 74 20 65 6c 65 6d | (The fi|rst elem|
|00000cd0| 65 6e 74 20 69 6e 20 74 | 68 65 20 6c 69 73 74 20 |ent in t|he list |
|00000ce0| 69 73 20 74 68 65 20 6c | 6f 77 65 73 74 20 6f 72 |is the l|owest or|
|00000cf0| 64 65 72 2c 0d 20 2a 09 | 09 6f 6e 65 73 2c 20 74 |der,. *.|.ones, t|
|00000d00| 65 6e 73 2c 20 68 75 6e | 64 72 65 64 73 2c 20 2e |ens, hun|dreds, .|
|00000d10| 2e 2e 29 2e 0d 20 2a 0d | 20 2a 20 56 61 72 69 61 |..).. *.| * Varia|
|00000d20| 62 6c 65 73 20 62 65 63 | 6f 6d 65 73 20 62 6f 75 |bles bec|omes bou|
|00000d30| 6e 64 20 74 6f 20 61 6e | 20 61 73 73 6f 63 20 6c |nd to an| assoc l|
|00000d40| 69 73 74 2e 20 20 45 61 | 63 68 20 70 61 69 72 20 |ist. Ea|ch pair |
|00000d50| 69 6e 20 74 68 65 20 6c | 69 73 74 0d 20 2a 09 69 |in the l|ist. *.i|
|00000d60| 73 20 74 68 65 20 73 61 | 6d 65 20 61 73 20 64 65 |s the sa|me as de|
|00000d70| 73 63 72 69 62 65 64 20 | 65 61 72 6c 69 65 72 3a |scribed |earlier:|
|00000d80| 20 4c 65 74 74 65 72 23 | 76 61 6c 75 65 2e 0d 20 | Letter#|value.. |
|00000d90| 2a 09 4e 6f 74 65 2c 20 | 74 68 65 20 6c 65 74 74 |*.Note, |the lett|
|00000da0| 65 72 73 20 61 72 65 20 | 62 6f 75 6e 64 20 68 65 |ers are |bound he|
|00000db0| 72 65 2c 20 61 6e 64 20 | 74 68 65 20 76 61 6c 75 |re, and |the valu|
|00000dc0| 65 73 20 61 72 65 20 6c | 65 66 74 20 75 6e 62 6f |es are l|eft unbo|
|00000dd0| 75 6e 64 2e 0d 20 2a 2f | 0d 65 78 70 61 6e 64 5f |und.. */|.expand_|
|00000de0| 65 78 70 72 28 41 2b 42 | 2c 56 61 72 69 61 62 6c |expr(A+B|,Variabl|
|00000df0| 65 73 2c 45 41 2b 45 42 | 29 20 3a 2d 20 21 2c 0d |es,EA+EB|) :- !,.|
|00000e00| 09 65 78 70 61 6e 64 5f | 65 78 70 72 28 41 2c 56 |.expand_|expr(A,V|
|00000e10| 61 72 69 61 62 6c 65 73 | 2c 45 41 29 2c 0d 09 65 |ariables|,EA),..e|
|00000e20| 78 70 61 6e 64 5f 65 78 | 70 72 28 42 2c 56 61 72 |xpand_ex|pr(B,Var|
|00000e30| 69 61 62 6c 65 73 2c 45 | 42 29 2e 0d 65 78 70 61 |iables,E|B)..expa|
|00000e40| 6e 64 5f 65 78 70 72 28 | 41 2d 42 2c 56 61 72 69 |nd_expr(|A-B,Vari|
|00000e50| 61 62 6c 65 73 2c 45 41 | 2d 45 42 29 20 3a 2d 20 |ables,EA|-EB) :- |
|00000e60| 21 2c 0d 09 65 78 70 61 | 6e 64 5f 65 78 70 72 28 |!,..expa|nd_expr(|
|00000e70| 41 2c 56 61 72 69 61 62 | 6c 65 73 2c 45 41 29 2c |A,Variab|les,EA),|
|00000e80| 0d 09 65 78 70 61 6e 64 | 5f 65 78 70 72 28 42 2c |..expand|_expr(B,|
|00000e90| 56 61 72 69 61 62 6c 65 | 73 2c 45 42 29 2e 0d 65 |Variable|s,EB)..e|
|00000ea0| 78 70 61 6e 64 5f 65 78 | 70 72 28 41 3d 42 2c 56 |xpand_ex|pr(A=B,V|
|00000eb0| 61 72 69 61 62 6c 65 73 | 2c 45 41 3d 45 42 29 20 |ariables|,EA=EB) |
|00000ec0| 3a 2d 20 21 2c 0d 09 65 | 78 70 61 6e 64 5f 65 78 |:- !,..e|xpand_ex|
|00000ed0| 70 72 28 41 2c 56 61 72 | 69 61 62 6c 65 73 2c 45 |pr(A,Var|iables,E|
|00000ee0| 41 29 2c 0d 09 65 78 70 | 61 6e 64 5f 65 78 70 72 |A),..exp|and_expr|
|00000ef0| 28 42 2c 56 61 72 69 61 | 62 6c 65 73 2c 45 42 29 |(B,Varia|bles,EB)|
|00000f00| 2e 0d 65 78 70 61 6e 64 | 5f 65 78 70 72 28 41 74 |..expand|_expr(At|
|00000f10| 6f 6d 2c 56 61 72 69 61 | 62 6c 65 73 2c 45 78 70 |om,Varia|bles,Exp|
|00000f20| 61 6e 73 69 6f 6e 29 20 | 3a 2d 0d 09 61 74 6f 6d |ansion) |:-..atom|
|00000f30| 69 63 28 41 74 6f 6d 29 | 2c 20 21 2c 0d 09 65 78 |ic(Atom)|, !,..ex|
|00000f40| 70 61 6e 64 5f 61 74 6f | 6d 28 41 74 6f 6d 2c 56 |pand_ato|m(Atom,V|
|00000f50| 61 72 69 61 62 6c 65 73 | 2c 45 78 70 61 6e 73 69 |ariables|,Expansi|
|00000f60| 6f 6e 29 2e 0d 0d 2f 2a | 0d 20 2a 20 54 61 6b 65 |on).../*|. * Take|
|00000f70| 20 61 6e 20 61 74 6f 6d | 20 61 6e 64 20 63 6f 6e | an atom| and con|
|00000f80| 76 65 72 74 20 69 74 20 | 69 6e 74 6f 20 61 20 6c |vert it |into a l|
|00000f90| 69 73 74 20 6f 66 20 73 | 69 6e 67 6c 65 20 6c 65 |ist of s|ingle le|
|00000fa0| 74 74 65 72 73 2c 20 77 | 69 74 68 20 74 68 65 20 |tters, w|ith the |
|00000fb0| 6f 6e 65 73 0d 20 2a 09 | 64 69 67 69 74 20 66 69 |ones. *.|digit fi|
|00000fc0| 72 73 74 2c 20 74 68 65 | 20 74 65 6e 73 20 6e 65 |rst, the| tens ne|
|00000fd0| 78 74 2c 20 65 74 63 2e | 0d 20 2a 0d 20 2a 09 65 |xt, etc.|. *. *.e|
|00000fe0| 78 70 61 6e 64 5f 61 74 | 6f 6d 28 61 62 63 2c 5b |xpand_at|om(abc,[|
|00000ff0| 61 23 5f 31 2c 62 23 5f | 32 2c 63 23 5f 33 7c 5f |a#_1,b#_|2,c#_3|_|
|00001000| 34 5d 2c 5b 63 23 5f 33 | 2c 62 23 5f 32 2c 61 23 |4],[c#_3|,b#_2,a#|
|00001010| 5f 31 5d 29 2e 0d 20 2a | 2f 0d 65 78 70 61 6e 64 |_1]).. *|/.expand|
|00001020| 5f 61 74 6f 6d 28 41 74 | 6f 6d 2c 56 61 72 69 61 |_atom(At|om,Varia|
|00001030| 62 6c 65 73 2c 45 78 70 | 61 6e 73 69 6f 6e 29 20 |bles,Exp|ansion) |
|00001040| 3a 2d 0d 09 6e 61 6d 65 | 28 41 74 6f 6d 2c 43 68 |:-..name|(Atom,Ch|
|00001050| 61 72 73 29 2c 0d 09 63 | 68 61 72 73 5f 74 6f 5f |ars),..c|hars_to_|
|00001060| 61 74 6f 6d 73 28 43 68 | 61 72 73 2c 41 74 6f 6d |atoms(Ch|ars,Atom|
|00001070| 73 29 2c 0d 09 65 78 70 | 61 6e 64 5f 6c 65 74 74 |s),..exp|and_lett|
|00001080| 65 72 73 28 41 74 6f 6d | 73 2c 56 61 72 69 61 62 |ers(Atom|s,Variab|
|00001090| 6c 65 73 2c 45 78 70 61 | 6e 73 69 6f 6e 31 29 2c |les,Expa|nsion1),|
|000010a0| 0d 09 72 65 76 65 72 73 | 65 28 45 78 70 61 6e 73 |..revers|e(Expans|
|000010b0| 69 6f 6e 31 2c 45 78 70 | 61 6e 73 69 6f 6e 29 2e |ion1,Exp|ansion).|
|000010c0| 0d 0d 2f 2a 0d 20 2a 20 | 43 6f 6e 76 65 72 74 20 |../*. * |Convert |
|000010d0| 61 20 6c 69 73 74 20 6f | 66 20 63 68 61 72 61 63 |a list o|f charac|
|000010e0| 74 65 72 73 20 69 6e 74 | 6f 20 61 20 6c 69 73 74 |ters int|o a list|
|000010f0| 20 6f 66 20 61 74 6f 6d | 73 20 28 77 69 74 68 20 | of atom|s (with |
|00001100| 73 69 6e 67 6c 65 0d 20 | 2a 09 6c 65 74 74 65 72 |single. |*.letter|
|00001110| 20 6e 61 6d 65 73 29 2e | 0d 20 2a 2f 0d 63 68 61 | names).|. */.cha|
|00001120| 72 73 5f 74 6f 5f 61 74 | 6f 6d 73 28 5b 5d 2c 5b |rs_to_at|oms([],[|
|00001130| 5d 29 2e 0d 63 68 61 72 | 73 5f 74 6f 5f 61 74 6f |])..char|s_to_ato|
|00001140| 6d 73 28 5b 43 7c 43 53 | 5d 2c 5b 41 7c 41 53 5d |ms([C|CS|],[A|AS]|
|00001150| 29 20 3a 2d 20 0d 09 6e | 61 6d 65 28 41 2c 5b 43 |) :- ..n|ame(A,[C|
|00001160| 5d 29 2c 0d 09 63 68 61 | 72 73 5f 74 6f 5f 61 74 |]),..cha|rs_to_at|
|00001170| 6f 6d 73 28 43 53 2c 41 | 53 29 2e 0d 0d 2f 2a 0d |oms(CS,A|S).../*.|
|00001180| 20 2a 20 45 78 70 61 6e | 64 20 61 20 6c 69 73 74 | * Expan|d a list|
|00001190| 20 6f 66 20 6c 65 74 74 | 65 72 73 20 61 6e 64 20 | of lett|ers and |
|000011a0| 61 6d 65 6e 64 20 74 68 | 65 20 76 61 72 69 61 62 |amend th|e variab|
|000011b0| 6c 65 20 6c 69 73 74 0d | 20 2a 09 66 6f 72 20 6f |le list.| *.for o|
|000011c0| 6e 65 20 74 65 72 6d 2e | 0d 20 2a 2f 0d 65 78 70 |ne term.|. */.exp|
|000011d0| 61 6e 64 5f 6c 65 74 74 | 65 72 73 28 5b 5d 2c 5f |and_lett|ers([],_|
|000011e0| 56 61 72 69 61 62 6c 65 | 73 2c 5b 5d 29 2e 0d 65 |Variable|s,[])..e|
|000011f0| 78 70 61 6e 64 5f 6c 65 | 74 74 65 72 73 28 5b 4c |xpand_le|tters([L|
|00001200| 65 74 7c 4c 65 74 73 5d | 2c 56 61 72 69 61 62 6c |et|Lets]|,Variabl|
|00001210| 65 73 2c 5b 4c 65 74 7c | 56 61 72 73 5d 29 20 3a |es,[Let||Vars]) :|
|00001220| 2d 0d 09 69 6e 74 65 67 | 65 72 28 4c 65 74 29 2c |-..integ|er(Let),|
|00001230| 20 21 2c 0d 09 65 78 70 | 61 6e 64 5f 6c 65 74 74 | !,..exp|and_lett|
|00001240| 65 72 73 28 4c 65 74 73 | 2c 56 61 72 69 61 62 6c |ers(Lets|,Variabl|
|00001250| 65 73 2c 56 61 72 73 29 | 2e 0d 65 78 70 61 6e 64 |es,Vars)|..expand|
|00001260| 5f 6c 65 74 74 65 72 73 | 28 5b 4c 65 74 7c 4c 65 |_letters|([Let|Le|
|00001270| 74 73 5d 2c 56 61 72 69 | 61 62 6c 65 73 2c 5b 56 |ts],Vari|ables,[V|
|00001280| 61 72 7c 56 61 72 73 5d | 29 20 3a 2d 0d 09 56 61 |ar|Vars]|) :-..Va|
|00001290| 72 3d 28 4c 65 74 23 5f | 29 2c 0d 09 6d 65 6d 62 |r=(Let#_|),..memb|
|000012a0| 65 72 28 56 61 72 2c 56 | 61 72 69 61 62 6c 65 73 |er(Var,V|ariables|
|000012b0| 29 2c 0d 09 65 78 70 61 | 6e 64 5f 6c 65 74 74 65 |),..expa|nd_lette|
|000012c0| 72 73 28 4c 65 74 73 2c | 56 61 72 69 61 62 6c 65 |rs(Lets,|Variable|
|000012d0| 73 2c 56 61 72 73 29 2e | 0d 0d 2f 2a 0d 20 2a 20 |s,Vars).|../*. * |
|000012e0| 53 65 63 6f 6e 64 2c 20 | 73 6c 69 63 65 20 75 70 |Second, |slice up|
|000012f0| 20 74 68 65 20 70 72 6f | 62 6c 65 6d 20 69 6e 74 | the pro|blem int|
|00001300| 6f 20 63 6f 6c 75 6d 6e | 20 65 78 70 72 65 73 73 |o column| express|
|00001310| 69 6f 6e 73 2e 0d 20 2a | 09 57 65 20 73 68 61 6c |ions.. *|.We shal|
|00001320| 6c 20 63 72 65 61 74 65 | 20 61 20 6c 69 73 74 20 |l create| a list |
|00001330| 6f 66 20 65 71 75 61 74 | 69 6f 6e 73 2c 20 6f 6e |of equat|ions, on|
|00001340| 65 20 66 6f 72 20 65 61 | 63 68 20 64 69 67 69 74 |e for ea|ch digit|
|00001350| 2e 0d 20 2a 2f 0d 63 6f | 6c 75 6d 6e 73 28 45 78 |.. */.co|lumns(Ex|
|00001360| 70 72 2c 4e 43 6f 6c 73 | 2c 43 6f 6c 75 6d 6e 73 |pr,NCols|,Columns|
|00001370| 29 20 3a 2d 0d 09 6e 75 | 6d 62 65 72 5f 6f 66 5f |) :-..nu|mber_of_|
|00001380| 63 6f 6c 75 6d 6e 73 28 | 45 78 70 72 2c 4e 43 6f |columns(|Expr,NCo|
|00001390| 6c 73 29 2c 0d 09 63 6f | 6c 75 6d 6e 73 28 4e 43 |ls),..co|lumns(NC|
|000013a0| 6f 6c 73 2c 45 78 70 72 | 2c 5b 5d 2c 43 6f 6c 75 |ols,Expr|,[],Colu|
|000013b0| 6d 6e 73 29 2e 0d 0d 63 | 6f 6c 75 6d 6e 73 28 30 |mns)...c|olumns(0|
|000013c0| 2c 5f 45 78 70 72 2c 43 | 6f 6c 75 6d 6e 73 2c 43 |,_Expr,C|olumns,C|
|000013d0| 6f 6c 75 6d 6e 73 29 20 | 3a 2d 20 21 2e 0d 63 6f |olumns) |:- !..co|
|000013e0| 6c 75 6d 6e 73 28 4e 2c | 45 78 70 72 2c 43 6f 6c |lumns(N,|Expr,Col|
|000013f0| 75 6d 6e 73 2c 41 6e 73 | 29 20 3a 2d 0d 09 63 6f |umns,Ans|) :-..co|
|00001400| 6c 75 6d 6e 28 45 78 70 | 72 2c 4e 2c 43 6f 6c 75 |lumn(Exp|r,N,Colu|
|00001410| 6d 6e 29 2c 0d 09 4e 31 | 20 69 73 20 4e 2d 31 2c |mn),..N1| is N-1,|
|00001420| 0d 09 63 6f 6c 75 6d 6e | 73 28 4e 31 2c 45 78 70 |..column|s(N1,Exp|
|00001430| 72 2c 5b 43 6f 6c 75 6d | 6e 7c 43 6f 6c 75 6d 6e |r,[Colum|n|Column|
|00001440| 73 5d 2c 41 6e 73 29 2e | 0d 0d 2f 2a 0d 20 2a 20 |s],Ans).|../*. * |
|00001450| 43 61 6c 63 75 6c 61 74 | 65 20 74 68 65 20 6d 61 |Calculat|e the ma|
|00001460| 78 69 6e 75 6d 20 6e 75 | 6d 62 65 72 20 6f 66 20 |xinum nu|mber of |
|00001470| 64 69 67 69 74 73 20 69 | 6e 20 74 68 65 20 65 71 |digits i|n the eq|
|00001480| 75 61 74 69 6f 6e 2e 0d | 20 2a 09 54 68 69 73 20 |uation..| *.This |
|00001490| 69 73 20 64 6f 77 6e 20 | 62 79 20 63 61 6c 63 75 |is down |by calcu|
|000014a0| 6c 61 74 69 6e 67 20 69 | 74 20 66 6f 72 20 65 61 |lating i|t for ea|
|000014b0| 63 68 20 73 75 62 20 74 | 65 72 6d 20 61 6e 64 20 |ch sub t|erm and |
|000014c0| 72 65 74 75 72 6e 69 6e | 67 20 74 68 65 0d 20 2a |returnin|g the. *|
|000014d0| 09 6d 61 78 69 6d 75 6d | 20 76 61 6c 75 65 20 6f |.maximum| value o|
|000014e0| 66 20 61 6e 79 20 73 70 | 65 63 69 66 69 63 20 74 |f any sp|ecific t|
|000014f0| 65 72 6d 2e 0d 20 2a 2f | 0d 6e 75 6d 62 65 72 5f |erm.. */|.number_|
|00001500| 6f 66 5f 63 6f 6c 75 6d | 6e 73 28 41 2b 42 2c 4e |of_colum|ns(A+B,N|
|00001510| 29 20 3a 2d 0d 09 6e 75 | 6d 62 65 72 5f 6f 66 5f |) :-..nu|mber_of_|
|00001520| 63 6f 6c 75 6d 6e 73 28 | 41 2c 4e 41 29 2c 0d 09 |columns(|A,NA),..|
|00001530| 6e 75 6d 62 65 72 5f 6f | 66 5f 63 6f 6c 75 6d 6e |number_o|f_column|
|00001540| 73 28 42 2c 4e 42 29 2c | 0d 09 6d 61 78 28 4e 41 |s(B,NB),|..max(NA|
|00001550| 2c 4e 42 2c 4e 29 2e 0d | 6e 75 6d 62 65 72 5f 6f |,NB,N)..|number_o|
|00001560| 66 5f 63 6f 6c 75 6d 6e | 73 28 41 2d 42 2c 4e 29 |f_column|s(A-B,N)|
|00001570| 20 3a 2d 0d 09 6e 75 6d | 62 65 72 5f 6f 66 5f 63 | :-..num|ber_of_c|
|00001580| 6f 6c 75 6d 6e 73 28 41 | 2c 4e 41 29 2c 0d 09 6e |olumns(A|,NA),..n|
|00001590| 75 6d 62 65 72 5f 6f 66 | 5f 63 6f 6c 75 6d 6e 73 |umber_of|_columns|
|000015a0| 28 42 2c 4e 42 29 2c 0d | 09 6d 61 78 28 4e 41 2c |(B,NB),.|.max(NA,|
|000015b0| 4e 42 2c 4e 29 2e 0d 6e | 75 6d 62 65 72 5f 6f 66 |NB,N)..n|umber_of|
|000015c0| 5f 63 6f 6c 75 6d 6e 73 | 28 41 3d 42 2c 4e 29 20 |_columns|(A=B,N) |
|000015d0| 3a 2d 0d 09 6e 75 6d 62 | 65 72 5f 6f 66 5f 63 6f |:-..numb|er_of_co|
|000015e0| 6c 75 6d 6e 73 28 41 2c | 4e 41 29 2c 0d 09 6e 75 |lumns(A,|NA),..nu|
|000015f0| 6d 62 65 72 5f 6f 66 5f | 63 6f 6c 75 6d 6e 73 28 |mber_of_|columns(|
|00001600| 42 2c 4e 42 29 2c 0d 09 | 6d 61 78 28 4e 41 2c 4e |B,NB),..|max(NA,N|
|00001610| 42 2c 4e 29 2e 0d 6e 75 | 6d 62 65 72 5f 6f 66 5f |B,N)..nu|mber_of_|
|00001620| 63 6f 6c 75 6d 6e 73 28 | 4c 2c 4e 29 20 3a 2d 0d |columns(|L,N) :-.|
|00001630| 09 6c 69 73 74 28 4c 29 | 2c 0d 09 6c 65 6e 67 74 |.list(L)|,..lengt|
|00001640| 68 28 4c 2c 4e 29 2e 0d | 0d 2f 2a 0d 20 2a 20 41 |h(L,N)..|./*. * A|
|00001650| 20 62 61 73 69 63 20 66 | 75 6e 63 74 69 6f 6e 20 | basic f|unction |
|00001660| 64 65 66 69 6e 69 74 69 | 6f 6e 2e 0d 20 2a 2f 0d |definiti|on.. */.|
|00001670| 6d 61 78 28 58 2c 59 2c | 58 29 20 3a 2d 20 58 20 |max(X,Y,|X) :- X |
|00001680| 3e 3d 20 59 2c 20 21 2e | 0d 6d 61 78 28 58 2c 59 |>= Y, !.|.max(X,Y|
|00001690| 2c 59 29 20 3a 2d 20 58 | 20 3c 20 59 2e 0d 0d 2f |,Y) :- X| < Y.../|
|000016a0| 2a 0d 20 2a 20 4d 61 6b | 65 20 61 6e 20 65 71 75 |*. * Mak|e an equ|
|000016b0| 61 74 69 6f 6e 20 74 6f | 20 73 6f 6c 76 65 20 66 |ation to| solve f|
|000016c0| 6f 72 20 6f 6e 65 20 64 | 69 67 69 74 20 0d 20 2a |or one d|igit . *|
|000016d0| 09 28 6f 6e 65 20 6f 66 | 20 6f 6e 65 73 2c 20 74 |.(one of| ones, t|
|000016e0| 65 6e 73 2c 20 68 75 6e | 64 72 65 64 73 2c 20 65 |ens, hun|dreds, e|
|000016f0| 74 63 2e 29 0d 20 2a 2f | 0d 63 6f 6c 75 6d 6e 28 |tc.). */|.column(|
|00001700| 41 2b 42 2c 4e 2c 53 41 | 2b 53 42 29 20 3a 2d 0d |A+B,N,SA|+SB) :-.|
|00001710| 09 63 6f 6c 75 6d 6e 28 | 41 2c 4e 2c 53 41 29 2c |.column(|A,N,SA),|
|00001720| 0d 09 63 6f 6c 75 6d 6e | 28 42 2c 4e 2c 53 42 29 |..column|(B,N,SB)|
|00001730| 2e 0d 63 6f 6c 75 6d 6e | 28 41 2d 42 2c 4e 2c 53 |..column|(A-B,N,S|
|00001740| 41 2d 53 42 29 20 3a 2d | 0d 09 63 6f 6c 75 6d 6e |A-SB) :-|..column|
|00001750| 28 41 2c 4e 2c 53 41 29 | 2c 0d 09 63 6f 6c 75 6d |(A,N,SA)|,..colum|
|00001760| 6e 28 42 2c 4e 2c 53 42 | 29 2e 0d 63 6f 6c 75 6d |n(B,N,SB|)..colum|
|00001770| 6e 28 41 3d 42 2c 4e 2c | 53 41 3d 53 42 29 20 3a |n(A=B,N,|SA=SB) :|
|00001780| 2d 0d 09 63 6f 6c 75 6d | 6e 28 41 2c 4e 2c 53 41 |-..colum|n(A,N,SA|
|00001790| 29 2c 0d 09 63 6f 6c 75 | 6d 6e 28 42 2c 4e 2c 53 |),..colu|mn(B,N,S|
|000017a0| 42 29 2e 0d 63 6f 6c 75 | 6d 6e 28 41 2c 4e 2c 53 |B)..colu|mn(A,N,S|
|000017b0| 41 29 20 3a 2d 0d 09 6c | 69 73 74 28 41 29 2c 0d |A) :-..l|ist(A),.|
|000017c0| 09 6e 74 68 5f 69 74 65 | 6d 28 41 2c 4e 2c 53 41 |.nth_ite|m(A,N,SA|
|000017d0| 29 2e 0d 0d 2f 2a 0d 20 | 2a 20 53 65 6c 65 63 74 |).../*. |* Select|
|000017e0| 20 74 68 65 20 73 70 65 | 63 69 66 69 65 64 20 65 | the spe|cified e|
|000017f0| 6c 65 6d 65 6e 74 20 66 | 72 6f 6d 20 74 68 65 20 |lement f|rom the |
|00001800| 6c 69 73 74 2e 0d 20 2a | 09 4e 20 69 73 20 74 68 |list.. *|.N is th|
|00001810| 65 20 69 74 65 6d 20 6e | 75 6d 62 65 72 2c 20 58 |e item n|umber, X|
|00001820| 20 69 73 20 74 68 65 20 | 4e 74 68 20 69 74 65 6d | is the |Nth item|
|00001830| 2e 0d 20 2a 2f 0d 6e 74 | 68 5f 69 74 65 6d 28 5b |.. */.nt|h_item([|
|00001840| 5d 2c 5f 4e 2c 30 29 2e | 0d 6e 74 68 5f 69 74 65 |],_N,0).|.nth_ite|
|00001850| 6d 28 5b 58 7c 5f 5d 2c | 31 2c 58 29 2e 0d 6e 74 |m([X|_],|1,X)..nt|
|00001860| 68 5f 69 74 65 6d 28 5b | 5f 7c 4c 5d 2c 4e 2c 58 |h_item([|_|L],N,X|
|00001870| 29 20 3a 2d 0d 09 4e 31 | 20 69 73 20 4e 2d 31 2c |) :-..N1| is N-1,|
|00001880| 0d 09 6e 74 68 5f 69 74 | 65 6d 28 4c 2c 4e 31 2c |..nth_it|em(L,N1,|
|00001890| 58 29 2e 0d 0d 2f 2a 0d | 20 2a 20 47 65 6e 65 72 |X).../*.| * Gener|
|000018a0| 61 74 65 20 61 20 70 72 | 6f 67 72 61 6d 20 74 6f |ate a pr|ogram to|
|000018b0| 20 73 6f 6c 76 65 20 70 | 75 7a 7a 6c 65 2e 0d 20 | solve p|uzzle.. |
|000018c0| 2a 09 47 69 76 65 6e 20 | 74 68 65 20 73 65 74 20 |*.Given |the set |
|000018d0| 6f 66 20 65 71 75 61 74 | 69 6f 6e 73 20 66 6f 72 |of equat|ions for|
|000018e0| 20 65 61 63 68 20 64 69 | 67 69 74 2e 0d 20 2a 09 | each di|git.. *.|
|000018f0| 43 6f 6e 76 65 72 74 20 | 74 68 65 73 65 20 69 6e |Convert |these in|
|00001900| 74 6f 20 50 72 6f 6c 6f | 67 20 65 78 70 72 65 73 |to Prolo|g expres|
|00001910| 73 69 6f 6e 73 2c 20 61 | 6e 64 20 6d 61 6b 65 20 |sions, a|nd make |
|00001920| 73 75 72 65 20 61 20 63 | 61 72 72 79 20 62 69 74 |sure a c|arry bit|
|00001930| 0d 20 2a 09 69 73 20 61 | 64 64 65 64 20 66 72 6f |. *.is a|dded fro|
|00001940| 6d 20 65 61 63 68 20 63 | 6f 6c 75 6d 6e 20 74 6f |m each c|olumn to|
|00001950| 20 74 68 65 20 6e 65 78 | 74 2e 0d 20 2a 2f 0d 63 | the nex|t.. */.c|
|00001960| 6f 64 65 5f 63 6f 6c 75 | 6d 6e 73 28 5b 5d 2c 5f |ode_colu|mns([],_|
|00001970| 43 68 6f 73 65 6e 2c 30 | 2c 5f 50 6f 73 73 2c 5b |Chosen,0|,_Poss,[|
|00001980| 5d 29 2e 0d 63 6f 64 65 | 5f 63 6f 6c 75 6d 6e 73 |])..code|_columns|
|00001990| 28 5b 43 6f 6c 7c 43 6f | 6c 73 5d 2c 43 68 6f 73 |([Col|Co|ls],Chos|
|000019a0| 65 6e 30 2c 43 69 6e 2c | 50 6f 73 73 2c 43 6f 64 |en0,Cin,|Poss,Cod|
|000019b0| 65 29 20 3a 2d 0d 09 63 | 6f 64 65 5f 63 6f 6c 75 |e) :-..c|ode_colu|
|000019c0| 6d 6e 28 43 68 6f 73 65 | 6e 30 2c 43 69 6e 2c 43 |mn(Chose|n0,Cin,C|
|000019d0| 6f 6c 2c 50 6f 73 73 2c | 43 68 6f 73 65 6e 31 2c |ol,Poss,|Chosen1,|
|000019e0| 43 6f 75 74 2c 43 6f 64 | 65 2c 54 61 69 6c 29 2c |Cout,Cod|e,Tail),|
|000019f0| 0d 09 63 6f 64 65 5f 63 | 6f 6c 75 6d 6e 73 28 43 |..code_c|olumns(C|
|00001a00| 6f 6c 73 2c 43 68 6f 73 | 65 6e 31 2c 43 6f 75 74 |ols,Chos|en1,Cout|
|00001a10| 2c 50 6f 73 73 2c 54 61 | 69 6c 29 2e 0d 0d 2f 2a |,Poss,Ta|il).../*|
|00001a20| 0d 20 2a 20 48 65 72 65 | 20 77 65 20 63 72 65 61 |. * Here| we crea|
|00001a30| 74 65 20 74 68 65 20 61 | 63 74 75 61 6c 20 65 78 |te the a|ctual ex|
|00001a40| 70 72 65 73 73 69 6f 6e | 20 66 6f 72 20 6f 6e 65 |pression| for one|
|00001a50| 20 63 6f 6c 75 6d 6e 0d | 20 2a 09 28 69 6e 63 6c | column.| *.(incl|
|00001a60| 75 64 69 6e 67 20 63 6f | 64 65 20 66 6f 72 20 74 |uding co|de for t|
|00001a70| 68 65 20 63 61 72 72 79 | 29 2e 0d 20 2a 2f 0d 63 |he carry|).. */.c|
|00001a80| 6f 64 65 5f 63 6f 6c 75 | 6d 6e 28 43 68 6f 73 65 |ode_colu|mn(Chose|
|00001a90| 6e 30 2c 43 69 6e 2c 45 | 78 70 72 2c 50 6f 73 73 |n0,Cin,E|xpr,Poss|
|00001aa0| 2c 43 68 6f 73 65 6e 31 | 2c 43 6f 75 74 2c 43 6f |,Chosen1|,Cout,Co|
|00001ab0| 64 65 2c 54 61 69 6c 29 | 20 3a 2d 0d 09 63 6f 6c |de,Tail)| :-..col|
|00001ac0| 75 6d 6e 5f 65 78 70 72 | 28 45 78 70 72 2c 45 78 |umn_expr|(Expr,Ex|
|00001ad0| 70 72 56 61 72 73 2c 50 | 45 78 70 72 29 2c 0d 09 |prVars,P|Expr),..|
|00001ae0| 63 68 6f 73 65 6e 5f 76 | 61 72 73 28 45 78 70 72 |chosen_v|ars(Expr|
|00001af0| 56 61 72 73 2c 43 68 6f | 73 65 6e 30 2c 4e 65 77 |Vars,Cho|sen0,New|
|00001b00| 56 61 72 73 2c 43 68 6f | 73 65 6e 31 29 2c 0d 09 |Vars,Cho|sen1),..|
|00001b10| 63 68 6f 6f 73 65 5f 63 | 6f 64 65 28 4e 65 77 56 |choose_c|ode(NewV|
|00001b20| 61 72 73 2c 50 6f 73 73 | 2c 43 6f 64 65 2c 43 54 |ars,Poss|,Code,CT|
|00001b30| 61 69 6c 29 2c 0d 09 43 | 54 61 69 6c 20 3d 20 5b |ail),..C|Tail = [|
|00001b40| 20 54 6f 74 61 6c 20 69 | 73 20 43 69 6e 20 2b 20 | Total i|s Cin + |
|00001b50| 50 45 78 70 72 2c 0d 09 | 09 30 20 69 73 20 54 6f |PExpr,..|.0 is To|
|00001b60| 74 61 6c 20 6d 6f 64 20 | 31 30 2c 0d 09 09 43 6f |tal mod |10,...Co|
|00001b70| 75 74 20 69 73 20 54 6f | 74 61 6c 20 2f 2f 20 31 |ut is To|tal // 1|
|00001b80| 30 0d 09 09 7c 20 54 61 | 69 6c 5d 2e 0d 0d 63 68 |0...| Ta|il]...ch|
|00001b90| 6f 73 65 6e 5f 76 61 72 | 73 28 5b 5d 2c 43 68 6f |osen_var|s([],Cho|
|00001ba0| 73 65 6e 30 2c 5b 5d 2c | 43 68 6f 73 65 6e 30 29 |sen0,[],|Chosen0)|
|00001bb0| 2e 0d 63 68 6f 73 65 6e | 5f 76 61 72 73 28 5b 45 |..chosen|_vars([E|
|00001bc0| 56 61 72 7c 45 56 61 72 | 73 5d 2c 43 68 6f 73 65 |Var|EVar|s],Chose|
|00001bd0| 6e 30 2c 4e 65 77 56 61 | 72 73 2c 43 68 6f 73 65 |n0,NewVa|rs,Chose|
|00001be0| 6e 31 29 20 3a 2d 0d 09 | 6d 65 6d 62 65 72 28 45 |n1) :-..|member(E|
|00001bf0| 56 61 72 2c 43 68 6f 73 | 65 6e 30 29 2c 20 21 2c |Var,Chos|en0), !,|
|00001c00| 0d 09 63 68 6f 73 65 6e | 5f 76 61 72 73 28 45 56 |..chosen|_vars(EV|
|00001c10| 61 72 73 2c 43 68 6f 73 | 65 6e 30 2c 4e 65 77 56 |ars,Chos|en0,NewV|
|00001c20| 61 72 73 2c 43 68 6f 73 | 65 6e 31 29 2e 0d 63 68 |ars,Chos|en1)..ch|
|00001c30| 6f 73 65 6e 5f 76 61 72 | 73 28 5b 45 56 61 72 7c |osen_var|s([EVar||
|00001c40| 45 56 61 72 73 5d 2c 43 | 68 6f 73 65 6e 30 2c 5b |EVars],C|hosen0,[|
|00001c50| 45 56 61 72 7c 4e 65 77 | 56 61 72 73 5d 2c 5b 45 |EVar|New|Vars],[E|
|00001c60| 56 61 72 7c 43 68 6f 73 | 65 6e 31 5d 29 20 3a 2d |Var|Chos|en1]) :-|
|00001c70| 0d 09 63 68 6f 73 65 6e | 5f 76 61 72 73 28 45 56 |..chosen|_vars(EV|
|00001c80| 61 72 73 2c 43 68 6f 73 | 65 6e 30 2c 4e 65 77 56 |ars,Chos|en0,NewV|
|00001c90| 61 72 73 2c 43 68 6f 73 | 65 6e 31 29 2e 0d 0d 63 |ars,Chos|en1)...c|
|00001ca0| 68 6f 6f 73 65 5f 63 6f | 64 65 28 5b 5d 2c 5f 50 |hoose_co|de([],_P|
|00001cb0| 6f 73 73 2c 54 61 69 6c | 2c 54 61 69 6c 29 2e 0d |oss,Tail|,Tail)..|
|00001cc0| 63 68 6f 6f 73 65 5f 63 | 6f 64 65 28 5b 56 61 72 |choose_c|ode([Var|
|00001cd0| 7c 56 61 72 73 5d 2c 50 | 6f 73 73 2c 5b 63 68 6f ||Vars],P|oss,[cho|
|00001ce0| 6f 73 65 28 56 61 72 2c | 50 6f 73 73 29 20 7c 20 |ose(Var,|Poss) | |
|00001cf0| 43 6f 64 65 5d 2c 54 61 | 69 6c 29 20 3a 2d 0d 09 |Code],Ta|il) :-..|
|00001d00| 63 68 6f 6f 73 65 5f 63 | 6f 64 65 28 56 61 72 73 |choose_c|ode(Vars|
|00001d10| 2c 50 6f 73 73 2c 43 6f | 64 65 2c 54 61 69 6c 29 |,Poss,Co|de,Tail)|
|00001d20| 2e 0d 0d 0d 63 6f 6c 75 | 6d 6e 5f 65 78 70 72 28 |....colu|mn_expr(|
|00001d30| 41 2b 42 2c 45 78 70 72 | 56 61 72 73 2c 50 41 2b |A+B,Expr|Vars,PA+|
|00001d40| 50 42 29 20 3a 2d 0d 09 | 63 6f 6c 75 6d 6e 5f 65 |PB) :-..|column_e|
|00001d50| 78 70 72 28 41 2c 45 78 | 70 72 56 61 72 73 2c 50 |xpr(A,Ex|prVars,P|
|00001d60| 41 29 2c 0d 09 63 6f 6c | 75 6d 6e 5f 65 78 70 72 |A),..col|umn_expr|
|00001d70| 28 42 2c 45 78 70 72 56 | 61 72 73 2c 50 42 29 2e |(B,ExprV|ars,PB).|
|00001d80| 0d 63 6f 6c 75 6d 6e 5f | 65 78 70 72 28 41 2d 42 |.column_|expr(A-B|
|00001d90| 2c 45 78 70 72 56 61 72 | 73 2c 50 41 2d 50 42 29 |,ExprVar|s,PA-PB)|
|00001da0| 20 3a 2d 0d 09 63 6f 6c | 75 6d 6e 5f 65 78 70 72 | :-..col|umn_expr|
|00001db0| 28 41 2c 45 78 70 72 56 | 61 72 73 2c 50 41 29 2c |(A,ExprV|ars,PA),|
|00001dc0| 0d 09 63 6f 6c 75 6d 6e | 5f 65 78 70 72 28 42 2c |..column|_expr(B,|
|00001dd0| 45 78 70 72 56 61 72 73 | 2c 50 42 29 2e 0d 63 6f |ExprVars|,PB)..co|
|00001de0| 6c 75 6d 6e 5f 65 78 70 | 72 28 41 3d 42 2c 45 78 |lumn_exp|r(A=B,Ex|
|00001df0| 70 72 56 61 72 73 2c 50 | 41 2d 50 42 29 20 3a 2d |prVars,P|A-PB) :-|
|00001e00| 0d 09 63 6f 6c 75 6d 6e | 5f 65 78 70 72 28 41 2c |..column|_expr(A,|
|00001e10| 45 78 70 72 56 61 72 73 | 2c 50 41 29 2c 0d 09 63 |ExprVars|,PA),..c|
|00001e20| 6f 6c 75 6d 6e 5f 65 78 | 70 72 28 42 2c 45 78 70 |olumn_ex|pr(B,Exp|
|00001e30| 72 56 61 72 73 2c 50 42 | 29 2e 0d 63 6f 6c 75 6d |rVars,PB|)..colum|
|00001e40| 6e 5f 65 78 70 72 28 56 | 61 72 23 56 61 6c 2c 45 |n_expr(V|ar#Val,E|
|00001e50| 78 70 72 56 61 72 73 2c | 56 61 6c 29 20 3a 2d 0d |xprVars,|Val) :-.|
|00001e60| 09 6d 65 6d 62 65 72 28 | 56 61 72 23 56 61 6c 2c |.member(|Var#Val,|
|00001e70| 45 78 70 72 56 61 72 73 | 29 2e 0d 63 6f 6c 75 6d |ExprVars|)..colum|
|00001e80| 6e 5f 65 78 70 72 28 49 | 2c 5f 45 78 70 72 56 61 |n_expr(I|,_ExprVa|
|00001e90| 72 73 2c 49 29 20 3a 2d | 0d 09 69 6e 74 65 67 65 |rs,I) :-|..intege|
|00001ea0| 72 28 49 29 2c 20 21 2e | 0d 0d 2f 2a 0d 20 2a 20 |r(I), !.|../*. * |
|00001eb0| 43 68 6f 6f 73 65 20 69 | 73 20 61 20 76 61 72 69 |Choose i|s a vari|
|00001ec0| 61 6e 74 20 6f 66 20 6d | 65 6d 62 65 72 20 77 68 |ant of m|ember wh|
|00001ed0| 69 63 68 20 63 61 6e 20 | 72 65 74 75 72 6e 20 6d |ich can |return m|
|00001ee0| 75 6c 74 69 70 6c 65 20 | 74 69 6d 65 73 2e 0d 20 |ultiple |times.. |
|00001ef0| 2a 2f 0d 63 68 6f 6f 73 | 65 28 58 56 2c 5b 58 56 |*/.choos|e(XV,[XV|
|00001f00| 7c 5f 4c 5d 29 2e 0d 63 | 68 6f 6f 73 65 28 58 56 ||_L])..c|hoose(XV|
|00001f10| 2c 5b 5f 7c 4c 5d 29 20 | 3a 2d 20 63 68 6f 6f 73 |,[_|L]) |:- choos|
|00001f20| 65 28 58 56 2c 4c 29 2e | 0d 0d 0d 25 20 50 72 69 |e(XV,L).|...% Pri|
|00001f30| 6e 74 20 74 68 65 20 61 | 6e 73 77 65 72 0d 0d 6d |nt the a|nswer..m|
|00001f40| 61 74 63 68 5f 75 70 28 | 5b 5d 2c 5f 56 61 72 69 |atch_up(|[],_Vari|
|00001f50| 61 62 6c 65 73 29 2e 0d | 6d 61 74 63 68 5f 75 70 |ables)..|match_up|
|00001f60| 28 5b 56 61 72 23 5f 56 | 61 6c 20 7c 20 56 61 6c |([Var#_V|al | Val|
|00001f70| 75 65 73 5d 2c 56 61 72 | 69 61 62 6c 65 73 29 20 |ues],Var|iables) |
|00001f80| 3a 2d 0d 09 76 61 72 28 | 56 61 72 29 2c 20 21 2c |:-..var(|Var), !,|
|00001f90| 0d 09 6d 61 74 63 68 5f | 75 70 28 56 61 6c 75 65 |..match_|up(Value|
|00001fa0| 73 2c 56 61 72 69 61 62 | 6c 65 73 29 2e 0d 6d 61 |s,Variab|les)..ma|
|00001fb0| 74 63 68 5f 75 70 28 5b | 56 61 72 56 61 6c 20 7c |tch_up([|VarVal ||
|00001fc0| 20 56 61 6c 75 65 73 5d | 2c 56 61 72 69 61 62 6c | Values]|,Variabl|
|00001fd0| 65 73 29 20 3a 2d 0d 09 | 6d 65 6d 62 65 72 28 56 |es) :-..|member(V|
|00001fe0| 61 72 56 61 6c 2c 56 61 | 72 69 61 62 6c 65 73 29 |arVal,Va|riables)|
|00001ff0| 2c 0d 09 6d 61 74 63 68 | 5f 75 70 28 56 61 6c 75 |,..match|_up(Valu|
|00002000| 65 73 2c 56 61 72 69 61 | 62 6c 65 73 29 2e 0d 0d |es,Varia|bles)...|
|00002010| 2f 2a 0d 20 2a 20 54 68 | 65 20 66 6f 6c 6c 6f 77 |/*. * Th|e follow|
|00002020| 69 6e 67 20 70 72 69 6e | 74 20 6f 75 74 20 74 68 |ing prin|t out th|
|00002030| 65 20 73 6f 6c 75 74 69 | 6f 6e 2e 0d 20 2a 2f 0d |e soluti|on.. */.|
|00002040| 70 72 69 6e 74 5f 61 6e | 73 77 65 72 28 56 61 72 |print_an|swer(Var|
|00002050| 69 61 62 6c 65 73 2c 56 | 61 6c 75 65 73 2c 45 78 |iables,V|alues,Ex|
|00002060| 70 61 6e 73 69 6f 6e 2c | 4e 43 6f 6c 73 29 20 3a |pansion,|NCols) :|
|00002070| 2d 0d 09 6d 61 74 63 68 | 5f 75 70 28 56 61 6c 75 |-..match|_up(Valu|
|00002080| 65 73 2c 56 61 72 69 61 | 62 6c 65 73 29 2c 0d 09 |es,Varia|bles),..|
|00002090| 4e 43 6f 6c 73 32 20 69 | 73 20 4e 43 6f 6c 73 2a |NCols2 i|s NCols*|
|000020a0| 32 20 2b 20 31 2c 0d 09 | 6e 6c 2c 0d 09 70 72 69 |2 + 1,..|nl,..pri|
|000020b0| 6e 74 5f 65 78 70 28 45 | 78 70 61 6e 73 69 6f 6e |nt_exp(E|xpansion|
|000020c0| 2c 27 20 27 2c 4e 43 6f | 6c 73 32 29 2c 0d 09 6e |,' ',NCo|ls2),..n|
|000020d0| 6c 2c 6e 6c 2c 0d 09 21 | 2e 0d 0d 0d 70 72 69 6e |l,nl,..!|....prin|
|000020e0| 74 5f 65 78 70 28 45 78 | 70 2c 4f 70 2c 4e 43 6f |t_exp(Ex|p,Op,NCo|
|000020f0| 6c 73 29 20 3a 2d 0d 09 | 6c 69 73 74 28 45 78 70 |ls) :-..|list(Exp|
|00002100| 29 2c 20 21 2c 0d 09 6c | 65 6e 67 74 68 28 45 78 |), !,..l|ength(Ex|
|00002110| 70 2c 4e 45 29 2c 20 4e | 53 70 20 69 73 20 4e 43 |p,NE), N|Sp is NC|
|00002120| 6f 6c 73 20 2d 20 32 2a | 4e 45 2c 0d 09 74 61 62 |ols - 2*|NE,..tab|
|00002130| 28 36 29 2c 77 72 69 74 | 65 28 4f 70 29 2c 74 61 |(6),writ|e(Op),ta|
|00002140| 62 28 4e 53 70 29 2c 0d | 09 70 72 69 6e 74 5f 72 |b(NSp),.|.print_r|
|00002150| 6f 77 28 45 78 70 2c 76 | 61 72 29 2c 0d 09 74 61 |ow(Exp,v|ar),..ta|
|00002160| 62 28 36 29 2c 77 72 69 | 74 65 28 4f 70 29 2c 74 |b(6),wri|te(Op),t|
|00002170| 61 62 28 4e 53 70 29 2c | 0d 09 70 72 69 6e 74 5f |ab(NSp),|..print_|
|00002180| 72 6f 77 28 45 78 70 2c | 76 61 6c 29 2e 0d 70 72 |row(Exp,|val)..pr|
|00002190| 69 6e 74 5f 65 78 70 28 | 41 2b 42 2c 4f 70 2c 4e |int_exp(|A+B,Op,N|
|000021a0| 43 6f 6c 73 29 20 3a 2d | 20 21 2c 0d 09 70 72 69 |Cols) :-| !,..pri|
|000021b0| 6e 74 5f 65 78 70 28 41 | 2c 4f 70 2c 4e 43 6f 6c |nt_exp(A|,Op,NCol|
|000021c0| 73 29 2c 6e 6c 2c 0d 09 | 70 72 69 6e 74 5f 65 78 |s),nl,..|print_ex|
|000021d0| 70 28 42 2c 27 2b 27 2c | 4e 43 6f 6c 73 29 2e 0d |p(B,'+',|NCols)..|
|000021e0| 70 72 69 6e 74 5f 65 78 | 70 28 41 2d 42 2c 4f 70 |print_ex|p(A-B,Op|
|000021f0| 2c 4e 43 6f 6c 73 29 20 | 3a 2d 20 21 2c 0d 09 70 |,NCols) |:- !,..p|
|00002200| 72 69 6e 74 5f 65 78 70 | 28 41 2c 4f 70 2c 4e 43 |rint_exp|(A,Op,NC|
|00002210| 6f 6c 73 29 2c 6e 6c 2c | 0d 09 70 72 69 6e 74 5f |ols),nl,|..print_|
|00002220| 65 78 70 28 42 2c 27 2d | 27 2c 4e 43 6f 6c 73 29 |exp(B,'-|',NCols)|
|00002230| 2e 0d 70 72 69 6e 74 5f | 65 78 70 28 41 3d 42 2c |..print_|exp(A=B,|
|00002240| 4f 70 2c 4e 43 6f 6c 73 | 29 20 3a 2d 20 21 2c 0d |Op,NCols|) :- !,.|
|00002250| 09 70 72 69 6e 74 5f 65 | 78 70 28 41 2c 4f 70 2c |.print_e|xp(A,Op,|
|00002260| 4e 43 6f 6c 73 29 2c 6e | 6c 2c 0d 09 74 61 62 28 |NCols),n|l,..tab(|
|00002270| 36 29 2c 6e 77 72 69 74 | 65 28 4e 43 6f 6c 73 2c |6),nwrit|e(NCols,|
|00002280| 27 2d 27 29 2c 0d 09 74 | 61 62 28 37 29 2c 6e 77 |'-'),..t|ab(7),nw|
|00002290| 72 69 74 65 28 4e 43 6f | 6c 73 2c 27 2d 27 29 2c |rite(NCo|ls,'-'),|
|000022a0| 6e 6c 2c 0d 09 70 72 69 | 6e 74 5f 65 78 70 28 42 |nl,..pri|nt_exp(B|
|000022b0| 2c 27 3d 27 2c 4e 43 6f | 6c 73 29 2e 0d 0d 0d 70 |,'=',NCo|ls)....p|
|000022c0| 72 69 6e 74 5f 72 6f 77 | 28 5b 5d 2c 5f 57 68 61 |rint_row|([],_Wha|
|000022d0| 74 29 2e 0d 70 72 69 6e | 74 5f 72 6f 77 28 5b 58 |t)..prin|t_row([X|
|000022e0| 7c 4c 5d 2c 57 68 61 74 | 29 20 3a 2d 0d 09 70 72 ||L],What|) :-..pr|
|000022f0| 69 6e 74 5f 72 6f 77 28 | 4c 2c 57 68 61 74 29 2c |int_row(|L,What),|
|00002300| 0d 09 70 72 69 6e 74 5f | 69 74 65 6d 28 58 2c 57 |..print_|item(X,W|
|00002310| 68 61 74 29 2c 0d 09 74 | 61 62 28 31 29 2e 0d 0d |hat),..t|ab(1)...|
|00002320| 0d 70 72 69 6e 74 5f 69 | 74 65 6d 28 58 2c 5f 57 |.print_i|tem(X,_W|
|00002330| 68 61 74 29 20 3a 2d 0d | 09 69 6e 74 65 67 65 72 |hat) :-.|.integer|
|00002340| 28 58 29 2c 20 21 2c 0d | 09 77 72 69 74 65 28 58 |(X), !,.|.write(X|
|00002350| 29 2e 0d 70 72 69 6e 74 | 5f 69 74 65 6d 28 56 61 |)..print|_item(Va|
|00002360| 72 23 5f 56 61 6c 2c 76 | 61 72 29 20 3a 2d 20 21 |r#_Val,v|ar) :- !|
|00002370| 2c 0d 09 77 72 69 74 65 | 28 56 61 72 29 2e 0d 70 |,..write|(Var)..p|
|00002380| 72 69 6e 74 5f 69 74 65 | 6d 28 5f 56 61 72 23 56 |rint_ite|m(_Var#V|
|00002390| 61 6c 2c 76 61 6c 29 20 | 3a 2d 0d 09 77 72 69 74 |al,val) |:-..writ|
|000023a0| 65 28 56 61 6c 29 2e 0d | 0d 6e 77 72 69 74 65 28 |e(Val)..|.nwrite(|
|000023b0| 4e 2c 5f 58 29 20 3a 2d | 20 4e 3c 31 2c 20 21 2e |N,_X) :-| N<1, !.|
|000023c0| 0d 6e 77 72 69 74 65 28 | 4e 2c 58 29 20 3a 2d 20 |.nwrite(|N,X) :- |
|000023d0| 77 72 69 74 65 28 58 29 | 2c 20 4e 31 20 69 73 20 |write(X)|, N1 is |
|000023e0| 4e 2d 31 2c 20 6e 77 72 | 69 74 65 28 4e 31 2c 58 |N-1, nwr|ite(N1,X|
|000023f0| 29 2e 0d 0d 0d 2f 2a 0d | 20 2a 20 41 20 51 75 69 |)..../*.| * A Qui|
|00002400| 63 6b 20 74 65 73 74 2e | 0d 20 2a 2f 0d 74 65 73 |ck test.|. */.tes|
|00002410| 74 20 3a 2d 20 73 6f 6c | 76 65 28 73 65 6e 64 2b |t :- sol|ve(send+|
|00002420| 6d 6f 72 65 3d 6d 6f 6e | 65 79 29 2e 0d 0d 3a 2d |more=mon|ey)...:-|
|00002430| 20 70 72 69 6e 74 73 74 | 72 69 6e 67 28 0d 27 a5 | printst|ring(.'.|
|00002440| a5 a5 a5 a5 a5 a5 a5 a5 | a5 a5 a5 a5 a5 a5 a5 a5 |........|........|
|00002450| a5 a5 a5 a5 a5 a5 a5 a5 | a5 a5 a5 a5 a5 a5 a5 a5 |........|........|
|00002460| a5 a5 a5 a5 a5 a5 a5 a5 | a5 a5 a5 a5 a5 a5 a5 a5 |........|........|
|00002470| a5 a5 a5 a5 a5 a5 a5 a5 | a5 a5 a5 a5 a5 0d 43 72 |........|......Cr|
|00002480| 79 70 74 2e 70 3a 20 50 | 72 6f 67 72 61 6d 20 74 |ypt.p: P|rogram t|
|00002490| 6f 20 73 6f 6c 76 65 20 | 63 72 79 70 74 61 72 69 |o solve |cryptari|
|000024a0| 74 68 6d 65 74 69 63 20 | 70 75 7a 7a 6c 65 73 2e |thmetic |puzzles.|
|000024b0| 0d 43 6f 70 79 72 69 67 | 68 74 2c 20 a9 20 31 39 |.Copyrig|ht, . 19|
|000024c0| 38 36 20 2d 20 31 39 39 | 32 2c 20 41 64 76 61 6e |86 - 199|2, Advan|
|000024d0| 63 65 64 20 41 2e 20 49 | 2e 20 53 79 73 74 65 6d |ced A. I|. System|
|000024e0| 73 2c 20 49 6e 63 2e 0d | 41 6c 6c 20 72 69 67 68 |s, Inc..|All righ|
|000024f0| 74 73 20 72 65 73 65 72 | 76 65 64 2e 0d a5 a5 a5 |ts reser|ved.....|
|00002500| a5 a5 a5 a5 a5 a5 a5 a5 | a5 a5 a5 a5 a5 a5 a5 a5 |........|........|
|00002510| a5 a5 a5 a5 a5 a5 a5 a5 | a5 a5 a5 a5 a5 a5 a5 a5 |........|........|
|00002520| a5 a5 a5 a5 a5 a5 a5 a5 | a5 a5 a5 a5 a5 a5 a5 a5 |........|........|
|00002530| a5 a5 a5 a5 a5 a5 a5 a5 | a5 a5 a5 0d 53 61 6d 70 |........|....Samp|
|00002540| 6c 65 20 70 72 6f 62 6c | 65 6d 73 3a 0d 50 6c 61 |le probl|ems:.Pla|
|00002550| 63 65 20 74 68 65 20 63 | 75 72 73 6f 72 20 6f 6e |ce the c|ursor on|
|00002560| 20 61 6e 79 20 6f 66 20 | 74 68 65 20 66 6f 6c 6c | any of |the foll|
|00002570| 6f 77 69 6e 67 20 6c 69 | 6e 65 73 20 61 6e 64 0d |owing li|nes and.|
|00002580| 74 79 70 65 20 74 68 65 | 20 65 6e 74 65 72 20 6b |type the| enter k|
|00002590| 65 79 20 6f 72 20 63 6f | 6d 6d 61 6e 64 2d 3d 2c |ey or co|mmand-=,|
|000025a0| 20 74 6f 20 77 61 74 63 | 68 20 70 72 6f 6c 6f 67 | to watc|h prolog|
|000025b0| 20 73 6f 6c 76 65 20 74 | 68 65 20 70 72 6f 62 6c | solve t|he probl|
|000025c0| 65 6d 2e 0d 20 0d 09 3f | 2d 20 73 6f 6c 76 65 28 |em.. ..?|- solve(|
|000025d0| 73 65 6e 64 2b 6d 6f 72 | 65 3d 6d 6f 6e 65 79 29 |send+mor|e=money)|
|000025e0| 2e 0d 09 3f 2d 20 73 6f | 6c 76 65 28 64 6f 6e 61 |...?- so|lve(dona|
|000025f0| 6c 64 2b 67 65 72 61 6c | 64 3d 72 6f 62 65 72 74 |ld+geral|d=robert|
|00002600| 29 2e 0d 09 3f 2d 20 73 | 6f 6c 76 65 28 73 65 6e |)...?- s|olve(sen|
|00002610| 64 20 2b 20 6d 6f 72 65 | 20 3d 20 6d 6f 6e 65 79 |d + more| = money|
|00002620| 29 2e 0d 09 3f 2d 20 73 | 6f 6c 76 65 28 77 72 6f |)...?- s|olve(wro|
|00002630| 6e 67 2b 77 72 6f 6e 67 | 20 3d 20 72 69 67 68 74 |ng+wrong| = right|
|00002640| 29 2e 0d 27 29 2e 0d 0d | 0d 00 00 00 00 00 00 00 |)..')...|........|
|00002650| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00002660| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00002670| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00002680| 00 00 01 00 00 00 01 7a | 00 00 00 7a 00 00 00 52 |.......z|...z...R|
|00002690| 75 6e 20 74 68 69 73 20 | 66 75 6e 63 74 69 6f 6e |un this |function|
|000026a0| 20 61 67 61 69 6e 2e 0d | 09 25 0d 09 61 66 74 65 | again..|.%..afte|
|000026b0| 07 63 72 79 70 74 2e 70 | 02 00 00 00 54 45 58 54 |.crypt.p|....TEXT|
|000026c0| 41 49 46 43 01 00 00 28 | 00 00 00 00 00 00 2f cf |AIFC...(|....../.|
|000026d0| 00 00 54 45 58 54 41 49 | 46 43 01 00 00 28 00 00 |..TEXTAI|FC...(..|
|000026e0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|000026f0| 00 00 a6 07 60 06 00 00 | 25 c9 00 00 01 cc 6e 73 |....`...|%.....ns|
|00002700| 74 61 6c 6c 20 74 68 69 | 73 20 6d 65 6e 75 20 61 |tall thi|s menu a|
|00002710| 73 20 61 20 73 75 62 6d | 65 6e 75 20 69 6e 73 69 |s a subm|enu insi|
|00002720| 64 65 20 74 68 65 20 66 | 6f 72 6d 61 74 20 6d 65 |de the f|ormat me|
|00002730| 6e 75 0d 20 2a 20 64 65 | 66 69 6e 65 64 20 69 6e |nu. * de|fined in|
|00002740| 20 74 68 65 20 73 74 61 | 6e 64 61 72 64 20 70 72 | the sta|ndard pr|
|00002750| 6f 6c 6f 67 20 69 6e 74 | 65 72 66 61 63 65 20 70 |olog int|erface p|
|00002760| 72 6f 76 69 64 65 64 2e | 20 20 54 68 65 20 66 6f |rovided.| The fo|
|00002770| 72 6d 61 74 20 6d 65 6e | 75 0d 20 2a 20 69 73 20 |rmat men|u. * is |
|00002780| 00 00 00 08 00 46 00 14 | 01 76 01 f1 00 00 00 48 |.....F..|.v.....H|
|00002790| 00 09 4d 6f 6e 61 63 6f | 00 0f f4 68 00 00 00 00 |..Monaco|...h....|
|000027a0| 00 0f f4 60 4e ad 08 f2 | 50 8f 2f 00 2f 0c 4e ad |...`N...|P././.N.|
|000027b0| 06 82 00 06 00 04 00 3c | 00 24 01 7d 01 bd 00 3c |.......<|.$.}...<|
|000027c0| 00 24 01 7d 01 bd a6 07 | 60 2f 00 00 00 00 00 00 |.$.}....|`/......|
|000027d0| 00 00 00 00 22 d3 01 00 | 00 00 00 1e 00 3c 00 24 |...."...|.....<.$|
|000027e0| 01 7d 01 bd 00 3c 00 24 | 01 7d 01 bd 00 00 22 d3 |.}...<.$|.}....".|
|000027f0| 00 00 00 00 00 00 00 00 | 00 00 00 00 01 00 00 00 |........|........|
|00002800| 01 7a 00 00 00 7a 00 00 | 00 52 00 4c 0f 84 06 fc |.z...z..|.R.L....|
|00002810| 00 00 00 1c 00 52 00 01 | 45 57 4e 44 00 00 00 12 |.....R..|EWND....|
|00002820| 4d 50 53 52 00 01 00 1e | 01 00 ff ff 00 00 00 00 |MPSR....|........|
|00002830| 00 00 00 00 03 ed ff ff | 00 00 00 0c 00 00 00 00 |........|........|
|00002840| 03 f0 ff ff 00 00 00 58 | 00 4e 0f 24 00 00 00 00 |.......X|.N.$....|
|00002850| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00002860| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00002870| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
+--------+-------------------------+-------------------------+--------+--------+