МБОУ "Радьковская СОШ"
с. Радьковка, Прохоровский район, Белгородская область
  • Задание 1. Анализ информационных моделей

    Функции модуля itertools

    Itertools  —  это Python-модуль, который предоставляет набор функций для работы с итерируемыми объектами. Итерируемый объект  —  это любой объект, предоставляющий возможность пройти по своим элементам, например список, кортеж и словарь. Itertools позволяет выполнять стандартные операции с итерируемыми объектами, такие как фильтрация, группировка и объединение.

    Модуль Itertools предоставляет несколько функций, позволяющих манипулировать итерируемыми объектами. Рассмотрим подробнее наиболее полезные функции itertools.

    1. permutations(): эта функция возвращает все возможные перестановки итерируемого объекта с уникальным расположением элементов в итераторе.

    2. combinations(): эта функция возвращает все возможные комбинации элементов в итерируемом объекте, не повторяя в итераторе ни одной из комбинаций. Если указан опциональный аргумент r, будут возвращены только комбинации длины r.

    3. product(): эта функция возвращает декартово произведение итерируемых объектов. Получаемый итератор содержит кортежи, каждый из которых формируется путем отбора по одному элементу из каждого итерируемого объекта. Если указан опциональный аргумент repeat, то входные итерируемые объекты повторяются указанное количество раз.

    Функции библиотеки itertools возвращают не список, а итератор. Он не хранит все значения сразу, а позволяет один раз последовательно пройти по ним в цикле.

    Для сохранения всех значений итератора его можно преобразовать в список с помощью функции list().

    Строковый метод join() возвращает строку, объединяя все элементы итерации, разделенные разделителем строк. Метод в Python предоставляет гибкий способ создания строк из повторяемых объектов. Он объединяет каждый элемент итерируемого объекта (например, список, строку и кортеж) с помощью разделителя строк и возвращает объединенную строку.
     

    from itertools import *
    cmb = list(combinations('ABC', 2))
    print(cmb)
    # Результат: [('A', 'B'), ('A', 'C'), ('B', 'C')]

    prm = list(permutations('DEF'))
    print(prm)
    # Результат: [('D','E','F'), ('D','F','E'), ('E','D','F'),
    # ('E','F','D'), ('F','D','E'), ('F','E','D')]


    prd = list(product('AC', repeat=2))
    print(prd)

    # Результат: [('A', 'A'), ('A', 'C'), ('C', 'A'), ('C', 'C')]


    cm = product('ABC', repeat=2)
    cm = list(map( "".join, cm ) )
    print(cm)
    # Результат: ['AA', 'AB', 'AC', 'BA', 'BB', 'BC', 'CA', 'CB', 'CC']


    cm = product('ABC', repeat=2)
    for p in cm:
        s = "".join(p)
        print(s, end=' ')
    # Результат: AA AB AC BA BB BC CA CB CC

    [('A', 'B'), ('A', 'C'), ('B', 'C')]

    [('D', 'E', 'F'), ('D', 'F', 'E'), ('E', 'D', 'F'), ('E', 'F', 'D'), ('F', 'D', 'E'), ('F', 'E', 'D')]

    [('A', 'A'), ('A', 'C'), ('C', 'A'), ('C', 'C')]

    ['AA', 'AB', 'AC', 'BA', 'BB', 'BC', 'CA', 'CB', 'CC']

    AA AB AC BA BB BC CA CB CC 

    Решение задач

    На рисунке справа схема дорог Н-ского района изображена в виде графа, в таблице содержатся сведения о длинах этих дорог (в километрах). Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова длина дороги из пункта А в пункт Д. В ответе запишите целое число – так, как оно указано в таблице.

    Ответ:

    46

    Решение на Python:

    from itertools import *
    # Записываются ребра исходной таблицы
    t = '13 15 17 23 24 31 32 34 36 37 42 43 46 51 57 63 64 67 71 73 75 76'
    # Записываются ребра графа
    g = 'аб ав ад ба бв вб ва вд вг ве гв ге гк да дв де ед ев ег ек ке кг'
    # Записываются всевозможные перестановки вершин графа абвгдек
    for per in permutations('абвгдек'):
        new_g = t
        for i in range(1, 8):
    # Номера населенных пунктов 1234567 заменяются буквами абвгдек из перестановки,
    # полученная строка сравнивается со строкой g, при совпадении выводится сопадение номеров пунктов и вершин графа
            new_g = new_g.replace(str(i), per[i-1])
        if set(g.split()) == set(new_g.split()):
            print('1 2 3 4 5 6 7')
            print(*per)

    1 2 3 4 5 6 7
    г б в а к д е

    Вершине а графа соответствует пункт 4, а вершине д - 6. По исходной таблице определяем расстояние между пунктами 4 и 6, которое равно 46.

    ккккккккккк

    На рисунке справа схема дорог Н-ского района изображена в виде графа, в таблице содержатся сведения о длинах этих дорог (в километрах). Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе.

    Определите сумму протяженностей дорог из пункта B в пункт H и из пункта A в пункт Е. В ответе запишите целое число.

    Ответ:

    38

    Решение

    from itertools import *
    t = '12 14 17 21 24 28 35 37 38 41 42 46 53 58 64 67 71 73 76 82 83 85'
    g = 'ab ah ae ba bh ce cg cd dc df ea eg ec fh fg fd ge gc gf ha hb hf'
    for p in permutations('abcdefgh'):
        ng = t
        for i in '12345678': ng = ng.replace(i, p[int(i)-1])
        if set(g.split()) == set(ng.split()):
            print('12345678')
            print(''.join(p))

    № 2564 (Уровень: Средний)

    На рисунке схема дорог Н-ского района изображена в виде графа, в таблице содержатся сведения о длине этих дорог в километрах.

    Так как таблицу и схему рисовали независимо друг от друга, нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Известно, что длина дороги ЗЕ равна 15 км. Определите длину дороги БГ. В ответе запишите целое число – длину дороги в километрах.

    Ответ: 22

    from itertools import *
    t = '15 18 23 24 32 38 42 46 48 51 57 64 67 68 75 76 78 81 83 84 86 87'
    g = 'ав ае бж бг ва вд гд гб де дз дж дв дг еа ед ез жз жд жб зе зж зд'
    for per in permutations('абвгдежз'):
        new_g = t
        #print(new_g, per)
        for i in range(1, 9):
            new_g = new_g.replace(str(i), per[i - 1])
            #print(new_g)
        if set(g.split()) == set(new_g.split()):
            print('1 2 3 4 5 6 7 8')
            print(*per)

    Решение

    1 2 3 4 5 6 7 8
    в б г ж а з е д
    1 2 3 4 5 6 7 8
    г а в е б з ж д

    В первом варианте длина дороги ЗЕ равна 17, не удовлетворяет условию, решение задачи дает второй вариант

    № 1234 Статград 26.04.2021 (Уровень: Сложный)

    На рисунке схема дорог изображена в виде графа, в таблице содержатся сведения о длине этих дорог в километрах. Так как таблицу и схему рисовали независимо друг от друга, нумерация населенных пунктов в таблице никак не связана с буквенными обозначениями на графе.

    Известно, что длина дороги ГЕ больше, чем длина дороги ГЖ. Определите длину дороги БВ. В ответе запишите целое число - длину дороги в километрах.

    Ответ: 29

    from itertools import *
    t = '14 15 17 23 25 28 32 34 35 38 41 43 46 47 51 52 53 64 67 68 71 74 76 82 83 86'
    g = 'аб аг ае ба бв бд вб вд ви га гд гж ге дг дб дв ди еа ег еж же жг жи иж ид ив'
    for per in permutations('абвгдежи'):
        new_g = t
        #print(new_g, per)
        for i in range(1, 9):
            new_g = new_g.replace(str(i), per[i - 1])
            #print(new_g)
        if set(g.split()) == set(new_g.split()):
            print('1 2 3 4 5 6 7 8')
            print(*per)

    Решение

    1 2 3 4 5 6 7 8  По условию: длина дороги ГЕ > ГЖ, г=4, е=7, ж=6. Тогда 17 > 20 Нет
    а в д г б ж е и 

    1 2 3 4 5 6 7 8  По условию: длина дороги ГЕ > ГЖ, г=3, е=2, ж=8. Тогда 18 > 21 Нет
    б е г д а и в ж

    1 2 3 4 5 6 7 8  По условию: длина дороги ГЕ > ГЖ, г=4, е=7, ж=1. Тогда 17 > 14 Да
    ж в д г и а е б  Этот вариант определяет решение задачи, б=8, в=2. Длина дороги БВ равна 29

    1 2 3 4 5 6 7 8
    и е г д ж б в а

    Второй вариант программы

    from itertools import *

    t = '457 358 2458 1367 123 478 146 236'.split()
    g = 'аб аг ае бв бд вд ви гд гж ге еж жи ди'.split()
    print(*range(1,9))
    for p in permutations('абвгдежи'):
        if all(str(p.index(a) + 1) in t[p.index(b)] for a, b in g):
            print(*p)

    1 2 3 4 5 6 7 8
    а в д г б ж е и
    б е г д а и в ж
    ж в д г и а е б
    и е г д ж б в а

    Задача № 7904

    На рисунке справа схема дорог Н-ского района изображена в виде графа, звёздочка в ячейке таблицы обозначает наличие дороги между двумя пунктами. Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе.

    Выпишите последовательно без пробелов и знаков препинания указанные на графе буквенные обозначения пунктов от П1 до П8: сначала букву, соответствующую П1, затем букву, соответствующую П2, и т. д.

    Ответ: ЕГВБЖАДИ

    Решение

    from itertools import *

    t = '235 1467 16 26 178 234 258 57'.split()
    g = 'аб бг гд ди иж же ев ва аг ег жд'.split()
    print(*range(1,9))
    for p in permutations('аивгдежб'):
        if all(str(p.index(a)+1) in t[p.index(b)] for a, b in g):
            print(*p)

    1 2 3 4 5 6 7 8
    е г в б ж а д и

    Домашнее задание

    На рисунке справа схема дорог Н-ского района изображена в виде графа, в таблице содержатся сведения о длинах этих дорог (в километрах). Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе.

    Определите сумму протяженностей дорог из пункта A в пункт H и из пункта H в пункт C. В ответе запишите целое число.

    Ответ:

    37

    (И. Карпачёв) На рисунке справа схема дорог Н-ского района изображена в виде графа, звёздочка в ячейке таблицы обозначает наличие дороги между двумя пунктами. Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе.

    Определите длину дороги из пункта Д в пункт Е. В ответе запишите целое число.

    Ответ:

    9

    На рисунке справа схема дорог N-ского района изображена в виде графа. В таблице слева есть сведения о протяжённости каждой из этих дорог (в километрах).

    Номер пункта
    1 2 3 4 5 6 7 8
    Номер пункта
    1 21 15 27
    2 25 21 22
    3 18 11 10
    4 21 20
    5 15 25 18 23
    6 21 11 21 10
    7 10 20 21
    8 27 22 23 10

    Screenshot

    Таблицу и схему рисовали независимо друг от друга, поэтому нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова сумма длин дорог из пункта A в пункт D и из пункта B в пункт H.

    Ответ: 40

    На рисунке справа схема дорог Н-ского района изображена в виде графа, а в таблице слева указаны длины каждой из этих дорог. Так как таблицу и схему рисовали независимо друг от друга, неизвестно, каким номерам населённых пунктов в таблице соответствуют буквенные обозначения на графе.

    Image

    Определите сумму длин дорог РВ и СВ на схеме.

    Скрыть

    Ответ: 35

    На рисунке справа изображена схема дорог Н-ского района, в таблице звёздочкой обозначено наличие дороги из одного населённого пункта в другой. Отсутствие звёздочки означает, что такой дороги нет.

    Изображение

    Каждому населённому пункту на схеме соответствует его номер в таблице, но неизвестно, какой именно номер. Определите, какие номера населённых пунктов в таблице могут соответствовать населённым пунктам Ж и В на схеме. В ответе запишите эти два номера в возрастающем порядке без пробелов и знаков препинания. Например, если бы ответом были пункты П2 и П8, то в качестве ответа нужно было бы указать 28.

    Ответ: 57

    На рисунке слева схема дорог Н-ского района изображена в виде графа, в таблице содержатся сведения о длинах этих дорог (в километрах). Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите длину дороги из пункта Б в пункт В, если известно, что длина дороги из А в И 13. В ответе запишите целое число — длину дороги в километрах.

    Изображение

    Ответ: 15

    Схема связей населённых пунктов изображена буквами на графе, а в таблице дано время пути по соответствующей дороге в минутах. Однако связь между буквами на графе и номерами в таблице не видна — её заполняли разные люди и не согласовали работу между собой.

    Screenshot

    Определите, за какое минимальное время можно добраться из населённого пункта Д в пункт Е в минутах. В ответе запишите только число.

    Ответ: 75

    На рисунке схема проходов между камерами в муравьиной ферме изображена в виде графа, в таблице содержатся сведения о длине этих проходов в сантиметрах. Однако связь между буквами на графе и номерами в таблице не видна — её заполняли разные люди и не согласовали работу между собой.

    Известно, что длина прохода ДЕ отличается от длины ДИ на 6 см. Помогите муравью найти кратчайшее расстояние между камерами Б и Ж. Передвигаться можно только по указанным проходам.

    Ответ: 24

    Перейти на сайт ФИПИ "Открытый банк заданией ЕГЭ"

            Открытый банк заданией ЕГЭ

    2.     Раскрыть вкладку "ПОДБОР ЗАДАНИЙ" , в таблице выбрать вариант задания и ввести этот номер в окно "Номер задания"

    3.     Решить задание и проверить решение на сайте

    Задания открытого банка по информатике

    4D2E4A

    5271F8

    EBCC73

    D142C8

    4F4A4E

    8E06F2

    812675

    63556F

    25DF45

    4E310A

    0FFFB0

    378067

    A8DF4F

    22260A

    7C6DB6

    885466

    A6BA45

    8CE20C

    2B52BB

    B32833

    4096F6

    56A17C

    13C719

    A9B33E

    DCAEFA

    E24A7E

    D203D6

    928339

    E17DA8

    Тестирование

    Сайт использует сервис веб-аналитики Яндекс Метрика с помощью технологии «cookie». Это позволяет нам анализировать взаимодействие посетителей с сайтом и делать его лучше. Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie