# TupperGen.frink

``` // 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[]     ```