Tupper's self-referential formula: Difference between revisions
Content added Content deleted
(Fencepost error fixed) |
(Added Lua) |
||
Line 152: | Line 152: | ||
[[File:Tupper2.png|center]] |
[[File:Tupper2.png|center]] |
||
=={{header|Lua}}== |
|||
Tested with Lua 5.4.5 |
|||
{{Trans|Algol 68}} |
|||
Using Eduardo Bart's lua-bint pure Lua big integer library https://github.com/edubart/lua-bint.<br> |
|||
The precision of the big integers must be specified in bits as a parameter of the require. |
|||
<syntaxhighlight lang="lua"> |
|||
do --[[ plot Tupper's self-referential formula |
|||
need to find x, y such that: |
|||
1/2 < floor( mod( (y/17)*2^ - ( 17x - mod(y,17) ), 2 ) ) |
|||
where x in 0..106, y in k..k+16 |
|||
--]] |
|||
local bint = require 'bint'(2048) -- need around 600 digits |
|||
local k = bint.fromstring( "960939379918958884971672962127852754715004339660129306651505" .. |
|||
"519271702802395266424689642842174350718121267153782770623355" .. |
|||
"993237280874144307891325963941337723487857735749823926629715" .. |
|||
"517173716995165232890538221612403238855866184013235585136048" .. |
|||
"828693337902491454229288667081096184496091705183454067827731" .. |
|||
"551705405381627380967602565625016981482083418783163849115590" .. |
|||
"225610003652351370343874461848378737238198224849863465033159" .. |
|||
"410054974700593138339226497249461751545728366702369745461014" .. |
|||
"655997933798537483143786841806593422227898388722980000748404" .. |
|||
"719" ) |
|||
local kMod17 = bint.tointeger( k % 17 ) |
|||
local b17 = bint.frominteger( 17 ) |
|||
local b2 = bint.frominteger( 2 ) |
|||
for yDelta = 0, 16 do |
|||
for x = 106, 0, -1 do |
|||
local powerOf2 = - ( 17 * x ) - ( kMod17 + yDelta ) % 17 |
|||
-- if powerOf2 = 0, then ( v * 2 ^ powerOf2 ) mod 2 = v mod 2 |
|||
-- if powerOf2 > 0, then ( v * 2 ^ powerOf2 ) mod 2 = 0 |
|||
if powerOf2 > 0 then |
|||
io.write( " " ) |
|||
else |
|||
local v = ( k + bint.frominteger( yDelta ) ) // b17 |
|||
if powerOf2 < 0 then |
|||
v = v // bint.ipow( b2, bint.frominteger( - powerOf2 ) ) |
|||
end |
|||
v = v % 2 |
|||
io.write( ( bint.eq( v, 0 ) and " " ) or "#" ) |
|||
end |
|||
end |
|||
io.write( "\n" ) |
|||
end |
|||
end |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
Same as Algol 68. |
|||
=={{header|Phix}}== |
=={{header|Phix}}== |