human
I found an interesting problem on https://www.codewars.com/kata/5834a44e44ff289b5a000075:
## Task

Given `n` representing the number of floors build a beautiful multi-million dollar mansions like the ones in the example below:

```
     /\
    /  \
   /    \
  /______\  number of floors 3
  |      |
  |      |
  |______|

     /\
    /  \
   /____\
   |    |   2 floors
   |____|

     /\
    /__\    1 floor
    |__|
```

**Note:** whitespace should be preserved on both sides of the roof. Number of floors will go up to 30. There will be no tests with invalid input.

If you manage to complete it, you can try a harder version [here](https://www.codewars.com/kata/58360d112fb0ba255300008b).

Good luck!

I tried it in Python, but could not do it. Can you solve it?
assistant
#Here is the Python program you requested.

class House(object):
    roofleft, roofright = '/', '\\'
    wall = '|'
    bottom = '_'
    
    def __init__(self, floors):
        self.floors = floors
        
    def __new__(cls, floors):
        a = super(House, cls).__new__(cls)
        a.__init__(floors)
        return str(a)
        
    @property
    def width(self):
        return self.floors * 2 + 2
        
    @property
    def height(self):
        return self.floors * 2 + 1
        
    @property
    def roofparts(self):
        return list(range(self.floors))
        
    @property
    def gutterparts(self):
        return list(range(max(self.roofparts) + 1, max(self.roofparts) + 2))
        
    @property
    def floorparts(self):
        return list(range(max(self.gutterparts) + 1, self.height - 1))
        
    @property
    def groundparts(self):
        return list(range(self.height -1, self.height))
    
    def genpart(self, index):
        if index in self.roofparts:
            return self.genroof(index, outerfill=" ", innerfill=" ")
        if index in self.gutterparts:
            return self.genroof(index, outerfill="", innerfill="_")
        if index in self.floorparts:
            return self.genfloor(index, outerfill="", innerfill=" ")
        if index in self.groundparts:
            return self.genfloor(index, outerfill="", innerfill="_")
            
    def genroof(self, index, innerfill, outerfill):
        margin = "{:{outerfill}^{width}}".format("", outerfill=outerfill, width=(self.floors - index))
        roofpart = "{margin}{roofleft}{centerfill}{roofright}{margin}".format(
            margin=margin,
            roofleft=self.roofleft,
            roofright=self.roofright,
            centerfill=innerfill * 2 * index)
        return roofpart
        
    def genfloor(self, index, innerfill, outerfill):
        margin = "{outerfill:{innerfill}^{width}}".format(innerfill=innerfill, outerfill=outerfill, width=self.width)
        roofpart = "{wall}{centerfill}{wall}".format(
            wall=self.wall,
           ...