К содержанию

Подтема 3 из 6

Соседние буквы

Условия на соседние буквы: «не рядом», «нет двух подряд», блок и чередование.

Соседние пары

Последнее условие задачи темы о буквах: в слове нет двух О подряд.

Соседние — буквы на позициях 1 и 2, 2 и 3, …: в слове длины n их n − 1 пар. Первая и последняя буквы соседними не считаются.

Запреты «нет двух одинаковых букв подряд», «нет двух А подряд», «нет двух гласных подряд» и «А и Б не стоят рядом» — четыре разных условия. Выбери запрет, чтобы увидеть, нарушает ли его слово АООБ:

одинаковые подряд
нарушает: О и О стоят рядом
две А подряд
не нарушает: А в слове одна
две гласные подряд
нарушает: рядом А и О, О и О
А и Б рядом
не нарушает: между А и Б две буквы

Промежутки

Чтобы одинаковые буквы не стояли рядом, сначала ставят остальные буквы, а данные — в разные промежутки между ними.

В пятибуквенном слове с двумя О остальных букв три. Вокруг них четыре промежутка, и две О должны попасть в разные — C₄² = 6 способов. Две О в разных промежутках никогда не окажутся рядом.

Три буквы без О и четыре промежутка вокруг них. Между двумя О всегда стоит хотя бы одна другая буква.

Посчитаем слова задачи темы. Если первая буква — О (вторая О — в одном из трёх несоседних промежутков), остальные три места — по 4 варианта: 3 · 4³ = 192. Если первая — К, Р или Т (3 варианта), две О ставят на несоседние места из 2–5: (2, 4), (2, 5) или (3, 5) — три способа, и ещё два места — по 4 варианта: 3 · 3 · 4² = 144. Всего 192 + 144 = 336.

from itertools import product count = 0for letters in product('АКОРТ', repeat=5):    word = ''.join(letters)    if (        word[0] != 'А'        and word.count('О') == 2        and 'ОО' not in word    ):        count += 1print(count)
336

'ОО' not in word проверяет фрагмент из двух О подряд. Если в слове ровно две О, этого достаточно, чтобы они не стояли рядом.

Проверка всех пар

Если запрещённых пар много, например любые две гласные подряд, проверяют все соседние пары циклом. Нажми «Запуск» и пройди программу по шагам:

word = 'БАОВГ'good = Truefor i in range(len(word) - 1):    if word[i] in 'АО' and word[i + 1] in 'АО':        good = False        breakprint(good)
False

Переменная good — флаг: сначала считаем, что слово подходит, а найдя запрещённую пару, меняем на False. прекращает цикл: одной плохой пары достаточно. range(len(word) - 1) даёт левые позиции всех пар: у слова из 5 букв это 0, 1, 2, 3.

Одинаковые соседи

Слов без двух одинаковых букв подряд m · (m − 1)ⁿ⁻¹: первая — любая, каждая следующая — любая, кроме предыдущей. Пятибуквенных слов из АБВГ — 4 · 3⁴ = 324. Это не запрет повторов вообще: АБАБА подходит.

from itertools import product count = 0for letters in product('АБВГ', repeat=5):    word = ''.join(letters)    good = True    for i in range(len(word) - 1):        if word[i] == word[i + 1]:            good = False            break    if good:        count += 1print(count)
324

Блок

Буквы, которые должны стоять рядом, объединяют в один блок. Переставим АБВГ так, чтобы А и Б стояли рядом: блок, В и Г расставляются 3! = 6 способами, а внутри блока два порядка — АБ и БА. Всего 12.

Тонкости:блок при повторах букв

Если буквы повторяются, блок считают осторожно: трёхбуквенных слов из АБ с фрагментом АА три — ААА, ААБ, БАА, а не 2 · 2 = 4: слово ААА содержит фрагмент дважды. Метод count тоже не видит наложений: 'АААА'.count('АА') даёт 2, хотя фрагмент начинается на трёх местах.

Чередование

Если гласные и согласные чередуются, сначала выбирают схему типов, потом заполняют её. У пятибуквенного слова из АОБВГ две схемы: «г‑с‑г‑с‑г» — 2³ · 3² = 72 и «с‑г‑с‑г‑с» — 3³ · 2² = 108. Всего 180.

from itertools import product count = 0for letters in product('АОБВГ', repeat=5):    word = ''.join(letters)    good = True    for i in range(len(word) - 1):        if (word[i] in 'АО') == (word[i + 1] in 'АО'):            good = False            break    if good:        count += 1print(count)
180

Если обе соседние буквы одного типа, проверки word[i] in 'АО' и word[i + 1] in 'АО' дают одинаковый результат — такая пара запрещена.

Итого

  • Соседних парn − 1 в слове длины n
  • Не рядомостальные буквы, данные — в разные промежутки
  • Проверкафрагмент 'ОО' not in word или цикл по парам с флагом
  • Одинаковые соседиm · (m − 1)ⁿ⁻¹
  • Рядомблок; чередование — схемы типов

Проверьте себя

Ответь сначала сам, потом открой ответ.

Вопрос 1
Сколько пар соседних позиций в слове из 6 букв?
ОтветСкрыть ответ
Ответ
5: позиции 1–2, 2–3, 3–4, 4–5, 5–6.
Вопрос 2
Сколько четырёхбуквенных слов из АБВ без двух одинаковых букв подряд?
ОтветСкрыть ответ
Ответ
24: первая — 3 варианта, каждая следующая — 2: 3 · 2³.
Вопрос 3
Что выведет print('АБ' in 'АВБ')?
ОтветСкрыть ответ
Ответ
False: in ищет буквы подряд, а в АВБ между А и Б стоит В.
Вопрос 4
Сколькими способами можно переставить буквы АБВГ так, чтобы А и Б стояли рядом?
ОтветСкрыть ответ
Ответ
12: блок и ещё две буквы — 3! = 6, внутри блока два порядка.
Вопрос 5
Почему число четырёхбуквенных слов из АБ, содержащих ББ, нельзя найти как «три места для фрагмента, умноженные на 2²»?
ОтветСкрыть ответ
Ответ
Слова с несколькими фрагментами посчитаются несколько раз: ББББ — трижды, БББА и АБББ — дважды. Верный ответ — 8.

Практика

Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.

Две А не рядом

Сколько пятибуквенных слов из АБ содержит ровно две А, которые не стоят рядом?

Введите число.

Коды Иры

Ира составляет 6-буквенные коды из букв К, А, Т, Е, Р, И. Каждую букву нужно использовать ровно один раз, при этом нельзя ставить рядом две гласные. Сколько различных кодов может составить Ира?

Введите число.

Дима составляет 5-буквенные коды из букв Д, О, М, И, К. Буква М должна встретиться ровно один раз, и рядом с ней не может стоять гласная. Остальные буквы можно использовать любое количество раз. Сколько различных кодов может составить Дима?

Введите число.

Без одинаковых соседей

Сколько четырёхбуквенных слов из АБВ не содержит двух одинаковых букв подряд?

Введите число.

С А и без одинаковых соседей

Сколько шестибуквенных слов из АБВГ начинается с А и не содержит двух одинаковых букв подряд?

Введите число.

П и Л рядом

Сколькими способами можно переставить буквы слова ПЛАСТ так, чтобы П и Л стояли рядом?

Введите число.

Гласные и согласные чередуются

Сколько шестибуквенных слов из АОБВГ, в которых гласные и согласные чередуются?

Введите число.