__author__ = 'Переверза Дмитрий Витальевич'

from utils.console import bColors

# Задание-1:
# Матрицы в питоне реализуются в виде вложенных списков:
# Пример. Дано:
matrix = [[1, 0, 8],
          [3, 4, 1],
          [0, 4, 2]]


# Выполнить поворот (транспонирование) матрицы
# Пример. Результат:
# matrix_rotate = [[1, 3, 0],
#                  [0, 4, 4],
#                  [8, 1, 2]]
# Суть сложности hard: Решите задачу в одну строку

def rotate_matrix_in_one_line(matrix):
    """
    Поворот (транспонирование) матрицы
    >>> rotate_matrix_in_one_line([[1, 0, 8],[3, 4, 1],[0, 4, 2]])
    [[1, 3, 0], [0, 4, 4], [8, 1, 2]]
    """
    return [list(x) for x in list(zip(*matrix))]


print(bColors.bold('Первое задание.'))
print('Дана матрица: {}'.format(''.join(["\n" + str(x) for x in matrix])))
print('Матрица после поворота: {}'.format(''.join(["\n" + str(x) for x in rotate_matrix_in_one_line(matrix)])))

# Задание-2:
# Найдите наибольшее произведение пяти последовательных цифр в 1000-значном числе.
# Выведите произведение и индекс смещения первого числа последовательных 5-ти цифр.
# Пример 1000-значного числа:
number = """
73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450"""

print(bColors.bold("\nВторое задание."))

def get_product_numbers(number_str):
    """
    >>> get_product_numbers('99879')
    40824
    >>> get_product_numbers('76689')
    18144
    >>> get_product_numbers('73167')
    882
    >>> get_product_numbers('09999')
    0
    """
    result = 1
    for nums in number_str:
        for num in nums:
            result *= int(num)
    return result


def get_max_product_seq(number):
    """
    >>> get_max_product_seq('352411998792312')
    {'index': 6, 'seq': '99879', 'product': 40824}
    >>> get_max_product_seq('49698123213')
    {'index': 0, 'seq': '49698', 'product': 15552}
    """
    number = number.replace("\n", "")
    result_info = {
        'index': 0,
        'seq': 0,
        'product': 0
    }
    for x in range(len(number) - 5):
        curNumber = number[x:x + 5]
        prodNum = get_product_numbers(curNumber)
        if prodNum > result_info['product']:
            result_info['index'] = x
            result_info['seq'] = curNumber
            result_info['product'] = prodNum
    return result_info


print('Максимальное число = {}'.format(get_max_product_seq(number)))

# Задание-3 (Ферзи):
# Известно, что на доске 8×8 можно расставить 8 ферзей так, чтобы они не били
# друг друга. Вам дана расстановка 8 ферзей на доске.
# Определите, есть ли среди них пара бьющих друг друга.
# Программа получает на вход восемь пар чисел,
# каждое число от 1 до 8 — координаты 8 ферзей.
# Если ферзи не бьют друг друга, выведите слово NO, иначе выведите YES.

if __name__ == "__main__":
    import doctest

    doctest.testmod()
