aboutsummaryrefslogtreecommitdiff
path: root/challenge-136/abigail/lua/ch-1.lua
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.be>2021-10-26 17:42:52 +0200
committerAbigail <abigail@abigail.be>2021-10-26 17:42:52 +0200
commit6f22a777308b07dcd433baf9ce525ba9dd95eedb (patch)
tree14289945baa80b5866d7c38f20a313dc2ae9df2c /challenge-136/abigail/lua/ch-1.lua
parent15deec24c8dc7e7b69a4bb59b8866075207c220e (diff)
downloadperlweeklychallenge-club-6f22a777308b07dcd433baf9ce525ba9dd95eedb.tar.gz
perlweeklychallenge-club-6f22a777308b07dcd433baf9ce525ba9dd95eedb.tar.bz2
perlweeklychallenge-club-6f22a777308b07dcd433baf9ce525ba9dd95eedb.zip
Use the same function to determine whether a number is a power of 2.
We now use the same algorithm (but implemented in different languages) to determine whether a number is a power of 2. This replaces the preprocessed powers of 2, and lookup tables.
Diffstat (limited to 'challenge-136/abigail/lua/ch-1.lua')
-rw-r--r--challenge-136/abigail/lua/ch-1.lua21
1 files changed, 10 insertions, 11 deletions
diff --git a/challenge-136/abigail/lua/ch-1.lua b/challenge-136/abigail/lua/ch-1.lua
index 1c3e149da6..44ea00f251 100644
--- a/challenge-136/abigail/lua/ch-1.lua
+++ b/challenge-136/abigail/lua/ch-1.lua
@@ -18,22 +18,21 @@ function gcd (a, b)
return gcd (b, a % b)
end
---
--- Precalculate all the relevant powers of 2. Note that in pre 5-3 lua
--- integers are doubles, and start losing precision at 2^53, so we go
--- up to 2^52.
---
-local power_of_2 = {}
-local power = 1
-for i = 1, 52 do
- power = power * 2
- power_of_2 [power] = 1
+function is_power_of_n (number, n)
+ if number < 1 then return false end
+ if number == 1 then return true end
+ if number % n > 1 then return false end
+ return (is_power_of_n (number / n, n))
end
+function is_power_of_2 (number)
+ return is_power_of_n (number, 2)
+end
for line in io . lines () do
local _, _, n, m = line : find ("([0-9]+)%s+([0-9]+)")
- if power_of_2 [gcd (tonumber (n), tonumber (m))] then
+ local r = gcd (tonumber (n), tonumber (m))
+ if r > 1 and is_power_of_2 (r) then
print (1)
else
print (0)