aboutsummaryrefslogtreecommitdiff
path: root/challenge-003/paulo-custodio/python/ch-1.py
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-003/paulo-custodio/python/ch-1.py')
-rw-r--r--challenge-003/paulo-custodio/python/ch-1.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/challenge-003/paulo-custodio/python/ch-1.py b/challenge-003/paulo-custodio/python/ch-1.py
new file mode 100644
index 0000000000..413228bd57
--- /dev/null
+++ b/challenge-003/paulo-custodio/python/ch-1.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+
+# Challenge 003
+#
+# Challenge #1
+# Create a script to generate 5-smooth numbers, whose prime divisors are less
+# or equal to 5. They are also called Hamming/Regular/Ugly numbers. For more
+# information, please check this wikipedia.
+
+import sys
+
+# return an iterator to generate the sequence
+# the sequence is a merge of all multiples of 2, 3 and 5
+def hamming_gen():
+ seq = [[1], [1], [1]]
+ base = [2, 3, 5]
+
+ while True:
+ # get the smallest of the multiples
+ n = min(seq[0][0], seq[1][0], seq[2][0])
+
+ for i in range(0, 3):
+ # shift used multiples
+ if seq[i][0] == n:
+ seq[i].pop(0)
+
+ # push next multiple
+ seq[i].append(n*base[i])
+
+ yield n
+
+
+# main
+iter = hamming_gen()
+for i in range(0, int(sys.argv[1])):
+ print(next(iter))