Source code for kyu_5.find_the_smallest.solution

#  Created by Egor Kostan.
#  GitHub: https://github.com/ikostan
#  LinkedIn: https://www.linkedin.com/in/egor-kostan/


[docs]def get_min_digit(digits: list) -> int: min_digit = min(digits) if digits.index(min_digit) != 0: return min_digit else: min_digit = digits[1] for digit in digits[2:]: if digit < min_digit: min_digit = digit return min_digit
[docs]def concat_new_n(digits: list, min_digit: int, min_index: int) -> list: print() if min_digit < digits[0] and min_digit != 0: print('Rule #1') i, j = min_index, 0 del digits[min_index] digits = [min_digit] + digits elif min_digit == 0: print('Rule #2') if min_index == 1: i, j = 0, min_index del digits[min_index] else: while digits[min_index] == 0: if min_index - 1 >= 0: min_index -= 1 else: break i, j = min_index + 1, 0 del digits[min_index + 1] else: print('Rule #3') max_digit = max(digits) i = min_index j = digits.index(max_digit) pre = digits[:j] digits.remove(digits[j]) digits.remove(min_digit) for d in pre: digits.remove(d) digits = pre + [min_digit] + [max_digit] + digits return [int(''.join([str(digit) for digit in digits])), i, j]
[docs]def smallest(n: int) -> list: """ Return an array or a tuple or a string depending on the language (see "Sample Tests") with 1) the smallest number you got 2) the index i of the digit d you took, i as small as possible 3) the index j (as small as possible) where you insert this digit d to have the smallest number. :param n: a positive number n consisting of digits :return: an array with: smallest number, index, digit """ digits: list = [int(char) for char in str(n)] min_digit = get_min_digit(digits) min_index = ''.join([str(d) for d in digits]).rindex(str(min_digit)) return concat_new_n(digits, min_digit, min_index)