Code:
    def __repr__(self) -> str:
        parts: List[str] = []

        # crane rows
        for _ in range(self.position):
            parts.append("-----")
        parts.append("--|--")
        for _ in range(self.position + 1, self.num_columns):
            parts.append("-----")
        parts.append("\n")
        for _ in range(self.position):
            parts.append("     ")
        parts.append("  |\n")
        for _ in range(self.position):
            parts.append("     ")
        parts.append(" +-+\n")
        for _ in range(self.position):
            parts.append("     ")
        if self.has_box:
            parts.append(" |X|")
        else:
            parts.append(" | |")
        parts.append("\n\n")

        # box positions
        max_height = max(self.box_placements)
        for h in range(max_height, 0, -1):
            for i in range(self.num_columns):
                if self.box_placements[i] >= h:
                    parts.append("  X  ")
                else:
                    parts.append("     ")
            parts.append("\n")

        # bottom row
        for _ in range(self.num_columns):
            parts.append("-----")
        parts.append("\n\n")

        return "".join(parts)
Last modified: Wednesday, 13 November 2019, 10:41 PM