Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1 #!/usr/bin/python
- 2
- 3
- 4 def generate_numbers(allowed_digits, number=[]):
- 5 """ Takes number represented as an array and generate all possible numbers with the allowed digits permutations """
- 6 for i in allowed_digits:
- 7 new_num = number[:] # Copy the given array representing number
- 8 new_num.append(i)
- 9 new_allowed_digits = allowed_digits[:] # Copy the allowed digits
- 10 new_allowed_digits.remove(i)
- 11 for num in generate_numbers(number=new_num, allowed_digits=new_allowed_digits):
- 12 yield num
- 13
- 14 if not allowed_digits:
- 15 yield number
- 16
- 17
- 18 def array_of_digits_to_int(digits, n=None):
- 19 s = ""
- 20 if not n:
- 21 for i in digits:
- 22 s+=str(i)
- 23 else:
- 24 for i in digits[:n]:
- 25 s+=str(i)
- 26
- 27 return int(s)
- 28
- 29
- 30 def check_div(num, n):
- 31 int_num = array_of_digits_to_int(num, n)
- 32 if int_num % n == 0:
- 33 return True
- 34 return False
- 35
- 36
- 37 def check_num(num):
- 38 """.
- 39 Check that for any n < size(num) the number composed of n first digits of original number
- 40 can be divided by n
- 41 """
- 42 for n in range(1, len(num) + 1):
- 43 if not check_div(num, n):
- 44 return False
- 45 return True
- 46
- 47 def find_numbers():
- 48 digits = range(1,10) # Numbers 1 to 9 inclusively.
- 49 for num in generate_numbers(digits):
- 50 if check_num(num):
- 51 print array_of_digits_to_int(num)
- 52 ....
- 53 if __name__ == '__main__':
- 54 find_numbers()
Add Comment
Please, Sign In to add comment