aboutsummaryrefslogtreecommitdiff
path: root/challenge-147/roger-bell-west/lua/ch-1.lua
diff options
context:
space:
mode:
authordrbaggy <js5@sanger.ac.uk>2022-01-11 06:16:46 +0000
committerdrbaggy <js5@sanger.ac.uk>2022-01-11 06:16:46 +0000
commitf7d69a81862d0ff686fefd288191c26f2e153803 (patch)
tree5a584a9b56fd79ea806c48cfcf3175ee05540cb3 /challenge-147/roger-bell-west/lua/ch-1.lua
parent80a1b64153ca8fcde1b2f59b98fd21ecf0ac716a (diff)
parentd5aef342008aa2a96e8085194e3a3dc6975a723b (diff)
downloadperlweeklychallenge-club-f7d69a81862d0ff686fefd288191c26f2e153803.tar.gz
perlweeklychallenge-club-f7d69a81862d0ff686fefd288191c26f2e153803.tar.bz2
perlweeklychallenge-club-f7d69a81862d0ff686fefd288191c26f2e153803.zip
vi ch-1.plMerge remote-tracking branch 'upstream/master'
Diffstat (limited to 'challenge-147/roger-bell-west/lua/ch-1.lua')
-rwxr-xr-xchallenge-147/roger-bell-west/lua/ch-1.lua101
1 files changed, 101 insertions, 0 deletions
diff --git a/challenge-147/roger-bell-west/lua/ch-1.lua b/challenge-147/roger-bell-west/lua/ch-1.lua
new file mode 100755
index 0000000000..c2e65f23b0
--- /dev/null
+++ b/challenge-147/roger-bell-west/lua/ch-1.lua
@@ -0,0 +1,101 @@
+#! /usr/bin/lua
+
+-- by Michael Anderson at
+-- https://stackoverflow.com/questions/8722620/comparing-two-index-tables-by-index-value-in-lua
+function recursive_compare(t1,t2)
+ -- Use usual comparison first.
+ if t1==t2 then return true end
+ -- We only support non-default behavior for tables
+ if (type(t1)~="table") then return false end
+ -- They better have the same metatables
+ local mt1 = getmetatable(t1)
+ local mt2 = getmetatable(t2)
+ if( not recursive_compare(mt1,mt2) ) then return false end
+
+ -- Check each key-value pair
+ -- We have to do this both ways in case we miss some.
+ -- TODO: Could probably be smarter and not check those we've
+ -- already checked though!
+ for k1,v1 in pairs(t1) do
+ local v2 = t2[k1]
+ if( not recursive_compare(v1,v2) ) then return false end
+ end
+ for k2,v2 in pairs(t2) do
+ local v1 = t1[k2]
+ if( not recursive_compare(v1,v2) ) then return false end
+ end
+
+ return true
+end
+
+function genprimes(mx)
+ local primesh = {}
+ for i = 2, 3 do
+ primesh[i] = true
+ end
+ for i = 6, mx+1, 6 do
+ for j = i-1, i+1, 2 do
+ if j <= mx then
+ primesh[j]=true
+ end
+ end
+ end
+ local q={2,3,5,7}
+ local p=table.remove(q,1)
+ local mr=math.floor(math.sqrt(mx))
+ while p <= mr do
+ if primesh[p] ~= nil then
+ for i = p*p,mx,p do
+ primesh[i] = nil
+ end
+ end
+ if #q < 2 then
+ table.insert(q,q[#q]+4)
+ table.insert(q,q[#q]+2)
+ end
+ p=table.remove(q,1)
+ end
+ local primes = {}
+ for k,v in pairs(primesh) do
+ table.insert(primes,k)
+ end
+ table.sort(primes)
+ return primes
+end
+
+function ltruncprimes(count)
+ out={}
+ lt=0
+ p={}
+ pp={}
+ for i,v in ipairs(genprimes(500)) do
+ s=tostring(v)
+ table.insert(p,s)
+ pp[s]=true
+ end
+ for j,pc in ipairs(p) do
+ l=#pc
+ c=true
+ for i = 2,l do
+ if pp[string.sub(pc,i)] == nil then
+ c=false
+ break
+ end
+ end
+ if c then
+ table.insert(out,tonumber(pc))
+ lt = lt + 1
+ if lt >= count then
+ break
+ end
+ end
+ end
+ return out
+end
+
+if recursive_compare(ltruncprimes(20),{2, 3, 5, 7, 13, 17, 23, 37, 43, 47, 53, 67, 73, 83, 97, 113, 137, 167, 173, 197}) then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")