aboutsummaryrefslogtreecommitdiff
path: root/challenge-003/paulo-custodio/lua/ch-1.lua
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-003/paulo-custodio/lua/ch-1.lua')
-rw-r--r--challenge-003/paulo-custodio/lua/ch-1.lua36
1 files changed, 36 insertions, 0 deletions
diff --git a/challenge-003/paulo-custodio/lua/ch-1.lua b/challenge-003/paulo-custodio/lua/ch-1.lua
new file mode 100644
index 0000000000..525469191a
--- /dev/null
+++ b/challenge-003/paulo-custodio/lua/ch-1.lua
@@ -0,0 +1,36 @@
+#!/usr/bin/env lua
+
+--[[
+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.
+--]]
+
+-- sequence is a merge of all multiples of 2, 3 and 5
+seq2 = {1}
+seq3 = {1}
+seq5 = {1}
+
+function next_hamming()
+ -- get the smallest of the queue heads
+ n = math.min(seq2[1], seq3[1], seq5[1])
+
+ -- shift used multiples
+ if n == seq2[1] then table.remove(seq2, 1); end
+ if n == seq3[1] then table.remove(seq3, 1); end
+ if n == seq5[1] then table.remove(seq5, 1); end
+
+ -- push next multiples
+ table.insert(seq2, 2*n)
+ table.insert(seq3, 3*n)
+ table.insert(seq5, 5*n)
+
+ return n
+end
+
+for i=1,tonumber(arg[1]) do
+ io.write(next_hamming(), "\n")
+end