[Edu-sig] Another idea of Conway
gregor.lingl at aon.at
Sun Sep 13 17:58:17 CEST 2009
Maria Droujkova schrieb:
> This language looks like a lot of fun. Especially given the fact none
> of students coming to me for the first time (or their parents) can't
> typically find any use of fractions beyond cooking, if that. Are there
> some beginner, hands-on/visual or otherwise "more accessible" examples
> for it? What fun!
Unfortunately I don't know of any. There is a chapter on Fractran in
Julian Havil: Nonplussed!: Mathematical Proof of Implausible Ideas
It contains a nice proof of the fact that that 'fractran-program'
calculates exactly the primes.
Although perhaps "more accessible" it still assumes some computer
And, yes, it's fun. But as it happens so often with fun, it's useless -
in contrast to cooking ;-) ,
which may be fun also, though.
You have to calculate 281 integers to arrive at 32, which delivers the
prime 5 and
710 integers to arrive at the next prime: 7
P.S.: I like your homepage. Think I should register to find out more
about what it's all about.
> Maria Droujkova
> Make math your own, to make your own math.
> On Sun, Sep 13, 2009 at 8:08 AM, Gregor Lingl <gregor.lingl at aon.at> wrote:
>> Although my posting to this list seems to tend to become
>> a somewhat autistic activity I'd like to reveal the 'mystery'
>> behind the script below:
>> Would writing a fractran interpreter in python be an interesting
>> project for teaching CS? (My first try below allows for a lot of
>> optimizations, e.g. not to use Fraction but resort to (long) ints.)
>> Best wishes,
>> Gregor Lingl schrieb:
>>> Hi all,
>>> on vacation in the Tyrolean Alps one evening
>>> I've found the time to implement another (I assume
>>> less well known) idea of John Conway.
>>> Just for fun.
>>> from fractions import Fraction
>>> fracs = [Fraction(f) for f in
>>> "17/91 78/85 19/51 23/38 29/33 77/29 95/23 77/19 1/17 11/13 13/11 15/14
>>> 15/2 55/1".split()]
>>> def fracgame():
>>> z = Fraction(2,1)
>>> while True:
>>> for f in fracs:
>>> n = z * f
>>> if n.denominator == 1:
>>> yield int(n)
>>> z = n
>>> def pow2(z):
>>> n = 0
>>> while z % 2 == 0:
>>> n += 1
>>> z //= 2
>>> return (z == 1) * n
>>> def what():
>>> fg = fracgame()
>>> while True:
>>> z = next(fg)
>>> n = pow2(z)
>>> if n != 0:
>>> yield n
>>> what = what()
>>> # the following will take 1 or 2 minutes
>>> ##w = 0 ##while w < 100:
>>> ## w = next(what)
>>> ## print(w)
>>> Comments or discussion may follow when
>>> I'm back to Vienna.
>>> All the best,
>>> Edu-sig mailing list
>>> Edu-sig at python.org
>> Edu-sig mailing list
>> Edu-sig at python.org
More information about the Edu-sig