def split_int(i, floats):
    """
    Prepare a list of integers proportional to `floats` which sum up to `i`.
    :param i: integer to be split, equal to the sum of returned integers.
    :type i: int
    :param floats: floats to which individual integers will be proportional to.
    :type floats: tuple[float]
    :return: List of integers, each proportional to float on `floats` list.
    :rtype: tuple[int]
    """

    def split_int_from_sorted(j, sorted_floats):
        if all([f <= 0 for f in sorted_floats]):
            return tuple([0 for _ in sorted_floats])
        elif len(sorted_floats) == 1:
            return (j,)
        else:
            chip = int(round(j * sorted_floats[-1] / sum(sorted_floats)))
            return (*split_int_from_sorted(j - chip, sorted_floats[:-1]), chip)

    ints = split_int_from_sorted(i, sorted(floats))
    float_order = sorted(range(len(floats)), key=lambda k: floats[k])
    float_ord_indexes = sorted(range(len(floats)), key=lambda k: float_order[k])
    return (ints[i] for i in float_ord_indexes)