diff options
Diffstat (limited to 'challenge-147/roger-bell-west/lua')
| -rwxr-xr-x | challenge-147/roger-bell-west/lua/ch-1.lua | 101 | ||||
| -rwxr-xr-x | challenge-147/roger-bell-west/lua/ch-2.lua | 38 |
2 files changed, 139 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("") diff --git a/challenge-147/roger-bell-west/lua/ch-2.lua b/challenge-147/roger-bell-west/lua/ch-2.lua new file mode 100755 index 0000000000..cbe31d0ed8 --- /dev/null +++ b/challenge-147/roger-bell-west/lua/ch-2.lua @@ -0,0 +1,38 @@ +#! /usr/bin/lua + +function pentagon(n) + return math.floor(n*(3*n-1)/2) +end + +function pentpair() + fpent={} + rpent={} + mx=0 + a=1 + while 1 do + while mx < a do + mx = mx + 1 + table.insert(fpent,pentagon(mx)) + rpent[fpent[mx]]=mx + end + for b = 1,a do + d=fpent[a]-fpent[b] + if rpent[d] ~= nil then + s=fpent[a]+fpent[b] + while s > fpent[mx] do + mx = mx + 1 + table.insert(fpent,pentagon(mx)) + rpent[fpent[mx]]=mx + end + if rpent[s] ~= nil then + print(string.format("P(%d) + P(%d) = %d + %d = %d = P(%d)",a,b,fpent[a],fpent[b],s,rpent[s])) + print(string.format("P(%d) - P(%d) = %d - %d = %d = P(%d)",a,b,fpent[a],fpent[b],d,rpent[d])) + os.exit(0) + end + end + end + a = a + 1 + end +end + +pentpair() |
