from itertools import *

'''
В данном файле рассмотрим библиотеку Itertools(необходимую для КЕГЭ)
Если в крации: данная библиотека генерирует перестановки, комбинации(комбинаторика-привет)
Вы можете открыть документацию и прочитать про нее, либо глянуть файл дальше)
'''

'''
Если кратко, то:
# Каждую букву использовать 1 раз => permutation
# Произвольное количество раз => product
# Обыкновенные комбинации, уникальные => combinations

P.S. не разу не видел употребление combinations в 8 задании. Обычно в 26 и 27
'''



print('>>>>>>')
print('ЕГЭ | combinations')
data_1 = list(combinations('ЕГЭ', 2))
print(data_1)
''' 
1) Кортежи на выходе
2) Элементы рассматриваются как уникальные в зависимости от их положения, а не от их значение. 
   Таким образом, если входные элементы будут уникальны, то в каждой комбинации не будет никакого повторного значения.
3) Комбинации длиной r, в данном случае 2. Каждая буква с каждой, 1 раз, позиция не имеет значений. 
P.S. Редко используется, НО используется.
'''


print('\n >>>>>>')
print('ЕГЭ | permutations ')
data_2 = list(set(permutations('ЕГЭ', r=2)))
print(data_2)
'''
1) Кортежи на выходе
2) Возвращает последовательные перестановки длины элементов r в итерируемом элементе. 
3) Похоже на combinations, но возвращает последовательности, в которых буквы могут менять места относительно друг друга
'''

print('\n >>>>>>')
print('ЕГЭ | product ')
data_3 = list(product('ЕГЭ', repeat=2))
print(data_3)
'''
1) Кортежи на выходе
2) Эта функция позволяет перебирать декартово произведение списка итераций.
3) Это очень важная "штука", поэтому еще примеры ниже
4) Всевозможные перестановки с повторениями самих букв со значением repeat
5) Буквы МЕНЯЮТ места и ПОВТОРЯЮТСЯ.
'''
print('\n >>>>>>>')
print('ЕГЭ | product | примеры | расскрой комменты и убери "pass" ')

#1

for x in range(10):
    for y in range(10):
        pass
        #print(x, y)
for x, y in product(range(10), range(10)):
    pass
    #print(x, y)

#2

a = [1, 2, 3, 4]
b = ['a', 'b', 'c'] #P.S. лучше не называть так переменные
#print(product(a, b)) #РАСКРОЙ КОММЕНТ И ПОСМОТРИ ВЫВОД, подумай почему так
for i in product(a, b):
    pass
    #print(i)

#3

for x in permutations('ВАРВАРА'):
    #print(x)
    pass # в данном случае будет повтор, в permutation, исправляется: set
