[ create a new paste ] login | about

Link: http://codepad.org/uwbyaNnl    [ raw code | fork ]

gre - Python, pasted on Dec 21:
"""
interval.py

My submission for Programming Praxis's "Interval Arithmetic" exercise; see
http://programmingpraxis.com/2010/12/21/interval-arithmetic/

NOTE: requires the fractions module.

GRE, 12/21/10
"""

from fractions import Fraction

class Interval(object):

    def __init__(self, x, y, centerRep = False):
        self.xy = (x, y)
        self.centerRep = centerRep
        return

    def __repr__(self):
        if not self.centerRep:
            return "Interval [%s, %s]" % (self.xy[0], self.xy[1])
        else:
            return "Interval of width %s centered at %s" % (self.xy[1],
                                                            self.xy[0])
    def toCenter(self):
        newX = Fraction((self.xy[0] + self.xy[1]), 2)
        newY = Fraction((self.xy[1] - self.xy[0]), 2)
        return Interval(newX, newY, centerRep = True)

    def fromCenter(self):
        newX = self.xy[0] - self.xy[1]
        newY = self.xy[0] + self.xy[1]
        return Interval(newX, newY, centerRep = False)

    def __add__(self, other, centerRep = False):
        s = self.fromCenter()
        o = other.fromCenter()
        x = s.xy[0] + o.xy[0]
        y = s.xy[1] + o.xy[1]
        return Interval(x, y, centerRep)

    def __sub__(self, other, centerRep = False):
        s = self.fromCenter()
        o = other.fromCenter()
        x = s.xy[0] - o.xy[0]
        y = s.xy[1] - o.xy[1]
        return Interval(x, y, centerRep)

    def __mul__(self, other, centerRep = False):
        s = self.fromCenter()
        o = other.fromCenter()
        x = s.xy[0] * o.xy[0]
        y = s.xy[1] * o.xy[1]
        return Interval(x, y, centerRep)

    def __div__(self, other, centerRep = False):
        s = self.fromCenter()
        o = other.fromCenter()
        try:
            entries = [Fraction(a, b) for a in self.xy for b in other.xy]
            return Interval(min(entries), max(entries), centerRep)
        except ZeroDivisionError:
            print "Error: divison by zero in second Interval"
            return

if __name__ == "__main__":
    X = Interval(1, 2)
    Y = Interval(3, 4)
    print X + Y
    print X - Y
    print X * Y
    print X / Y
    C = X.toCenter()
    print C
    print C.fromCenter()


Create a new paste based on this one


Comments: