INSTALL @lib$ + "ARRAYLIB" REM Describe the puzzle as a set of simultaneous equations: REM a + b = 151 REM a - c = 40 REM -b + c + d = 0 REM e + f = 40 REM -c + f + g = 0 REM -d + g + h = 0 REM e - x = 11 REM f - y = 11 REM g - y = 4 REM h - z = 4 REM x - y + z = 0 REM So we have 11 equations in 11 unknowns. REM We can represent these equations as a matrix and a vector: DIM matrix(10,10), vector(10) matrix() = \ a, b, c, d, e, f, g, h, x, y, z \ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ \ 1, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, \ \ 0,-1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \ \ 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, \ \ 0, 0,-1, 0, 0, 1, 1, 0, 0, 0, 0, \ \ 0, 0, 0,-1, 0, 0, 1, 1, 0, 0, 0, \ \ 0, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, \ \ 0, 0, 0, 0, 0, 1, 0, 0, 0,-1, 0, \ \ 0, 0, 0, 0, 0, 0, 1, 0, 0,-1, 0, \ \ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,-1, \ \ 0, 0, 0, 0, 0, 0, 0, 0, 1,-1, 1 vector() = 151, 40, 0, 40, 0, 0, 11, 11, 4, 4, 0 REM Now solve the simultaneous equations: PROC_invert(matrix()) vector() = matrix().vector() PRINT "X = " ; vector(8) PRINT "Y = " ; vector(9) PRINT "Z = " ; vector(10)