Guest User

Untitled

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