TupperGen.frink

Download or view TupperGen.frink in plain text format


// This program was part of an April Fool's joke that I posted in April 2011.
// see https://futureboy.us/temp/pigraph.html
//
// This is an implementation of Tupper's "self-referential" formula in Frink.
// See:
//   http://en.wikipedia.org/wiki/Tupper%27s_self-referential_formula
//
// This program reads in a (black and white) graphic from an image file
// and converts it to a number that can be plotted with Tupper's formula,
// appropriately modified for width and height.  Note that the equation I use
// below is actually a simplified version of Tupper's formula that just plots
// each pixel directly.

f = new image["file:copyright.png"]

width = f.getWidth[]
height = f.getHeight[]

println["image is $width x $height"]

num = 0
for x = width-1 to 0 step -1
   for y = 0 to height-1
   {
      num = num * 2
      if f.getPixelGrayInt[x,y] < 128
         num = num + 1
   }
num = num*height
   
println["n = $num"]
println["Graph the points"]
println["   0 <= x < $width,"]
println["   n <= y < n+$height,"]
println[" where"]
println[" 1/2 > floor(mod(floor(y/$height)*2^(-$height*floor(x)-mod(floor(y), $height)),2))"]


// Now graph the number again just to make sure everything went right.
g = new graphics
for x=0 to width-1
   for y = num to num+height-1
   {
//      v = floor[(floor[y/height] 2^(-height floor[x] - floor[y] mod height)) mod 2]
        v = ((y/height) * 2^(-height x - (y mod height))) mod 2
      if v >= 1
         g.fillRectCenter[x,-y,1,1]
   }

g.show[]
   


Download or view TupperGen.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 19944 days, 19 hours, 26 minutes ago.