 All about flooble | fun stuff | Get a free chatterbox | Free JavaScript | Avatars  perplexus dot info  Seven Multiple Muse (Posted on 2013-12-23) Fill up the the 20 empty boxes in the figure shown below, using the 10 base ten digits 0,1,2,3,4,5,6,7,8,9 each occurring exactly twice such that:

(a) Each horizontal number is a multiple of 7.
(b) Each vertical number is a multiple of 7.
(c) The total sum of all the horizontal and vertical numbers is the maximum of all such arrangements satisfying both (a) and (b).
```            +---+
|   |
+---+---+---+
|   |   |   |
+---+---+---+---+---+
|   |   |   |   |   |
+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+
|   |   |           |   |   |
+---+---+           +---+---+ ```
Note: As the figure shows, the bottom row should be considered as two 2-digit numbers rather than a single 4-digit number.

 See The Solution Submitted by K Sengupta No Rating Comments: ( Back to comment list | You must be logged in to post comments.) computer solution Comment 1 of 1

DECLARE SUB addOn (nbr#, offset#)
DEFDBL A-Z
CLEAR , , 25000

OPEN "7 mult muse.txt" FOR OUTPUT AS #2

DIM SHARED gr(5, 7), begend(13, 4), avail AS STRING, maxnbr, overtot, maxovertot
DATA 1,4,1,4
DATA 2,3,2,5
DATA 1,4,4,4
DATA 3,2,3,6
DATA 2,3,4,3
DATA 2,5,4,5
DATA 4,1,4,7
DATA 3,2,5,2
DATA 3,6,5,6
DATA 4,1,5,1
DATA 4,7,5,7
DATA 5,1,5,2
DATA 5,6,5,7

FOR i = 1 TO 13
READ r0, c0, r1, c1
IF i > 1 THEN
begend(i, 1) = r0
begend(i, 2) = c0
begend(i, 3) = r1
begend(i, 4) = c1
dr = SGN(r1 - r0): dc = SGN(c1 - c0)
r = r0: c = c0
WHILE r <= r1 AND c <= c1
gr(r, c) = -1
r = r + dr: c = c + dc
WEND
END IF
NEXT

avail = "0011223344556678899"
overtot = 7

gr(1, 4) = 7
addOn 2, 0

close

SUB addOn (nbr, offset)
r0 = begend(nbr, 1)
c0 = begend(nbr, 2)
r1 = begend(nbr, 3)
c1 = begend(nbr, 4)
dr = SGN(r1 - r0): dc = SGN(c1 - c0)
r = r0 + dr * offset: c = c0 + dc * offset

IF gr(r, c) = -1 THEN
IF offset = 0 THEN st = 1: ELSE st = 0
FOR v = st TO 9
vchar\$ = LTRIM\$(STR\$(v))
ix = INSTR(avail, vchar\$)
IF ix > 0 THEN
MID\$(avail, ix, 1) = " "
gr(r, c) = v

IF r = r1 AND c = c1 THEN
tot = 0
rx = r0: cx = c0
WHILE rx <= r1 AND cx <= c1
tot = 10 * tot + gr(rx, cx)
rx = rx + dr: cx = cx + dc
WEND
IF tot MOD 7 = 0 THEN
overtot = overtot + tot
IF nbr = 13 THEN
IF overtot >= maxovertot THEN
maxovertot = overtot
FOR rx = 1 TO 5
FOR cx = 1 TO 7
PRINT USING "##"; gr(rx, cx);
PRINT #2, USING "##"; gr(rx, cx);
NEXT
PRINT: PRINT #2,
NEXT
PRINT overtot
PRINT #2, overtot
END IF
ELSE
addOn nbr + 1, 0
END IF
overtot = overtot - tot
END IF
ELSE
addOn nbr, offset + 1
END IF

gr(r, c) = -1
MID\$(avail, ix, 1) = vchar\$
END IF
NEXT
ELSE
IF r = r1 AND c = c1 THEN
tot = 0
rx = r0: cx = c0
WHILE rx <= r1 AND cx <= c1
tot = 10 * tot + gr(rx, cx)
rx = rx + dr: cx = cx + dc
WEND
IF tot MOD 7 = 0 THEN
overtot = overtot + tot
IF nbr = 13 THEN
IF overtot >= maxovertot THEN
maxovertot = overtot
FOR rx = 1 TO 5
FOR cx = 1 TO 7
PRINT USING "##"; gr(rx, cx);
PRINT #2, USING "##"; gr(rx, cx);
NEXT
PRINT: PRINT #2,
NEXT
PRINT overtot
PRINT #2, overtot
END IF
ELSE
addOn nbr + 1, 0
END IF
overtot = overtot - tot
END IF
ELSE
addOn nbr, offset + 1
END IF

END IF
END SUB

finds as the last two entries (with therefore the largest total), these, with a grand total of 10,019,520 each (I've manually blanked out the extraneous zeros printed from grid locations not in the puzzle area):

`       7           3 4 3       2 7 6 0 1   9 9 8 2 8 0 5 1 4       5 6  10019520 `
`       7           3 4 3       2 7 6 0 8   9 9 8 2 1 0 5 1 4       5 6 `
` 10019520 `

 Posted by Charlie on 2013-12-23 23:28:37 Please log in:
 Login: Password: Remember me: Sign up! | Forgot password

 Search: Search body:
Forums (0)
Newest Problems
Random Problem
FAQ | About This Site
Site Statistics
New Comments (0)
Unsolved Problems
Top Rated Problems
This month's top
Most Commented On

Chatterbox:
Copyright © 2002 - 2021 by Animus Pactum Consulting. All rights reserved. Privacy Information