[Edu-sig] Mosaics using Python...

kirby urner kirby.urner at gmail.com
Fri Feb 4 21:10:37 CET 2011


"""
Mosaics using Python generators...
by K. Urner
4dsolutions.net
based on a thread on mathfuture:
http://groups.google.com/group/mathfuture/msg/9d098696c2ea7426?hl=en

Just as the Fibonacci sequence generator might be "seeded" by any
two integers to start off, so might Pascal's Triangle be seeded with
any beginning row.

When these sequences are formed into tabular or other areal displays,
such that information may be gleaned from rows and columns, these
formats may be called "mosaics" in some of the literature.
"""

def fibonacci( a=0, b=1):
    """
    Generator for a Fibonacci sequence starting from any two integers

    See:  Online Encyclopedia of Integer Sequences
    http://oeis.org/A000045

    >>> gen = fibonacci()
    >>> [next(gen) for i in range(11)]
    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
    >>> gen = fibonacci(-1, 2)
    >>> [next(gen) for i in range(11)]
    [-1, 2, 1, 3, 4, 7, 11, 18, 29, 47, 76]
    """

    while True:
        yield a
        b, a = a + b, b


def pascal( therow = [1]):
    """
    Generator for Pascal's Triangle starting from any top row

    Enter list for top row

    See:  Number Mosaics by Adi R. Kanga  (pg. 29, Fig 20)
    http://bit.ly/gDmmAo

    >>> gen = pascal([15, 20, 6])
    >>> next(gen)
    [15, 20, 6]
    >>> next(gen)
    [15, 35, 26, 6]
    >>> next(gen)
    [15, 50, 61, 32, 6]
    >>> next(gen)
    [15, 65, 111, 93, 38, 6]
    >>> next(gen)
    [15, 80, 176, 204, 131, 44, 6]
    >>> next(gen)
    [15, 95, 256, 380, 335, 175, 50, 6]
    """
    while True:
        yield therow
        therow = [ i + j for i, j in zip(therow + [0], [0] + therow) ]

def _test():
    import doctest
    doctest.testmod()

if __name__ == "__main__":
        _test()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/edu-sig/attachments/20110204/174b34d7/attachment.html>


More information about the Edu-sig mailing list