PDA

View Full Version : Non duplicate digits and arrangement puzzle


K Sengupta
Jun10-09, 03:04 PM
B is a positive 8-digit base ten integer of the form PQRSTUVW that contains precisely 8 distinct digits from 1 to 9, and satisfies all of the following conditions:

(i) PQ is divisible by 2.
(ii) PQR is divisible by 3.
(iii) PQRS is divisible by 4.
(iv) PQRST is divisible by 5.
(v) PQRSTU is divisible by 6.
(vi) PQRSTUV is divisible by 7.
(vii) PQRSTUVW is divisible by 8.

Determine all possible value(s) that B can assume.

davee123
Jun11-09, 12:00 PM
Quasi-brute force...

38165472

DaveE

Edgardo
Aug8-09, 11:51 AM
Using divisibility rules and after 6 pages of handwriting:
PQRSTUVW = 38165472

mXSCNT
Aug8-09, 12:45 PM
It was a fun little programming exercise to do it in an efficient way:
12965408
30925864
36925840
38165472
72965480
78320416
78920456
80165472
92765408
my Python:

def finddigits2():
def step(prefix,divisible):
nextprefix = (prefix*10-1)/divisible*divisible
while nextprefix < (prefix+1)*10-divisible:
nextprefix += divisible
if divisible < 8:
step(nextprefix,divisible+1)
else:
if len(set(str(nextprefix))) == 8:
print nextprefix
for f in range(1,10):
step(f,2)

Edgardo
Aug8-09, 04:09 PM
Hey mXSCNT,

your program looks compact. Can you explain it a little bit especially how you dealt with the digits being distinct?

mXSCNT
Aug8-09, 04:54 PM
I dealt with that in this line:
if len(set(str(nextprefix))) == 8:

str(nextprefix) writes the prefix as a string, such as 12965408 becomes "12965408". set(str(nextprefix)) turns the individual characters in the string into a set (ignoring duplicates) so in this case that would be set(['1','2','9','6','5','4','0','8']). len(set(str(nextprefix))) == 8 checks that the "length" of the set (the number of elements in the set) is 8.