[math-fun] Booby-trapped recursive codes
One of the coolest things I worked with in high school was the IBM IBSYS "MAP" (Macro Assembly Program), which ran on the 709/7090/704/7040. Fletcher utilized this macro facility to solve a combinatorial problem; as I understand, the generated assembly code itself was thrown away, because all of the computation was done within the macro expansion phase! Fletcher, John G. "A program to solve the pentomino problem by the recursive use of macros". CACM 8, 10 (Oct. 1965), 621-3. http://portal.acm.org/citation.cfm?id=365654&dl=GUIDE&coll=GUIDE&CFID=626489... Similar hacks have been used with the preprocessor for the C language. These hacks are far more difficult with the C preprocessor due to the constraints installed to prevent looping & stack overflows. Nevertheless, some pretty cool things can still be done. See the "Obfuscated C" home page for more info: http://www.ioccc.org/ I noticed while Googling that you can still run 7090 code on your Windoze machine, should you wish to do so: http://www.piercefuller.com/oldibm-shadow/709x.html http://www.cozx.com/~dpitts/ibm7090.html At 11:53 AM 11/12/2009, Fred lunnon wrote:
My PDF viewer did cope with the PostScript original --- after several minutes of frantic computation and memory-swapping, and the production of a 3 Mbyte file!
Many years ago, I wrote similarly booby-trapped recursive PostScript for Penrose kites-and-darts tilings. [This improved upon a more primitive earlier program, which had itself been regarded with such awe by the mainframe maintenance team that they used it to test the flatbed plotter.]
The program achieved some notoriety when a firm of toilet-paper manufacturers employed it to decorate their product. Sir Roger Penrose was not amused, and threatened to take them to court. I have no recollection of how the case was finally resolved, but it did lead at the time to a certain amount of unkind ribaldry at his expense, in connection with some rather controversial cosmological speculation.
Fred Lunnon
On 11/12/09, Mike Stay <metaweta@gmail.com> wrote:
That's much better; my pdf viewer didn't render anything but the three circles.
On Thu, Nov 12, 2009 at 10:16 AM, Henry Baker <hbaker1@pipeline.com> wrote:
It is indeed a fractal. Look more closely -- there are individual dots.
Try printing this Postscript version, which actually computes the fractal inside your printer using embedded Postscript code:
http://home.pipeline.com/~hbaker1/sigplannotices/sigcol07.ps.gz
(".gz" means "gzip"; I believe that "7-zip" can ungzip this file for you.
There is a small program called "PrintFile" which can send Postscript files on Windows to your Postscript printer.
If worst comes to worst, install Ghostscript on your computer & look at the output that way.
At 10:06 AM 11/12/2009, Mike Stay wrote:
Figure three seems wrong in this rendering--shouldn't it be a fractal?
On Thu, Nov 12, 2009 at 9:47 AM, Henry Baker <hbaker1@pipeline.com> wrote:
That was my paper!
http://home.pipeline.com/~hbaker1/sigplannotices/sigcol07.pdf
At 09:19 AM 11/12/2009, mcintosh@servidor.unam.mx wrote:
Re: [math-fun] Cube root of a complex number
somewhat tangential to the original question, Möbius transformations map three points into three points. So, why not map the three roots of the cubic into the three complex roots of unity? You only get to use the coefficients of the polynomial.
I recall a paper in an ACM journal humorously dated March 32 some years ago where someond did that; I don't remember if the solution was relevant to the present inquiry.
-- Mike Stay - metaweta@gmail.com http://math.ucr.edu/~mike http://reperiendi.wordpress.com
-- Mike Stay - metaweta@gmail.com http://math.ucr.edu/~mike http://reperiendi.wordpress.com
I entered the obfuscated C contest one year with a program that computed a prime sieve in an incredibly slow and non-intuitive manner. I don't think anyone ever figured out what it did ---- it was so slow and ugly that no one would look at it. Hilarie
On 12 Nov 2009 at 14:15, Hilarie Orman wrote:
I entered the obfuscated C contest one year with a program that computed a prime sieve in an incredibly slow and non-intuitive manner.
Way back when, I hacked up a macro set for MIDAS on our PDP-1 that generated primes at assemble-time: just spent forever assembling occcasionally printing out a # on the console. didn't do it with a sieve, though: brute force.. tried dividing by all of the primes up to 1/2 the number [I seem to recall that I tried making that sqrt(number) but that actually made the macros *slower*]. [as a side note, in the course of hacking with this I discovered a long- latent very obscure bug in Bill Mann's macro-garbage-collection code in the assembler]. /Bernie\ -- Bernie Cosell Fantasy Farm Fibers mailto:bernie@fantasyfarm.com Pearisburg, VA --> Too many people, too few sheep <--
I entered the obfuscated C contest one year with a program that computed a prime sieve in an incredibly slow and non-intuitive manner. I don't think anyone ever figured out what it did ---- it was so slow and ugly that no one would look at it.
Hilarie
____________________________________________Ah, an obbortunity to refustigate with this Mathematica malpractice:
OddPrimeQ[n_]:= Block[{$RecursionLimit=Infinity},n+1==Odd4[(n-1)/2,0,4]] Odd4[n_,t_,k_]:=If[k==0,KroneckerDelta[0,n], If[t>n,0,Odd4[n-t,0,k-1]+Odd4[n,1/2+t+Sqrt[2*t+1/4],k]]] Absolutely useless hint: OddPrimeQ[n_]:= Block[{$RecursionLimit=Infinity},n^3+1==Odd4[n-1,0,8]] gets the same answers, only more slowly. The only Funster to come close to explaining this was Joshua Zucker, who stopped short of totally cooking it, but correctly indicated the final steps. (Marc LeBrun is disqualified--he helped misbeget it.) --rwg For a modicum of speed: Odd4[n_,t_,k_]:=Odd4[n,t,k]= If[k==0,KroneckerDelta[0,n], If[t>n,0,Odd4[n-t,0,k-1]+Odd4[n,1/2+t+Sqrt[2*t+1/4],k]]] I don't know whether OddPrimeQ[n_]:=Block[{$RecursionLimit=Infinity}, (Odd4[(n-1)/2,0,4]-1)^3==Odd4[n-1,0,8]-1] can give a false positive. It's too slow to test beyond a few thousand. But I see how, with Macsyma, to test its conjecture out to a few million. DAZ> it was a *positive* "No". As opposed to a positive, definite "No". DDyer>I've had waxy paper ... burst into flames while the tamale was still cold. Isn't "cold tamale" an oxymoron?
I would like to nominate Goedel as the world champion of obfuscated code, with Matiyasevich (of Hilbert's Tenth Problem fame) as the runner-up. I think that we can safely retire both their player numbers. BTW, has anyone actually gone through all the gory details of implementing Goedel's programming style? There was a good Scientific American article on Hilbert's Tenth Problem that gave actual numbers for real encodings. At 08:48 PM 11/13/2009, rwg@sdf.lonestar.org wrote:
I entered the obfuscated C contest one year with a program that computed a prime sieve in an incredibly slow and non-intuitive manner. I don't think anyone ever figured out what it did ---- it was so slow and ugly that no one would look at it.
Hilarie
____________________________________________Ah, an obbortunity to refustigate with this Mathematica malpractice:
OddPrimeQ[n_]:= Block[{$RecursionLimit=Infinity},n+1==Odd4[(n-1)/2,0,4]]
Odd4[n_,t_,k_]:=If[k==0,KroneckerDelta[0,n], If[t>n,0,Odd4[n-t,0,k-1]+Odd4[n,1/2+t+Sqrt[2*t+1/4],k]]]
Absolutely useless hint:
OddPrimeQ[n_]:= Block[{$RecursionLimit=Infinity},n^3+1==Odd4[n-1,0,8]]
gets the same answers, only more slowly.
The only Funster to come close to explaining this was Joshua Zucker, who stopped short of totally cooking it, but correctly indicated the final steps. (Marc LeBrun is disqualified--he helped misbeget it.) --rwg For a modicum of speed: Odd4[n_,t_,k_]:=Odd4[n,t,k]= If[k==0,KroneckerDelta[0,n], If[t>n,0,Odd4[n-t,0,k-1]+Odd4[n,1/2+t+Sqrt[2*t+1/4],k]]]
I don't know whether
OddPrimeQ[n_]:=Block[{$RecursionLimit=Infinity}, (Odd4[(n-1)/2,0,4]-1)^3==Odd4[n-1,0,8]-1]
can give a false positive. It's too slow to test beyond a few thousand. But I see how, with Macsyma, to test its conjecture out to a few million.
DAZ> it was a *positive* "No".
As opposed to a positive, definite "No".
DDyer>I've had waxy paper ... burst into flames while the tamale was still cold.
Isn't "cold tamale" an oxymoron?
Greg Chaitin does this in his book "Algorithmic Information Theory" http://www.umcs.maine.edu/~chaitin/cup.pdf using a version of pure LISP. Victor On Sat, Nov 14, 2009 at 8:23 AM, Henry Baker <hbaker1@pipeline.com> wrote:
I would like to nominate Goedel as the world champion of obfuscated code, with Matiyasevich (of Hilbert's Tenth Problem fame) as the runner-up. I think that we can safely retire both their player numbers.
BTW, has anyone actually gone through all the gory details of implementing Goedel's programming style?
There was a good Scientific American article on Hilbert's Tenth Problem that gave actual numbers for real encodings.
At 08:48 PM 11/13/2009, rwg@sdf.lonestar.org wrote:
I entered the obfuscated C contest one year with a program that computed a prime sieve in an incredibly slow and non-intuitive manner. I don't think anyone ever figured out what it did ---- it was so slow and ugly that no one would look at it.
Hilarie
____________________________________________Ah, an obbortunity to refustigate with this Mathematica malpractice:
OddPrimeQ[n_]:= Block[{$RecursionLimit=Infinity},n+1==Odd4[(n-1)/2,0,4]]
Odd4[n_,t_,k_]:=If[k==0,KroneckerDelta[0,n], If[t>n,0,Odd4[n-t,0,k-1]+Odd4[n,1/2+t+Sqrt[2*t+1/4],k]]]
Absolutely useless hint:
OddPrimeQ[n_]:= Block[{$RecursionLimit=Infinity},n^3+1==Odd4[n-1,0,8]]
gets the same answers, only more slowly.
The only Funster to come close to explaining this was Joshua Zucker, who stopped short of totally cooking it, but correctly indicated the final steps. (Marc LeBrun is disqualified--he helped misbeget it.) --rwg For a modicum of speed: Odd4[n_,t_,k_]:=Odd4[n,t,k]= If[k==0,KroneckerDelta[0,n], If[t>n,0,Odd4[n-t,0,k-1]+Odd4[n,1/2+t+Sqrt[2*t+1/4],k]]]
I don't know whether
OddPrimeQ[n_]:=Block[{$RecursionLimit=Infinity}, (Odd4[(n-1)/2,0,4]-1)^3==Odd4[n-1,0,8]-1]
can give a false positive. It's too slow to test beyond a few thousand. But I see how, with Macsyma, to test its conjecture out to a few million.
DAZ> it was a *positive* "No".
As opposed to a positive, definite "No".
DDyer>I've had waxy paper ... burst into flames while the tamale was still cold.
Isn't "cold tamale" an oxymoron?
_______________________________________________ math-fun mailing list math-fun@mailman.xmission.com http://mailman.xmission.com/cgi-bin/mailman/listinfo/math-fun
John Tromp does it for Binary Lambda Calculus here: http://homepages.cwi.nl/~tromp/cl/cl.html On Sat, Nov 14, 2009 at 6:00 AM, victor miller <victorsmiller@gmail.com> wrote:
Greg Chaitin does this in his book "Algorithmic Information Theory" http://www.umcs.maine.edu/~chaitin/cup.pdf using a version of pure LISP.
Victor
On Sat, Nov 14, 2009 at 8:23 AM, Henry Baker <hbaker1@pipeline.com> wrote:
I would like to nominate Goedel as the world champion of obfuscated code, with Matiyasevich (of Hilbert's Tenth Problem fame) as the runner-up. I think that we can safely retire both their player numbers.
BTW, has anyone actually gone through all the gory details of implementing Goedel's programming style?
There was a good Scientific American article on Hilbert's Tenth Problem that gave actual numbers for real encodings.
At 08:48 PM 11/13/2009, rwg@sdf.lonestar.org wrote:
I entered the obfuscated C contest one year with a program that computed a prime sieve in an incredibly slow and non-intuitive manner. I don't think anyone ever figured out what it did ---- it was so slow and ugly that no one would look at it.
Hilarie
____________________________________________Ah, an obbortunity to refustigate with this Mathematica malpractice:
OddPrimeQ[n_]:= Block[{$RecursionLimit=Infinity},n+1==Odd4[(n-1)/2,0,4]]
Odd4[n_,t_,k_]:=If[k==0,KroneckerDelta[0,n], If[t>n,0,Odd4[n-t,0,k-1]+Odd4[n,1/2+t+Sqrt[2*t+1/4],k]]]
Absolutely useless hint:
OddPrimeQ[n_]:= Block[{$RecursionLimit=Infinity},n^3+1==Odd4[n-1,0,8]]
gets the same answers, only more slowly.
The only Funster to come close to explaining this was Joshua Zucker, who stopped short of totally cooking it, but correctly indicated the final steps. (Marc LeBrun is disqualified--he helped misbeget it.) --rwg For a modicum of speed: Odd4[n_,t_,k_]:=Odd4[n,t,k]= If[k==0,KroneckerDelta[0,n], If[t>n,0,Odd4[n-t,0,k-1]+Odd4[n,1/2+t+Sqrt[2*t+1/4],k]]]
I don't know whether
OddPrimeQ[n_]:=Block[{$RecursionLimit=Infinity}, (Odd4[(n-1)/2,0,4]-1)^3==Odd4[n-1,0,8]-1]
can give a false positive. It's too slow to test beyond a few thousand. But I see how, with Macsyma, to test its conjecture out to a few million.
DAZ> it was a *positive* "No".
As opposed to a positive, definite "No".
DDyer>I've had waxy paper ... burst into flames while the tamale was still cold.
Isn't "cold tamale" an oxymoron?
_______________________________________________ math-fun mailing list math-fun@mailman.xmission.com http://mailman.xmission.com/cgi-bin/mailman/listinfo/math-fun
_______________________________________________ math-fun mailing list math-fun@mailman.xmission.com http://mailman.xmission.com/cgi-bin/mailman/listinfo/math-fun
-- Mike Stay - metaweta@gmail.com http://math.ucr.edu/~mike http://reperiendi.wordpress.com
Bill Gosper wrote:
Ah, an obbortunity to refustigate with this Mathematica malpractice:
OddPrimeQ[n_]:= Block[{$RecursionLimit=Infinity},n+1==Odd4[(n-1)/2,0,4]]
Odd4[n_,t_,k_]:=If[k==0,KroneckerDelta[0,n], If[t>n,0,Odd4[n-t,0,k-1]+Odd4[n,1/2+t+Sqrt[2*t+1/4],k]]]
It's not so bad. (I mean, not so difficult to see how it works. Of course it's terrible when considered as a primality test.) ... SPOILER SPACE ... ... SPOILER SPACE ... ... SPOILER SPACE ... ... SPOILER SPACE ... ... SPOILER SPACE ... ... SPOILER SPACE ... ... SPOILER SPACE ... ... SPOILER SPACE ... ... SPOILER SPACE ... ... SPOILER SPACE ... ... SPOILER SPACE ... ... SPOILER SPACE ... ... SPOILER SPACE ... ... SPOILER SPACE ... Odd4[n,t,k] is the number of partitions of n into k parts chosen from {0,1,3,6,10,15,...}. So the crucial theorem (assuming it to be one) is: The number of ways to write (n-1)/2 = t+t+t+t where each t is a triangular number (0 included) is n+1 iff n is an odd prime. Triangular numbers are n(n+1)/2 = [(n+1/2)^2-1/4]/2, so this is the same as: The number of ways to write (n-1)/2 = (sum of four odd squares)/8 - 1/2 is n+1 iff n is an odd prime or, rearranging a bit: The number of ways to write 4n = sum of four odd squares is n+1 iff n is an odd prime. Now, the sum of four odd squares is always 4 (mod 8), so if n is even then the number of such representations is 0, and n+1 isn't, so all is as it should be when n is even. What about odd n? Ah, well, it turns out that Lagrange proved this (note: I didn't know this beforehand, but once we've got this far we're in "if true then surely already well known" territory): 8n+4 is the sum of four odd squares in exactly sigma(2n+1) ways, where sigma is the sum-of-divisors function. In other words: if n is odd then the number of ways to write 4n as the sum of four odd squares is sigma(n). Which means all we need to show is sigma(n) = n+1 <==> n prime, which is trivial. -- g
A partial proof sketch for Gosper's conjectural obfuscated prime test. Gosper's first code is checking if the number of representations of (N-1)/2 as the sum of 4 triangular numbers is N+1. The second code is checking if the number of representations of N-1 as the sum of 8 triangular numbers is N^3+1. The open conjucture is whether (s4t((N-1)/2)-1)^3 = s8t(N-1)-1 implies that N is prime. As another poster has already noted, we can convert sum-of-triangle questions into sum-of-odd-square questions: Multiply each triangluar number by 8 and add 1. triangle = K(K+1)/2; times 8, plus 1 -> 4K^2 + 4K + 1 = (2K+1)^2. So s4t((N-1)/2) also is the number of representations of 4N as the sum of 4 odd squares, and s8t(N-1) is the number of representations of 8N as the sum of 8 odd squares. Gosper's prime test is asking if s4os(4N) = N+1, and if s8os(8N) = N^3+1, and (conjecturally) if (s4os(4N)-1)^3 = s8os(8N)-1. Theorem 386 of Hardy & Wright gives the number of representations of X as the sum of 4 squares s4s(X) = 8 * (sum of divisors d of X, excluding 4|d), but they count the squares of -k and k as distinct. Gosper's s4t & s8t, and my s4os & s8os, don't double count -k and k, so corrections of 2^4 and 2^8 are needed wrt the H&W s4s and s8s. For 8 squares, H&W states s8s(X) = 16 * (-1)^X * sum ((-1)^d * d^3) over d|X. Some versions of s4s and s8s are multiplicative functions. If we make the guess that, when N is odd, s4os(4N) = sigma(N) = sum of divisors of N, and s8os(8N) = sigma_3(N) = sum of cubes of divisors of N, and recall that sigma & sigma_3 are both multiplicative functions, then Gosper's conjectural test follows: If N is an odd composite, sigma(N)-1 is the sum of all the divisors of N>1, including at least one divisor between 1 and N; while sigma_3(N)-1 is the sum of the cubes of all the divisors of N>1. The cube of the LHS includes the cubes of all the individual terms (divisors of N>1), plus cross terms. So the LHS equals or exceeds the RHS, with equality only when there are no cross terms. This is just when N has no divisors between 1 and N, i.e., when N is prime. Rich ------------- Quoting rwg@sdf.lonestar.org:
I entered the obfuscated C contest one year with a program that computed a prime sieve in an incredibly slow and non-intuitive manner. I don't think anyone ever figured out what it did ---- it was so slow and ugly that no one would look at it.
Hilarie
____________________________________________Ah, an obbortunity to refustigate with this Mathematica malpractice:
OddPrimeQ[n_]:= Block[{$RecursionLimit=Infinity},n+1==Odd4[(n-1)/2,0,4]]
Odd4[n_,t_,k_]:=If[k==0,KroneckerDelta[0,n], If[t>n,0,Odd4[n-t,0,k-1]+Odd4[n,1/2+t+Sqrt[2*t+1/4],k]]]
Absolutely useless hint:
OddPrimeQ[n_]:= Block[{$RecursionLimit=Infinity},n^3+1==Odd4[n-1,0,8]]
gets the same answers, only more slowly.
The only Funster to come close to explaining this was Joshua Zucker, who stopped short of totally cooking it, but correctly indicated the final steps. (Marc LeBrun is disqualified--he helped misbeget it.) --rwg For a modicum of speed: Odd4[n_,t_,k_]:=Odd4[n,t,k]= If[k==0,KroneckerDelta[0,n], If[t>n,0,Odd4[n-t,0,k-1]+Odd4[n,1/2+t+Sqrt[2*t+1/4],k]]]
I don't know whether
OddPrimeQ[n_]:=Block[{$RecursionLimit=Infinity}, (Odd4[(n-1)/2,0,4]-1)^3==Odd4[n-1,0,8]-1]
can give a false positive. It's too slow to test beyond a few thousand. But I see how, with Macsyma, to test its conjecture out to a few million.
DAZ> it was a *positive* "No".
As opposed to a positive, definite "No".
DDyer>I've had waxy paper ... burst into flames while the tamale was still cold.
Isn't "cold tamale" an oxymoron?
_______________________________________________ math-fun mailing list math-fun@mailman.xmission.com http://mailman.xmission.com/cgi-bin/mailman/listinfo/math-fun
The AILab PDP10 macro-assembler (Midas) had a very general macro facility. Greenblatt added the assembler directive .NSTGW, likely as a critical comment about some of the macro-happy users. After this directive was invoked, the assembler would report an error if the source file generated any assembly output. NSTGW = No Storage Words. Although this seems silly, it might help debug the complex interlinked .h files that C programmers use today. Rich ---------------- Quoting Henry Baker <hbaker1@pipeline.com>:
One of the coolest things I worked with in high school was the IBM IBSYS "MAP" (Macro Assembly Program), which ran on the 709/7090/704/7040.
Fletcher utilized this macro facility to solve a combinatorial problem; as I understand, the generated assembly code itself was thrown away, because all of the computation was done within the macro expansion phase!
Fletcher, John G. "A program to solve the pentomino problem by the recursive use of macros". CACM 8, 10 (Oct. 1965), 621-3.
http://portal.acm.org/citation.cfm?id=365654&dl=GUIDE&coll=GUIDE&CFID=626489...
Similar hacks have been used with the preprocessor for the C language. These hacks are far more difficult with the C preprocessor due to the constraints installed to prevent looping & stack overflows. Nevertheless, some pretty cool things can still be done. See the "Obfuscated C" home page for more info:
I noticed while Googling that you can still run 7090 code on your Windoze machine, should you wish to do so:
http://www.piercefuller.com/oldibm-shadow/709x.html
http://www.cozx.com/~dpitts/ibm7090.html
At 11:53 AM 11/12/2009, Fred lunnon wrote:
My PDF viewer did cope with the PostScript original --- after several minutes of frantic computation and memory-swapping, and the production of a 3 Mbyte file!
Many years ago, I wrote similarly booby-trapped recursive PostScript for Penrose kites-and-darts tilings. [This improved upon a more primitive earlier program, which had itself been regarded with such awe by the mainframe maintenance team that they used it to test the flatbed plotter.]
The program achieved some notoriety when a firm of toilet-paper manufacturers employed it to decorate their product. Sir Roger Penrose was not amused, and threatened to take them to court. I have no recollection of how the case was finally resolved, but it did lead at the time to a certain amount of unkind ribaldry at his expense, in connection with some rather controversial cosmological speculation.
Fred Lunnon
On 11/12/09, Mike Stay <metaweta@gmail.com> wrote:
That's much better; my pdf viewer didn't render anything but the three circles.
On Thu, Nov 12, 2009 at 10:16 AM, Henry Baker <hbaker1@pipeline.com> wrote:
It is indeed a fractal. Look more closely -- there are individual dots.
Try printing this Postscript version, which actually computes the fractal inside your printer using embedded Postscript code:
http://home.pipeline.com/~hbaker1/sigplannotices/sigcol07.ps.gz
(".gz" means "gzip"; I believe that "7-zip" can ungzip this file for you.
There is a small program called "PrintFile" which can send Postscript files on Windows to your Postscript printer.
If worst comes to worst, install Ghostscript on your computer & look at the output that way.
At 10:06 AM 11/12/2009, Mike Stay wrote:
Figure three seems wrong in this rendering--shouldn't it be a fractal?
On Thu, Nov 12, 2009 at 9:47 AM, Henry Baker <hbaker1@pipeline.com> wrote:
That was my paper!
http://home.pipeline.com/~hbaker1/sigplannotices/sigcol07.pdf
At 09:19 AM 11/12/2009, mcintosh@servidor.unam.mx wrote: >Re: [math-fun] Cube root of a complex number > >somewhat tangential to the original question, Möbius >transformations map three points into three points. So, >why not map the three roots of the cubic into the three >complex roots of unity? You only get to use the coefficients >of the polynomial. > >I recall a paper in an ACM journal humorously dated >March 32 some years ago where someond did that; I don't >remember if the solution was relevant to the present >inquiry.
-- Mike Stay - metaweta@gmail.com http://math.ucr.edu/~mike http://reperiendi.wordpress.com
-- Mike Stay - metaweta@gmail.com http://math.ucr.edu/~mike http://reperiendi.wordpress.com
_______________________________________________ math-fun mailing list math-fun@mailman.xmission.com http://mailman.xmission.com/cgi-bin/mailman/listinfo/math-fun
participants (8)
-
Bernie Cosell -
Gareth McCaughan -
Henry Baker -
Hilarie Orman -
Mike Stay -
rcs@xmission.com -
rwg@sdf.lonestar.org -
victor miller