| f | from fractions import Fraction | f | from fractions import Fraction | 
            |  | from math import floor |  | from math import floor | 
            |  |  |  |  | 
            |  | class Sausage: |  | class Sausage: | 
            | n | FILLING_SIZE = 12 | n | FULL_SIZE = 1 | 
            |  | UNIT_VOLUME = 1 |  | SLICE_SIZE = 12 | 
            |  |  |  |  | 
            | n | def __init__(self, filling='pork!', quantity='1'): | n | def __init__(self, stuffing='pork!', volume='1'): | 
            |  | self.filling = str(filling) |  | self.stuffing = str(stuffing) | 
            |  | self.quantity = Fraction(quantity) if quantity else Fraction(0) |  | self.volume = Fraction(volume) if volume else Fraction(0) | 
            |  | self.quantity = max(self.quantity, Fraction(0)) |  | if self.volume < 0: | 
            |  |  |  | self.volume = Fraction(0) | 
            |  |  |  |  | 
            |  | def __repr__(self): |  | def __repr__(self): | 
            | n | if self.quantity * self.FILLING_SIZE < 1: | n | if self.volume * self.SLICE_SIZE < 1: | 
            |  | return '/|\n||\n||\n||\n\\|' |  | return '/|\n||\n||\n||\n\\|' | 
            | n | full_buns = floor(self.quantity) | n | full_sausages = floor(self.volume) | 
            |  | partial_bun_length = int(self.quantity % self.UNIT_VOLUME * self |  | partial_sausage_length = int(self.volume % self.FULL_SIZE * self | 
            |  | .FILLING_SIZE) |  | .SLICE_SIZE) | 
            |  | buns = [] |  | sausage_parts = [] | 
            |  | for _ in range(full_buns): |  | for _ in range(full_sausages): | 
            |  | buns.append(self._generate_full_bun()) |  | sausage_parts.append(self._create_full_sausage()) | 
            |  | if partial_bun_length > 0: |  | if partial_sausage_length > 0: | 
            |  | buns.append(self._generate_partial_bun(partial_bun_length)) |  | sausage_parts.append(self._create_partial_sausage(partial_sa | 
            |  |  |  | usage_length)) | 
            |  | return self._combine_buns(buns) |  | return self._combine_sausages(sausage_parts) | 
            |  |  |  |  | 
            | n | def _generate_full_bun(self): | n | def _create_full_sausage(self): | 
            |  | filling_content = (self.filling * (self.FILLING_SIZE // len(self |  | stuff = (self.stuffing * (self.SLICE_SIZE // len(self.stuffing) | 
            |  | .filling) + 1))[:self.FILLING_SIZE] |  | + 1))[:self.SLICE_SIZE] | 
            |  | return f'/------------\\\n|{filling_content}|\n|{filling_content |  | return f'/------------\\\n|{stuff}|\n|{stuff}|\n|{stuff}|\n\\--- | 
            |  | }|\n|{filling_content}|\n\\------------/' |  | ---------/' | 
            |  |  |  |  | 
            | n | def _generate_partial_bun(self, bun_length): | n | def _create_partial_sausage(self, stuffing_length): | 
            |  | filling_content = (self.filling * (bun_length // len(self.fillin |  | stuff = (self.stuffing * (stuffing_length // len(self.stuffing) | 
            |  | g) + 1))[:bun_length] |  | + 1))[:stuffing_length] | 
            |  | return f'/{'-' * bun_length}|\n|{filling_content}|\n|{filling_co |  | return f'/{'-' * stuffing_length}|\n|{stuff}|\n|{stuff}|\n|{stuf | 
            |  | ntent}|\n|{filling_content}|\n\\{'-' * bun_length}|' |  | f}|\n\\{'-' * stuffing_length}|' | 
            |  |  |  |  | 
            | n | def _combine_buns(self, buns): | n | def _combine_sausages(self, sausages): | 
            |  | rows = [bun.split('\n') for bun in buns] |  | rows = [sausage.split('\n') for sausage in sausages] | 
            |  | combined_rows = [''.join(row) for row in zip(*rows)] |  | combined = [''.join(row) for row in zip(*rows)] | 
            |  | return '\n'.join(combined_rows) |  | return '\n'.join(combined) | 
            |  |  |  |  | 
            |  | def __abs__(self): |  | def __abs__(self): | 
            | n | return abs(self.quantity) | n | return abs(self.volume) | 
            |  |  |  |  | 
            |  | def __add__(self, other): |  | def __add__(self, other): | 
            | n | total_size = self.quantity + other.quantity | n | new_volume = self.volume + other.volume | 
            |  | return Sausage(self.filling, max(total_size, Fraction(0))) |  | return Sausage(self.stuffing, max(new_volume, Fraction(0))) | 
            |  |  |  |  | 
            |  | def __sub__(self, other): |  | def __sub__(self, other): | 
            | n | reduced_size = self.quantity - other.quantity | n | new_volume = self.volume - other.volume | 
            |  | return Sausage(self.filling, max(reduced_size, Fraction(0))) |  | return Sausage(self.stuffing, max(new_volume, Fraction(0))) | 
            |  |  |  |  | 
            | n | def __mul__(self, multiplier): | n | def __mul__(self, factor): | 
            |  | if isinstance(multiplier, int) and multiplier >= 0: |  | if isinstance(factor, int) and factor >= 0: | 
            |  | return Sausage(self.filling, self.quantity * multiplier) |  | return Sausage(self.stuffing, self.volume * factor) | 
            |  | raise ValueError('Multiplier must be a non-negative integer.') |  | raise ValueError('Multiplication factor must be a non-negative i | 
            |  |  |  | nteger.') | 
            |  |  |  |  | 
            | n | def __rmul__(self, multiplier): | n | def __rmul__(self, factor): | 
            |  | return self.__mul__(multiplier) |  | return self.__mul__(factor) | 
            |  |  |  |  | 
            |  | def __truediv__(self, divisor): |  | def __truediv__(self, divisor): | 
            |  | if isinstance(divisor, int) and divisor > 0: |  | if isinstance(divisor, int) and divisor > 0: | 
            | n | return Sausage(self.filling, self.quantity / divisor) | n | return Sausage(self.stuffing, self.volume / divisor) | 
            |  | raise ValueError('Divisor must be a positive integer.') |  | raise ValueError('Division divisor must be a positive integer.') | 
            |  |  |  |  | 
            |  | def __bool__(self): |  | def __bool__(self): | 
            | t | return self.quantity != 0 | t | return self.volume != 0 |