Задание 8. (А. Кабанов, 2024)
Задание 8. (А. Кабанов, 2024)
Задание 8. (А. Кабанов, 2024)
Все 5-буквенные слова, составленные из букв А, О, У, записаны в обратном алфавитном порядке. Вот начало списка:
УУУУУ УУУУО УУУУА УУУОУ ……
Запишите слово, которое стоит на 240-м месте от начала списка.
АААОА
Вариант 1:
from itertools import * k = 0 for i in product('уоа', repeat = 5): k += 1 if k == 240: print(''.join(i)); break
Вариант 2:
from itertools import * for i, c in enumerate(product(sorted('аоу', reverse = 1), repeat = 5), 1): if i == 240: print(''.join(c)); break
Все 5-буквенные слова, составленные из 5 букв А, К, Л, О, Ш, записаны в алфавитном порядке. Вот начало списка:
ААААА ААААК ААААЛ ААААО ААААШ АААКА ……
На каком месте от начала списка стоит слово ШКОЛА?
2711
Вариант 1:
from itertools import * k = 0 for i in product('аклош', repeat = 5): k += 1; s = ''.join(i) if s == 'школа': print(k); break
Вариант 2:
from itertools import * for i, c in enumerate(product(sorted('школа'), repeat = 5), 1): if ''.join(c) == 'школа': print(i); break
Сколько слов длины 5, начинающихся с гласной буквы, можно составить из букв Е, Г, Э? Каждая буква может входить в слово несколько раз. Слова не обязательно должны быть осмысленными словами русского языка.
162
Вариант 1:
from itertools import * ans = set() for i in product('егэ', repeat = 5): s = ''.join(i) if s[0] in 'еэ': ans.add(s) print(len(ans), list(ans)[:100])
Вариант 2
def f(s): return 1 if len(s) == 5 else sum(f(s+x) for x in 'егэ') print(sum(f(s) for s in 'еэ'))
Сколько существует различных символьных последовательностей длины 5 в четырёхбуквенном алфавите {A, C, G, T}, которые содержат ровно две буквы A?
270
from itertools import * ans = set() for i in product('acgt', repeat = 5): s = ''.join(i) if s.count('a') == 2: ans.add(s) print(len(ans), list(ans)[:100])
Вася составляет 5-буквенные слова, в которых есть только буквы С, Л, О, Н, причём буква С используется в каждом слове ровно 1 раз. Каждая из других допустимых букв может встречаться в слове любое количество раз или не встречаться совсем. Словом считается любая допустимая последовательность букв, не обязательно осмысленная. Сколько существует таких слов, которые может написать Вася?
405
from itertools import * ans = set() for i in product('слон', repeat = 5): s = ''.join(i) if s.count('с') == 1: ans.add(s) print(len(ans), list(ans)[:100])
Вася составляет 3-буквенные слова, в которых есть только буквы В, Е, С, Н , А, причём буква А используется в каждом слове хотя бы 1 раз. Каждая из других допустимых букв может встречаться в слове любое количество раз или не встречаться совсем. Словом считается любая допустимая последовательность букв, не обязательно осмысленная. Сколько существует таких слов, которые может написать Вася?
61
from itertools import * ans = set() for i in product('весна', repeat = 3): s = ''.join(i) if s.count('а') > 0: ans.add(s) print(len(ans), list(ans)[:100])
Вася составляет 4-буквенные коды из букв У, Л, Е, Й. Каждую букву нужно использовать ровно 1 раз, при этом код не может начинаться с буквы Й и не может содержать сочетания ЕУ. Сколько различных кодов может составить Вася?
14
from itertools import * ans = set() for i in permutations('улей'): s = ''.join(i) if s[0] != 'й' and 'еу' not in s: ans.add(s) print(len(ans), list(ans)[:100])
Маша составляет 5-буквенные коды из букв В, У, А, Л, Ь. Каждую букву нужно использовать ровно 1 раз, при этом буква Ь не может стоять на первом месте и перед гласной. Сколько различных кодов может составить Маша?
60
from itertools import * ans = set() for i in permutations('вуаль'): s = ''.join(i) if s[0] != 'ь' and 'ьа' not in s and 'ьу' not in s: ans.add(s) print(len(ans), list(ans)[:100])
Маша составляет шестибуквенные слова перестановкой букв слова КАПКАН. При этом она избегает слов с двумя подряд одинаковыми буквами. Сколько различных кодов может составить Маша?
84
from itertools import * ans= set() for i in permutations('капкан'): s = ''.join(i) if 'кк' not in s and 'аа' not in s: ans.add(s) print(len(ans), list(ans)[:100])
Игорь составляет таблицу кодовых слов для передачи сообщений, каждому сообщению соответствует своё кодовое слово. В качестве кодовых слов Игорь использует трёхбуквенные слова, в которых могут быть только буквы Ш, К, О, Л, А, причём буква К появляется ровно 1 раз. Каждая из других допустимых букв может встречаться в кодовом слове любое количество раз или не встречаться совсем. Сколько различных кодовых слов может использовать Игорь?
48
from itertools import * ans = set() for i in product('школа', repeat = 3): s = ''.join(i) if s.count('к') == 1: ans.add(s) print(len(ans), list(ans)[:100])
Определите количество пятизначных чисел, записанных в восьмеричной системе счисления, в записи которых ровно одна цифра 6, при этом никакая нечётная цифра не стоит рядом с цифрой 6.
2961
from itertools import * ans = set() for i in product('01234567', repeat = 5): s = ''.join(i) if s[0] != '0' and s.count('6') == 1: for c in '1357': s = s.replace(c, '*') if '*6' not in s and '6*' not in s: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
Определите количество пятизначных чисел, записанных в девятеричной системе счисления, которые не начинаются с нечётных цифр, не оканчиваются цифрами 1 или 8, а также содержат в своей записи не более одной цифры 3.
18944
from itertools import * ans = set() for i in product('012345678', repeat = 5): s = ''.join(i) if s[0] not in '01357' and s[-1] not in '18' and s.count('3') <= 1: ans.add(s) print(len(ans), list(ans)[:100])
Андрей составляет 7-буквенные коды из букв А, Н, Д, Р, Е, Й. Буквы А и Й должны встречаться в коде ровно по одному разу, при этом буква Й не может стоять на первом месте. Остальные допустимые буквы могут встречаться произвольное количество раз или не встречаться совсем. Сколько различных кодов может составить Андрей?
36864
from itertools import * ans = set()] for i in product('андрей', repeat = 7): s = ''.join(i) if s.count('а') == 1 and s.count('й') == 1 and s[0] != 'й': ans.add(s) print(len(ans), list(ans)[:100])
Игорь составляет 8-буквенные коды из букв И, Г, О, Р, Ь. Буквы О и Ь должны встречаться в коде ровно по одному разу, при этом буква Ь не может стоять на первом месте. Остальные допустимые буквы могут встречаться произвольное количество раз или не встречаться совсем. Сколько различных кодов может составить Игорь?
35721
from itertools import * ans = set() for i in product('игорь', repeat = 8): s = ''.join(i) if s.count('о') == 1 and s.count('ь') == 1 and s[0] != 'ь': ans.add(s) print(len(ans), list(ans)[:100])
Сколько существует чисел, делящихся на 5, десятичная запись которых содержит 5 цифр, причём все цифры различны и никакие две чётные и две нечётные цифры не стоят рядом.
480
Вариант 1 (переборный):
ans = set() for x in range(10000, 100000, 5): s = str(x) if len(set(s)) == 5: for c in '02468': s = s.replace(c, '*') for c in '13579': s = s.replace(c, '#') if '**' not in s and '##' not in s: ans.add(x) print(len(ans), list(ans)[:100])
Вариант 2 (эффективный):
alph = '0123456789' def f(s): if len(s) == 5: return 1 if len(s) == 4: return sum(f(s+x) for x in '05' if (int(s[-1]) % 2 == 0 \ and x=='5' or int(s[-1]) % 2 != 0 and x == '0') \ and x not in s) return sum(f(s+x) for x in alph if (int(s[-1]) % 2 == 0 and int(x) % 2 != 0 \ or int(s[-1]) % 2 != 0 and int(x) % 2 == 0) and x not in s) print(sum(f(s) for s in alph[1:]))
Сколько существует чисел, делящихся на 5, десятичная запись которых содержит 6 цифр, причём все цифры различны и никакие две чётные и две нечётные цифры не стоят рядом.
1296
Вариант 1 (переборный):
ans = set() for x in range(100_000, 1_000_000, 5): s = str(x) if len(set(s)) == 6: for c in '02468': s = s.replace(c, '*') for c in '13579': s = s.replace(c, '#') if '**' not in s and '##' not in s: ans.add(x) print(len(ans), list(ans)[:100])
Вариант 2 (эффективный):
alph = '0123456789' def f(s): if len(s) == 6: return 1 if len(s) == 5: return sum(f(s+x) for x in '05' if (int(s[-1]) % 2 == 0 \ and x=='5' or int(s[-1]) % 2 != 0 and x == '0') \ and x not in s) return sum(f(s+x) for x in alph if (int(s[-1]) % 2 == 0 and int(x) % 2 != 0 \ or int(s[-1]) % 2 != 0 and int(x) % 2 == 0) and x not in s) print(sum(f(s) for s in alph[1:]))
Сколько существует чисел, делящихся на 5, десятичная запись которых содержит 7 цифр, причём все цифры различны и никакие две чётные и две нечётные цифры не стоят рядом.
2880
Вариант 1 (переборный):
ans = set() for x in range(1_000_000, 10_000_000, 5): s = str(x) if len(set(s)) == 7: for c in '02468': s = s.replace(c, '*') for c in '13579': s = s.replace(c, '#') if '**' not in s and '##' not in s: ans.add(x) print(len(ans), list(ans)[:100])
Вариант 2 (эффективный):
alph = '0123456789' def f(s): if len(s) == 7: return 1 if len(s) == 6: return sum(f(s+x) for x in '05' if (int(s[-1]) % 2 == 0 \ and x=='5' or int(s[-1]) % 2 != 0 and x == '0') \ and x not in s) return sum(f(s+x) for x in alph if (int(s[-1]) % 2 == 0 and int(x) % 2 != 0 \ or int(s[-1]) % 2 != 0 and int(x) % 2 == 0) and x not in s) print(sum(f(s) for s in alph[1:]))
Сколько существует чисел, делящихся на 5, десятичная запись которых содержит 8 цифр, причём все цифры различны и никакие две чётные и две нечётные цифры не стоят рядом.
5184
Вариант 1:
alph = '0123456789' def f(s): if len(s) == 8: return 1 if len(s) == 7: return sum(f(s+x) for x in '05' if (int(s[-1]) % 2 == 0 \ and x=='5' or int(s[-1]) % 2 != 0 and x == '0') \ and x not in s) return sum(f(s+x) for x in alph if (int(s[-1]) % 2 == 0 and int(x) % 2 != 0 \ or int(s[-1]) % 2 != 0 and int(x) % 2 == 0) and x not in s) print(sum(f(s) for s in alph[1:]))
Вариант 2 (аналитическое решение):
from itertools import * k = 0 for i in product('чн', repeat = 8): s = ''.join(i) if 'чч' not in s and 'нн' not in s: if s[0] == 'ч': k += 4**3 * 3**2 * 2**2 else: k += 5 * 4**2 * 3**2 * 2**2 print(k)
Из букв слова К А Н К А Н составляются 6-буквенные последовательности. Сколько можно составить различных последовательностей, если известно, что в каждой из них содержится не менее 3 согласных?
656
from itertools import * ans = set() for i in product('канкан', repeat = 6): s = ''.join(i) for c in 'кн': s = s.replace(c, '*') if s.count('*') >= 3: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
Маша составляет 7-буквенные коды из букв П, Е, С, К, А, Р, Ь. Каждую букву нужно использовать ровно 1 раз, при этом буква Ь не может стоять на первом месте, а также перед буквами Е, А и Р. Сколько различных кодов может составить Маша?
2520
from itertools import * ans = set() for i in permutations('пескарь'): s = ''.join(i) for c in 'еар': s = s.replace(c, '*') if s[0] != 'ь' and 'ь*' not in s: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(А. Минак) Все 6-буквенные слова, составленные из букв А, О, И, Э, У, записаны в алфавитном порядке и пронумерованы. Вот начало списка:
1. АААААА 2. АААААИ 3. АААААО 4. АААААУ 5. АААААЭ ...
Под каким номером стоит последнее слово, начинающееся и заканчивающееся буквой О?
9373
from itertools import * k = 0 for i in product('аиоуэ', repeat = 6): k += 1; s = ''.join(i) if s[0] == s[-1] == 'о': n = k; sl = s print(n, sl)
(Б.С. Михлин) Разведчик кодирует символы текста пятью стрелками. Каждая стрелка может иметь четыре положения (направления): ↑→↓←. Для первой стрелки запрещено положение вверх: ↑. Некоторые стрелки не могут находиться в одинаковом положении (направлении): первая и пятая, вторая и четвертая. Сколько всего различных символов текста может закодировать разведчик?
432
from itertools import * ans = set() for i in product('1234', repeat = 5): s = ''.join(i) if s[0] != '1' and s[0] != s[4] and s[1] != s[3]: ans.add(s) print(len(ans), list(ans)[:100])
(Б.С. Михлин) Разведчик кодирует символы текста пятью стрелками. Каждая стрелка может иметь четыре положения (направления): ↑→↓←. Для первой стрелки запрещено положение вверх: ↑. Запрещено использовать коды, которые являются палиндромами (т.е. одинаково читаются как слева направо, так и справа налево). Сколько всего различных символов текста может закодировать разведчик?
720
from itertools import * ans = set() for i in product('1234', repeat = 5): s = ''.join(i) if s[0] != '1' and s != s[::-1]: ans.add(s) print(len(ans), list(ans)[:100])
(Е. Джобс) Настя составляет 6-буквенные слова, в которых есть только буквы Д, Ж, О, Б, С, причём буквы Д, О, С встречаются ровно по одному разу. Буква Ж встречается не более 2 раз, а буква Б может встречаться любое количество раз или не встречаться вовсе. Словом считается любая допустимая последовательность букв, не обязательно осмысленная. Сколько различных слов может составить Настя?
840
from itertools import * ans = set() for i in product('джобс', repeat = 6): s = ''.join(i) if all(s.count(c) == 1 for c in 'дос') and s.count('ж') <= 2: ans.add(s) print(len(ans), list(ans)[:100])
(Е. Джобс) Все 4-буквенные слова, составленные из букв П, Р, В, Д, А, записаны в алфавитном порядке и пронумерованы. Вот начало списка:
1. АААА 2. АААВ 3. АААД 4. АААП 5. АААР 6. ААВА ...
Найдите номер первого слова в этом списке, которое не содержит гласных и одинаковых букв.
195
from itertools import * k = 0 for i in product('авдпр', repeat = 4): k += 1; s = ''.join(i) if 'а' not in s and len(set(s)) == 4: print(k); break
(Е. Джобс) Ипполит составляет 6-буквенные слова, в которых есть только буквы М, Е, Ч, Т, А, причём буква А используется в каждом слове хотя бы 3 раза. Каждая из других допустимых букв может встречаться в слове любое количество раз или не встречаться совсем. Словом считается любая допустимая последовательность букв, не обязательно осмысленная. Сколько различных слов может написать Ипполит?
1545
from itertools import * ans = set() for i in product('мечта', repeat = 6): s = ''.join(i) if s.count('а') >= 3: ans.add(s) print(len(ans), list(ans)[:100])
(Е. Джобс) Женя составляет слова переставляя буквы З, А, П, И, С, Ь. Сколько слов может составить Женя, если известно, что Ь не может стоять на первом месте и после гласной?
360
from itertools import * ans = set() for i in permutations('запись'): s = ''.join(i) if s[0] != 'ь' and 'аь' not in s and 'иь' not in s: ans.add(i) print(len(ans), list(ans)[:100])
(Е. Джобс) Сколько шестнадцатеричных кодов чисел длиной 15 можно составить, если известно, что цифры идут в порядке убывания, при этом четные и нечетные цифры чередуются?
2
Вариант 1 (аналитическое решение):
1-е слово: F E D C B A 9 8 7 6 5 4 3 2 1 2-е слово: E D C B A 9 8 7 6 5 4 3 2 1 0
Вариант 2:
def f(l, d): if l == 15: return 1 return sum(f(l+1, x) for x in range(16) if d > x and\ (d % 2 == 0 and x % 2 != 0 or d % 2 != 0 and x % 2 == 0)) print(sum(f(1,x) for x in range(1, 16)))
(Е. Джобс) Сколько шестнадцатеричных кодов чисел длиной 12 можно составить, если известно, что цифры идут в порядке убывания, при этом четные и нечетные цифры чередуются?
104
def f(l, d): if l == 12: return 1 return sum(f(l+1, x) for x in range(16) if d > x and\ (d % 2 == 0 and x % 2 != 0 or d % 2 != 0 and x % 2 == 0)) print(sum(f(1,x) for x in range(1, 16)))
Сколько чисел длиной 6 можно составить, если известно, что цифры идут в порядке убывания, при этом четные и нечетные цифры чередуются?
35
Вариант 1:
def f(l, d): if l == 6: return 1 return sum(f(l+1, x) for x in range(10) if d > x and\ (d%2==0 and x%2!=0 or d%2!=0 and x%2==0)) print(sum(f(1,x) for x in range(1, 10)))
Вариант 2:
from itertools import * ans = set() for i in product('0123456789', repeat = 6): s = ''.join(i) if s[0] != '0': for j in range(1, len(s)): if s[j - 1] <= s[j]: break else: for c in '02468': s = s.replace(c, '*') for c in '13579': s = s.replace(c, '#') if '**' not in s and '##' not in s: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(А. Богданов) Марина собирает восьмибуквенные слова из букв своего имени. Первые четыре буквы новых слов берутся из первых четырех букв имени, так чтобы ни одна буква не повторялась. А последние четыре буквы из последних трех букв имени, и они могут многократно повторяться. На каком месте окажется имя МАРИАННА в отсортированном по алфавиту списке сгенерированных слов? Нумерация начинается с 1.
1078
from itertools import * ans = set() for i in permutations('мари'): for j in product('ина', repeat = 4): ans.add(''.join(i) + ''.join(j)) ans = sorted(list(ans)) print(ans.index('марианна') + 1)
(Е. Джобс) Сколько существует четных пятеричных чисел длиной 6, начинающихся с цифры 3?
1562
from itertools import * ans = set() for i in product('01234', repeat = 5): s = '3' + ''.join(i) if sum(map(int, s)) % 2 == 0: ans.add(s) print(len(ans), list(ans)[:100])
Ксения составляет слова из букв К, С, Е, Н, И, Я. Каждая гласная буква встречается в слове не более двух раз. Каждая согласная может стоять в слове на первой позиции, либо не встречаться вовсе. Сколько слов длиною более двух символов может составить Ксения?
1059
from itertools import * ans = set() for k in range(3, 8): for i in product('ксения', repeat = k): s = ''.join(i) if all(c not in s[1:] for c in 'ксн'): if all(s.count(c) <= 2 for c in 'еия'): ans.add(s) print(len(ans), list(ans)[:100])
(А. Куканова) Маша составляет четырёхбуквенные слова из букв A, B, C, D, E, причём сначала в слове должны быть расположены гласные в алфавитном порядке, затем согласные в обратном алфавитном порядке. Буквы могут повторяться. Слово может состоять только из гласных или только из согласных. Пример подходящего слова: AEDC. Сколько различных слов может составить Маша?
70
Расставим все буквы в допустимом порядке, т.е. как они могут следовать друг за другом:
получим AEDCB. Поставим каждой букве в соответствие цифры по возрастанию, учитывая возможный порядок букв в словах:
A - 1, E - 2, D - 3, C - 4, B - 5
Тогда, если произведем замену букв на соответствующие цифры, получим, что в любом
допустимом слове, цифры должны идти не по убыванию. Слово из примера: 1234.
В программе отбираем все комбинации из 4-х цифр, идущих по неубыванию.
from itertools import * ans = set() for i in product('12345', repeat = 4): s = ''.join(i) if all(s[j] >= s[j - 1] for j in range(1, len(s))): ans.add(s) print(len(ans), list(ans)[:100])
(А. Куканова) Василиса составляет 5-значные числа в 6-ичной системе счисления. Цифры в числе могут повторяться, но никакие две четные или две нечетные цифры не должны стоять рядом. Сколько чисел может составить Василиса?
405
from itertools import * ans = set() for i in product('012345', repeat = 5): s = ''.join(i) if s[0] != '0': for c in '024': s = s.replace(c, '*') for c in '135': s = s.replace(c, '#') if '**' not in s and '##' not in s: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(А. Куканова) Лена составляет 5-буквенные слова из букв Я, С, Н, О, В, И, Д, Е, Ц, причём слово должно начинаться с согласной и заканчиваться гласной. Первая и последняя буквы слова встречаются в нем только один раз; остальные буквы могут повторяться. Сколько слов может составить Лена?
6860
from itertools import * ans = set() for i in product('ясновидец', repeat = 5): s = ''.join(i) if s[0] in 'снвдц' and s.count(s[0]) == 1: if s[-1] in 'яоие' and s.count(s[-1]) == 1: ans.add(s) print(len(ans), list(ans)[:100])
(А. Куканова) Ада составляет 6-буквенные слова из букв Д, Е, Й, К, С, Т, Р, А. Буква Й встречается в слове ровно один раз, и после неё обязательно идёт согласная. Буквы в слове не повторяются. Сколько слов может составить Ада?
9000
from itertools import * ans = set() for i in permutations('дейкстра', 6): s = ''.join(i) if s.count('й') == 1 and s[-1] != 'й': if s[s.index('й') + 1] in 'дкстр': ans.add(s) print(len(ans), list(ans)[:100])
(А. Куканова) Ася составляет 7-буквенные слова из букв А, П, Е, Л, Ь, С, И, Н. Все буквы слова различны. Буква Ь, если встречается, стоит между двумя согласными. Сколько таких слов может составить Ася?
12240
from itertools import * ans = set() for i in permutations('апельсин', 7): s = ''.join(i) if s[0] != 'ь' and s[-1] != 'ь': if 'ь' in s: if s[s.index('ь') - 1] in 'плсн' and s[s.index('ь') + 1] in 'плсн': ans.add(s) else: ans.add(s) print(len(ans), list(ans)[:100])
(А. Куканова) Вероника составляет слова, меняя местами буквы в слове КЛАБХАУС так, что любые две соседние буквы различны между собой. Сколько слов, включая исходное, может составить Вероника?
15120
from itertools import * ans = set() for i in permutations('клабхаус'): s = ''.join(i) if 'аа' not in s: ans.add(s) print(len(ans), list(ans)[:100])
(А. Куканова) Марта составляет 6-буквенные слова из букв И, Н, Ф, А, причём буква Ф должна встречаться в слове ровно 2 раза. Остальные буквы могут встречаться любое количество раз или не встречаться вообще. Сколько слов может составить Марта?
1215
from itertools import * ans = set() for i in product('инфа', repeat = 6): s = ''.join(i) if s.count('ф') == 2: ans.add(s) print(len(ans), list(ans)[:100])
(А. Куканова) Лиля составляет 5-буквенные слова из букв С, О, Т, К, А, П, Л, З. Слово не должно заканчиваться на гласную и содержать сочетания ЗЛО. Буквы в слове не повторяются. Сколько слов может составить Лиля?
5008
from itertools import * ans = set() for i in permutations('соткаплз', 5): s = ''.join(i) if s[-1] not in 'оа' and 'зло' not in s: ans.add(s) print(len(ans), list(ans)[:100])
(А. Куканова) Лиза составляет слова из букв О, Н, И, К, С, причём буква С должна встречаться в этих словах ровно 3 раза, а буква О — ровно 1 раз. Длина слова составляет от 4 до 6 букв. Сколько различных слов может составить Лиза?
604
from itertools import * ans = set() for k in range(4, 7): for i in product('оникс', repeat = k): s = ''.join(i) if s.count('с') == 3 and s.count('о') == 1: ans.add(s) print(len(ans), list(ans)[:100])
(А. Куканова) Маша составляет 6-буквенные слова из букв З, Е, Р, К, А, Л, О, содержащие букву К, но не более 4 раз. Остальные буквы не могут повторяться. Сколько различных слов может составить Маша?
12570
from itertools import * ans = set() for i in product('зеркало', repeat = 6): s = ''.join(i) if s.count('к') <= 4 and len(set(s)) == 6 - s.count('к') + 1: ans.add(s) print(len(ans), list(ans)[:100])
(А. Куканова) Евгения составляет 4-значные числа в 8-ичной системе счисления. Числа должны начинаться с чётной цифры, и цифры в них располагаются в невозрастающем порядке. Сколько различных чисел может составить Евгения?
129
from itertools import * ans = set() for i in product('01234567', repeat = 4): s = ''.join(i) if s[0] in '246' and all(s[j - 1] >= s[j] for j in range(1, len(s))): ans.add(s) print(len(ans), list(ans)[:100])
(А. Куканова) Полина составляет 5-значные числа в 5-ричной системе счисления, которые содержат не более 3 чётных цифр. Сколько различных чисел может составить Полина?
1744
F(n) > F(n + 1) только для чисел, оканчивающихся на 9:
from itertools import * ans = set() for i in product('01234', repeat = 5): s = ''.join(i) if s[0] != '0': for c in '024': s = s.replace(c, '*') if s.count('*') <= 3: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(А. Куканова) Мила составляет 4-значные числа в 8-ичной системе. Сколько различных чисел, делящихся на 4 без остатка, может составить Мила?
896
ans = set() for x in range(0o1000, 0o10000): if x % 4 == 0: ans.add(x) print(len(ans), list(ans)[:100])
(А. Куканова) Оля составляет 5-буквенные слова из букв К, У, С, А, Т, Ь, причём слова не должны начинаться на мягкий знак и содержать сочетание СУК. Буквы в слове не должны повторяться. Сколько различных слов может составить Оля?
586
from itertools import * ans = set() for i in permutations('кусать', 5): s = ''.join(i) if s[0] != 'ь' and 'сук' not in s: ans.add(s) print(len(ans), list(ans)[:100])
Вася составляет слова из букв слова ВОЛКОДАВ. Код должен состоять из 8 букв, и каждая буква в нём должна встречаться столько же раз, сколько в заданном слове. Кроме того, в коде должны стоять рядом две гласные или две согласные буквы. Сколько различных слов может составить Вася?
10080
from itertools import * ans = set() for i in permutations('волкодав'): s = ''.join(i) for c in 'оа': s = s.replace(c, '*') for c in 'влкд': s = s.replace(c, '#') if '**' in s or '##' in s: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
Вася составляет слова из букв слова ШАРЛАТАН. Код должен состоять из 8 букв, и каждая буква в нём должна встречаться столько же раз, сколько в заданном слове. Кроме того, в коде должны стоять рядом две гласные или две согласные буквы. Сколько различных слов может составить Вася?
6720
from itertools import * ans = set() for i in permutations('шарлатан'): s = ''.join(i) for c in 'шрлтн': s = s.replace(c, '*') if '**' in s or 'аа' in s: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
Вася составляет слова из букв слова ПРЕПАРАТ. Код должен состоять из 8 букв, и каждая буква в нём должна встречаться столько же раз, сколько в заданном слове. Кроме того, в коде должны стоять рядом две гласные или две согласные буквы. Сколько различных слов может составить Вася?
5040
from itertools import * ans = set() for i in permutations('препарат'): s = ''.join(i) for c in 'еа': s = s.replace(c, '*') for c in 'прт': s = s.replace(c, '#') if '**' in s or '##' in s: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(PRO100 ЕГЭ) Иван составляет слова из букв Г, О, Л, соблюдая следующие ограничения: 1) две одинаковые буквы не могут стоять рядом; 2) буква Г может стоять только между буквами О и Л или Л и О; то есть, в начале слова и на конце буква Г стоять не может; сочетания ОГЛ и ЛГО разрешены, сочетания ОГО и ЛГЛ запрещены. Сколько 20-буквенных слов может составить Иван?
13530
Мой вариант решения:
def f(s): if len(s) == 20: return 1 if s[-1] == 'г': return f(s + 'л') if s[-2] == 'о' else f(s + 'о') if len(s) < 19: if s[-1] == 'о': return f(s + 'л') + f(s + 'г') else: return f(s + 'о') + f(s + 'г') else: if s[-1] == 'о': return f(s + 'л') else: return f(s + 'о') print(f('о') + f('л'))
Вариант решения от PRO100 ЕГЭ (Числа Фибоначчи?):
f, fPrev = 1, 0 for i in range(2, 20 + 1): f, fPrev = f + fPrev, f print(i, f, fPrev) print(2 * f)
(Е. Джобс) Петя составляет четырёхбуквенные слова из букв слова СТЕПУХА и записывает их в алфавитном порядке в список. Вот начало списка:
1. АААА 2. АААЕ 3. АААП 4. АААС 5. АААТ 6. АААУ 7. АААХ 8. ААЕА ...
Сколько существует слов, стоящих на позициях с номером большим 1000, в которых нет двух одинаковых подряд идущих букв?
883
def f(s): for i in range(1, len(s)): if s[i-1] == s[i]: return 0 return 1 from itertools import * k = 0; ans = set() for i in product('степуха', repeat = 4): s = ''.join(i); k += 1 if k > 1000 and f(s): ans.add(s) print(len(ans), list(ans)[:100])
(Р. Тукеев) Марат составляет шестибуквенные слова из букв слова А, И, К, Л, М, Ь и записывает их в алфавитном порядке в список. Вот начало списка:
1. АААААА 2. АААААИ 3. АААААК 4. АААААЛ 5. АААААМ 6. АААААЬ 7. ААААИА ...
Найдите номер первого слова в списке, начинающегося на К и заканчивающегося на Ь, в котором каждая буква встречается всего лишь раз, а разница между номерами этого слова и его перевёртыша составляет 26655. В ответе укажите сумму цифр этого номера. (Пример перевёртыша: питон – нотип).
24
from itertools import * ans = [] #список для хранения всех слов k = [] #список для хранения индексов слов, начинающихся на К и заканчивающихся #на Ь, в которых каждая буква встречается один раз count = 0 #счетчик индексов всех слов подряд, начиная с 0 for i in product('аиклмь', repeat = 6): s = ''.join(i) ans.append(s) #каждое слово сохраняем, для возможности поиска 'перевертыша' if s[0] == 'к' and s[-1] == 'ь' and len(set(s)) == 6: k.append(count) #сохраняем индексы всех подходящих слов count += 1 #увеличиваем значение счетчика #перебираем все идексы походящих слов for c in k: #находим разность между 'перевертышем' и соответствующим словом if ans.index(ans[c][::-1]) - c == 26_655: #т.к. нумерация в списке с 1, а у индексов с 0, нужно увеличить индекс на 1 print(sum(map(int, str(c + 1)))) break
(А. Сапегин) Максим составляет четырехбуквенные слова из букв П, О, Л, Я, К, В, причем известно, что ровно две буквы на тех же позициях, что и в слове ВОЛК. Сколько различных слов может составить Максим?
150
from itertools import * ans = set() et = 'волк' #эталонное слово for i in product('полякв', repeat = 4): s = ''.join(i) k = 0 #счетчик количества совпадающих символов на одинаковых позициях #в сгенерированном слове и в эталонном for j in range(4): #перебираем индексы if s[j] == et[j]: k += 1 #если совпали символы в двух словах, работает счетчик if k == 2: ans.add(s) #если два совпадения - подходящее слово print(len(ans), list(ans)[:100])
(И. Туров) Ирина составляет из букв слова ТИХОРЕЦК четырехбуквенные слова, в которых ровно две гласные буквы, нет повторяющихся букв и ровно две буквы стоят на тех же позициях, что и в слове ТИХО. Сколько различных слов может составить Ирина?
60
from itertools import * ans = set() et = 'тихо' #эталонное слово for i in permutations('тихорецк', 4): s = ''.join(i) ss = s #для подсчета кол-ва гласных создаем копию строки for c in 'иое': ss = ss.replace(c, '*') #заменяем в ней гласные на * if ss.count('*') == 2: #проверяем, что гласных ровно две k = 0 #счетчик количества совпадающих символов на одинаковых позициях #в сгенерированном слове и в эталонном for j in range(4): #перебираем индексы if s[j] == et[j]: k += 1 #считаем количество совпадений if k == 2: ans.add(s) #если два совпадения - подходящее слово print(len(ans), list(ans)[:100])
(Е. Джобс) Петя составляет пятибуквенные слова из букв слова УЖЕМАЙ и записывает их в алфавитном порядке в список. Вот начало списка
1. ААААА 2. ААААЕ 3. ААААЖ 4. ААААЙ 5. ААААМ 6. ААААУ 7. АААЕА ...
Сколько существует слов, стоящих в списке на позициях с чётными номерами, в которых нет двух одинаковых подряд идущих букв?
1875
def f(s): for i in range(1, len(s)): if s[i-1] == s[i]: return 0 return 1 from itertools import * ans = set(); k = 0 for i in product('аежйму', repeat = 5): k += 1; s = ''.join(i) if k % 2 == 0 and f(s): ans.add(s) print(len(ans), list(ans)[:100])
(Е. Джобс) Петя составляет четырехбуквенные слова из символов КЕГЭ2023 и записывает их в алфавитном порядке в список. Считается, что цифры в используемом алфавите следуют за буквами. Вот начало списка:
1. ГГГГ 2. ГГГЕ 3. ГГГК 4. ГГГЭ 5. ГГГ0 6. ГГГ2 7. ГГГ3 8. ГГЕГ ...
Определите порядковый номер первого слова, которое начинается с цифры и не содержит двух подряд идущих одинаковых символов.
1380
from itertools import * k = 0 for i in product('гекэ023', repeat = 4): k += 1 s = ''.join(i) if s[0] in '023': for j in range(1, 4): if s[j-1] == s[j]: break else: print(k); break
(А. Богданов) Оля составляет слова перестановкой букв слова СПОРТЛОТО, избегая слов с гласной и в начале, и в конце слова. Все полученные различные слова Оля отсортировала по алфавиту и пронумеровала, начиная с 1. Какой номер у последнего слова?
12600
Нам подходят все числа у которых в двоичной СС только две единицы
from itertools import * ans = [] for i in set(permutations('спортлото')): s = ''.join(i) if s[0] != 'о' and s[-1] != 'о': ans.append(s) print(len(ans))
(Е. Джобс) Все четырехбуквенные слова, в составе которых могут быть только буквы П, Я, Т, Ь, Д, Н, Е, Й, записаны в алфавитном порядке и пронумерованы начиная с 1. Вот начало списка:
1. ДДДД 2. ДДДЕ 3. ДДДЙ 4. ДДДН 5. ДДДП 6. ДДДТ 7. ДДДЬ 8. ДДДЯ 9. ДДЕД ...
Под каким номером в списке стоит последнее слово, которое не содержит ни одной гласной и все буквы в нем различны?
3428
from itertools import * ans = []; k = 0 for i in product('дейнптья', repeat = 4): k += 1 s = ''.join(i) if len(set(s)) == 4 and all(c not in s for c in 'ея'): ans.append(k) print(max(ans))
(А. Богданов) Оля составляет слова перестановкой букв слова СПОРТЛОТО, избегая слов с гласной в конце слова. Все полученные различные слова Оля отсортировала по алфавиту и пронумеровала, начиная с 1. Какой номер у последнего слова?
20160
from itertools import * ans = set() for i in set(permutations('спортлото')): s = ''.join(i) if s[-1] != 'о': ans.add(s) print(len(ans), list(ans)[:100])
(А. Богданов) Оля составляет слова перестановкой букв слова СПОРТЛОТО, оставляя слова с гласной либо только в начале, либо только в конце слова. Все полученные различные слова Оля отсортировала по алфавиту и пронумеровала, начиная с 1. Какой номер у последнего слова?
15120
from itertools import * ans = set() for i in set(permutations('спортлото')): s = ''.join(i) if (s[0] == 'о') != (s[-1] =='о'): ans.add(s) print(len(ans), list(ans)[:100])
(Л. Малинов) Лёня составляет 9-буквенные коды из букв К, О, М, П, Ь, Ю, Т, Е, Р. Каждую букву нужно использовать ровно 1 раз. Его интересуют коды, в которых предпоследняя буква – Е и первые 4 буквы слова расположены в алфавитном порядке. Сколько различных подходящих кодов может составить Лёня?
1680
from itertools import * ans = set() for i in permutations('компьютер'): s = ''.join(i) if s[-2] == 'е' and s[0] < s[1] < s[2] < s[3]: ans.add(s) print(len(ans), list(ans)[:100])
(Л. Малинов) Ваня составляет 6-буквенные слова из букв В, И, Д, Е, О. Его интересуют коды, в которых есть хотя бы одна буква И и хотя бы одна буква Е. Кроме того, все гласные в слове должны стоять в алфавитном порядке. Сколько различных подходящих кодов может составить Ваня?
1215
from itertools import * ans = set() for i in product('видео', repeat = 6): s = ''.join(i) if s.count('и') > 0 and s.count('е') > 0: s1 = s.replace('в', '').replace('д', '') for c in range(len(s1) - 1): if s1[c] > s1[c+1]: break else: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(Л. Малинов) Лёня составляет 5-буквенные слова из букв Э, Ф, Ф, Е, К, Т. Его интересуют коды, в которых все буквы различны, при этом все гласные буквы стоят в алфавитном порядке, а все согласные буквы – в обратном алфавитном порядке. Сколько различных слов может составить Лёня?
10
Так как все буквы должны быть различны, то берем алфавит ЭФЕКТ и используем permutations. Гласные должны стоять в алфавитном порядке, т.е. сначала Е, потом Э, согласные должны стоять в ОБРАТНОМ алфавитном порядке, т.е. Ф, Т, К, но т.к. они могут стоять не по порядку, то проверяем не комбинации, а индексы букв
from itertools import * ans = set() for i in permutations('эфект', 5): s = ''.join(i) # проверка расположения гласных букв if s.index('е') < s.index('э'): # проверка расположения согласных букв: if s.index('ф') < s.index('т') < s.index('к'): ans.add(''.join(i)) print(len(ans), ans)
(Д. Статный) Алексей составляет пятибуквенные слова из букв латинского алфавита. Его интересуют слова, в которых не менее одной гласной. Сколько таких слов может составить Алексей?
8681376
#5710 from itertools import * alf = 'qwertyuiopasdfghjklzxcvbnm' ans = [] for i in product(alf, repeat = 5): s = ''.join(i) for c in 'eyuioa': s = s.replace(c, '*') if s.count('*') > 0: ans.append(''.join(i)) print(len(ans))
(Д. Статный) Миша составляет все возможные пятибуквенные слова из букв латинского алфавита. Найдите общее число гласных во всех этих словах.
13709280
from itertools import * alf = 'qwertyuiopasdfghjklzxcvbnm' k = 0 for i in product(alf, repeat = 5): s = ''.join(i) for c in 'eyuioa': s = s.replace(c, '*') k += s.count('*') print(k)
(Д. Статный) Сергей составляет семизначные десятичные числа, такие что 2-я и 3-я цифры числа представляют собой квадрат первой цифры, а перед последней цифрой числа записан куб последней цифры. Сколько подходящих чисел может составить Сергей?
2925
в задаче подразумевается, что 2-й и 3-й старшие разряды содержат квадрат первой цифры, т.е. число от 0 до 81, а перед последней цифрой может стоять число от 0 до 729 (получается, что число может занимать разное количество разрядов: от 1-го до 3-х разрядов)
ans = [] for x in range(1000000, 10000000): xs = list(map(int, str(x))) if xs[0]**2 == xs[1]*10 + xs[2]: if 0 <= xs[-1]**3 <= 9 and xs[-1]**3 == xs[-2] or \ 9 < xs[-1]**3 < 100 and xs[-1]**3 == xs[-3]*10 + xs[-2] or \ xs[-1]**3 >= 100 and xs[-1]**3 == xs[-4]*100 + xs[-3]*10 + xs[-2]: ans.append(x) print(len(ans))
(Д. Статный) Михаил составляет 6-значные числа, которые кратны значению первой цифры 12-ричной системы записи этого числа. Сколько таких чисел он мог получить?
477703
def f(x): while x: c = x%12 x//=12 return c ans = [] for x in range(100000, 1000000): if x % f(x) == 0: ans.append(x) print(len(ans))
(Д. Статный) Григорий составляет 16-буквенные слова из букв А, Н, Т, И, У, О, П, Я, выбирая такие, в которых содержится комбинация АНТИУТОПИЯ. Сколько слов сможет составить Григорий?
1835008
Обозначим Z комбинацию 'антиутопия', значит 10 позиций преобразуются в одну и нужно составлять слова длиной 7 символов. Учитываем, что слово 'антиутопия' может входить в комбинацию только 1 раз (не хватает длины: в слове 10 символов, в комбинации - 16)
from itertools import * ans = set() for i in product('антиуопяZ', repeat = 7): s = ''.join(i) if s.count('Z') == 1: ans.add(s) print(len(ans))
(Д. Статный) Григорий составляет 16-буквенные слова из букв А, Н, Т, И, У, О, П, Я, выбирая такие, в которых содержится комбинация АНТИУТОПИЯ, причем первая буква – не А, а последняя – не Я. Сколько слов сможет составить Григорий?
1003520
Обозначим Z комбинацию 'антиутопия', значит 10 позиций преобразуются в одну и нужно составлять слова длиной 7 символов. Учитываем, что слово 'антиутопия' может входить в комбинацию только 1 раз (не хватает длины: в слове 10 символов, в комбинации - 16)
from itertools import * ans = set() for i in product('антиуопяZ', repeat = 7): s = ''.join(i) if s[0] != 'а' and s[-1] != 'я' and s[0] != 'Z' and s[-1] != 'Z'\ and s.count('Z') == 1: ans.add(s) print(len(ans))
(А. Игнатюк) Ася составляет семибуквенные слова из букв слова САМОКАТ, причем известно, что буквы в словах могут повторяться любое количество раз или же не встречаться вовсе. Помогите Асе найти количество слов, в котором один раз встречается комбинация САМ, справа и слева от которой находятся одинаковые гласные буквы.
216
from itertools import * ans = set() for i in set(product('самокат*', repeat = 5)): s = ''.join(i) if s.count('*') == 1 and s[0] != '*' and s[-1] != '*': if s[s.index('*') - 1] == s[s.index('*') + 1]\ and s[s.index('*') - 1] in 'ао': ans.add(s) print(len(ans), list(ans)[:100])
(А. Игнатюк) Алина составляет пятибуквенные слова из букв слова POLYGON, причем известно, что буквы в словах могут повторяться любое количество раз или же не встречаться вовсе. Помогите Алине найти количество различных слов, являющимися палиндромами и содержащими в середине гласную букву.
72
from itertools import * ans = set() for i in set(product('polygon', repeat = 5)): s = ''.join(i) if s == s[::-1] and s[2] in 'oy': ans.add(s) print(len(ans), list(ans)[:100])
(П. Финкель) Коля составляет 5-буквенные слова из букв Т, И, М, А, Ш, Е, В, С, К и записывает их в обратном алфавитном порядке. Вот начало списка:
1. ШШШШШ 2. ШШШШТ 3. ШШШШС 4. ШШШШМ ...
Под каким номером в списке стоит первое слово-палиндром, в котором в середине стоит согласная буква, а все остальные – гласные?
36501
from itertools import * k = 0 for i in product('штсмкиева', repeat = 5): k += 1 s = ''.join(i) if s == s[::-1] and s[2] in 'штсмкв' and\ all(c in 'иеа' for c in s[:2]+s[3:]): print(k, s); break
(П. Финкель) Настя составляет 4-х буквенные слова из букв Т, И, М, А, Ш, Е, В, С, К. Она выбирает только те слова, в которых количество гласных и согласных одинаково, и гласная буква не стоит рядом с Ш. Сколько таких слов может составить Настя?
1440
from itertools import * ans = set() for i in product('тимашевск', repeat = 4): s = ''.join(i) #подсчитываем количество гласных и согласных sg = gl = 0 for c in s: if c in 'иае': gl += 1 else: sg += 1 if sg == gl: #проверяем, что никакая гласная не стоит рядом с 'ш' for c in 'иае': s = s.replace(c, '*') if '*ш' not in s and 'ш*' not in s: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(П. Финкель) Настя составляет 4-х буквенные слова из букв Т, И, М, А, Ш, Е, В, С, К. Она выбирает только те слова, которые не начинаются с гласных и Ш. Сколько таких слов может составить Настя?
3645
from itertools import * ans = set() for i in product('тимашевск', repeat = 4): s = ''.join(i) if s[0] not in 'иаеш': ans.add(s) print(len(ans), list(ans)[:100])
(П. Финкель) Петя составляет пятибуквенные слова из букв Т, И, М, А, Ш, Е, В, С, К. Она выбирает только те слова, в которых количество гласных больше количества согласных и гласная буква не стоит рядом с Ш. Сколько таких слов может составить Петя?
9288
from itertools import * ans = set() for i in product('тимашевск', repeat = 5): s = ''.join(i) #подсчитываем количество гласных и согласных sg = gl = 0 for c in s: if c in 'иае': gl += 1 else: sg += 1 if gl > sg: #проверяем, что никакая гласная не стоит рядом с 'ш' for c in 'иае': s = s.replace(c, '*') if '*ш' not in s and 'ш*' not in s: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(П. Финкель) Петя составляет пятибуквенные слова из букв Т, И, М, А, Ш, Е, В, С, К. Она выбирает только те слова, в которых буква Ш не стоит рядом с гласной и с буквой В. Сколько таких слов может составить Петя?
41493
from itertools import * ans = set() for i in product('тимашевск', repeat = 5): s = ''.join(i) for c in 'иаев': s = s.replace(c, '*') if '*ш' not in s and 'ш*' not in s: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(П. Финкель) Маша составляет шестибуквенные слова из букв Т, И, М, А, Ш, Е, В, С, К. Она выбирает только те слова, в которых количество гласных и согласных одинаково, и гласная буква не стоит рядом с Ш. Сколько таких слов может составить Маша?
75870
from itertools import * ans = set() for i in product('тимашевск', repeat = 6): s = ''.join(i) #подсчитываем количество гласных и согласных sg = gl = 0 for c in s: if c in 'иае': gl += 1 else: sg += 1 if gl == sg: #проверяем, что никакая гласная не стоит рядом с 'ш' for c in 'иае': s = s.replace(c, '*') if '*ш' not in s and 'ш*' not in s: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(П. Финкель) Маша составляет шестибуквенные слова из букв Т, И, М, А, Ш, Е, В, С, К. Она выбирает только те слова, в которых гласных меньше, чем согласных, и буква Ш не стоит рядом с согласной. Сколько таких слов может составить Маша?
174175
from itertools import * ans = set() for i in product('тимашевск', repeat = 6): s = ''.join(i) #подсчитываем количество гласных и согласных sg = gl = 0 for c in s: if c in 'иае': gl += 1 else: sg += 1 if gl < sg: #проверяем, что никакая согласная не стоит рядом с 'ш' for c in 'тмвск': s = s.replace(c, '*') if '*ш' not in s and 'ш*' not in s\ and 'шш' not in s: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(М. Ишимов) Определите количество чисел, девятеричная запись которых содержит ровно 6 цифр, из которых не более двух нечётных, а сумма всех цифр этой записи кратна 6, но не кратна 4.
23733
from itertools import * ans = set() for i in product('012345678', repeat = 6): if i[0] != '0': s = ''.join(i) for c in '1357': s = s.replace(c, '*') if s.count('*') <= 2: sm = sum(map(int, i)) if sm % 6 == 0 and sm % 4 != 0: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(М. Ишимов) Определите количество чисел, семеричная запись которых содержит ровно 5 цифр, из них не менее трёх чётных цифр, а сумма всех цифр записи является простым числом.
19860
def f(x): sq = round(x**.5) for i in range(2, sq + 1): if x % i == 0: return 0 return 1 ans = set() from itertools import * for i in product('0123456', repeat = 5): s = ''.join(i) if s[0] != '0': sm = sum(map(int, i)) for c in '0246': s = s.replace(c, '*') if s.count('*') >= 3 and sm > 1 and f(sm): ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(М. Ишимов) Определите количество чисел, восьмеричная запись которых содержит ровно 5 цифр, среди них две различные цифры, сумма которых является простым числом.
27170
def f(x): #функция проверки простоты числа for i in range(2, x): if x % i == 0: return 0 return 1 from itertools import * ans = set() for i in product('01234567', repeat = 5): if i[0] != '0': #с нуля число начинаться не может s = list(map(int, i)) sm = [x+y for x,y in combinations(s, 2) if x != y] for c in sm: if c > 1 and f(c): ans.add(''.join(i)) break print(len(ans), list(ans)[:100])
(М. Ишимов) Определите количество чисел, пятеричная запись которых содержит ровно 5 цифр, причём каждая цифра отличается от соседних не менее, чем на 2.
140
from itertools import * ans = set() for i in product('01234', repeat = 5): if i[0] != '0': #число не должно начинаться с нуля s = ''.join(i) ch = list(map(int, s)) #превращаем число в список цифр for j in range(1, len(s) - 1): if abs(ch[j - 1] - ch[j]) < 2 or abs(ch[j] - ch[j + 1]) < 2: break else: ans.add(s) print(len(ans), list(ans)[:100])
((М. Ишимов) Определите количество чисел, восьмеричная запись которых содержит ровно 6 цифр, причём сумма значений чётных цифр не больше суммы значений нечётных цифр, а само число является палиндромом.
268
from itertools import * ans = set() for i in product('01234567', repeat = 6): if i[0] != '0': #первая цифра не должна быть нулем s = ''.join(i) if s == s[::-1]: #проверка на палиндром ch = nch = 0 for j in s: #в цикле перебираем все цифры числа if int(j) % 2 == 0: ch += int(j) #считаем сумму четных цифр else: nch += int(j) #считаем сумму нечетных цифр if ch <= nch: ans.add(s) print(len(ans), list(ans)[:100])
(М. Байрамгулов) Вася составляет 6-буквенные слова из букв слова ДЕРЕВО так, что буквы на позициях одинаковой чётности расположены в алфавитном порядке. Сколько различных слов может составить Вася?
1225
def f(s): for i in range(1, len(s)): if s[i - 1] > s[i]: return 0 return 1 from itertools import * ans = set() for i in set(product('дерево', repeat = 6)): s = ''.join(i) sch = s[::2] snch = s[1::2] if f(sch) and f(snch): ans.add(s) print(len(ans), list(ans)[:100])
(М. Байрамгулов) Миша составляет 5-буквенные слова из букв слова КОМПЬЮТЕР так, что в них можно переставить буквы и получить палиндром. Сколько различных слов может составить Миша?.
8649
Не подходят варианты, где все буквы разные len(set()) == len() и где встречается только одна пара len(set()) == 4, а также len(set())==3 и при этом есть три одинаковые буквы
from itertools import * ans = set() for i in product('компьютер', repeat = 5): s = ''.join(i) if not(len(set(s)) == 5 or len(set(s)) == 4 or (len(set(s)) == 3 and \ (s.count(s[0])==3 or s.count(s[1])==3 or s.count(s[2])==3))): ans.add(s) print(len(ans), list(ans)[:300])
(М. Байрамгулов) Ваня составляет 6-буквенные слова из букв слова КОМПЬЮТЕР так, что в них можно убрать три буквы и получить слово КОТ. Сколько различных слов может составить Ваня?
11249
Простое сравнение индексов s.index('к') < s.index('о') < s.index('т') не подойдет, например, для комбинации 'ктомть', т.к. метод ищет первое вхождение каждого символа в строке, хотя в данной комбинации можно получить слово 'кот', удалив 2-й, 4-й и 6-й символы.
Алгоритм поиска: ищем индекс символа 'к', затем выполняем срез строки от следующего за 'к' символа до конца строки и ищем индекс символа 'о' в полученной подстроке.
Затем, выполняем срез подстроки от следующего за 'о' символа до конца строки и в оставшейся подстроке ищем символ 'т'.
Если все три символа найдены - запоминаем комбинацию.
from itertools import * ans = set() for i in product('компьютер', repeat = 6): s = ''.join(i) if 'к' in s: s = s[s.index('к')+1:] if 'о' in s: s = s[s.index('о')+1:] if 'т' in s: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(Д. Статный) Григорий придумывает 16-буквенные слова, состоящие из букв слова АНТИУТОПИЯ. Сколько слов, содержащих комбинацию АНТИУТОПИЯ, может составить Григорий, если все гласные, не входящие в искомую комбинацию, расположены в алфавитном порядке, а согласные – в обратном алфавитном порядке? Буквы в словах могут повторяться любое количество раз или же не встречаться вовсе.
138677
# а - 1, и - 2, о - 3, у - 4, я - 5, т - 6, п - 7, н - 8 #функция для проверки расположения гласных букв #в алфавитном порядке, согласных в обратном def f(s): for i in range(1, len(s)): if s[i - 1] > s[i]: return 0 return 1 #функция удаления согласных букв def gl(s): for c in '*678': s = s.replace(c, '') return s #функция удаления гласных букв def sg(s): for c in '*12345': s = s.replace(c, '') return s from itertools import * ans = set() for i in product('12345678*', repeat = 7): s = ''.join(i) if s.count('*') == 1: if f(gl(s)) and f(sg(s)): ans.add(s) print(len(ans), list(ans)[:100])
(Д. Статный) Григорий придумывает 16-буквенные слова, состоящие из букв слова АНТИУТОПИЯ. Сколько слов, содержащих комбинацию АНТИУТОПИЯ, может составить Григорий, если все гласные, не входящие в искомую комбинацию, расположены в обратном алфавитном порядке, а согласные – алфавитном порядке, но их не более 2-х? Буквы в словах могут повторяться любое количество раз или же не встречаться вовсе.
61446
from itertools import * ans = [] #слово 'антиутопия' заменяем на '*', тогда длина генерируемых слов #уменьшится до 7 и сократится количество повторений цикла #используем set(), т.к. имеются повторяющиеся буквы 'и' и 'т' for i in set(product('антиутопия*', repeat = 7)): s = ''.join(i) #слово 'антиутопия' может встретиться только один раз, т.к. #в слове 10 букв, а во всей последовательности - 16 букв if s.count('*') == 1: #удаляем '*' из последовательности, чтобы остались только #согласные и гласные буквы s = s.replace('*', '') #чтобы сформировать последовательности только из согласных и #только из гласных букв, копируем строку из s в #переменные gl (гласные буквы) и sg (согласные буквы) gl = sg = s #из строки gl удаляем все согласные буквы, оставляя только гласные for c in 'нтп': gl = gl.replace(c, '') #из строки sg удаляем все гласные буквы, оставляя только согласные for c in 'аиуоя': sg = sg.replace(c, '') #определяем переменную flag = 1, с помощью которой будем определять #алфавитный порядок расположения гласных и согласных букв flag = 1 #перебираем все гласные буквы и, если нарушается ОБРАТНЫЙ алфавитный #порядок, то flag = 0 for j in range(1, len(gl)): if gl[j-1] < gl[j]: flag = 0; break #если количество согласных букв больше 2, то flag = 0 if len(sg)<=2: #перебираем все согласные буквы и, есди нарушается алфавитный #порядок, то flag = 0 for j in range(1, len(sg)): if sg[j-1] > sg[j]: flag = 0; break else: flag = 0 #если все условия выполнены - добавляем искомое слово if flag: ans.append(''.join(i)) print(len(ans)) print(ans[:100])
(Д. Статный) Григорий придумывает 16-буквенные слова, состоящие из букв слова АНТИУТОПИЯ. Сколько слов, содержащих комбинацию АНТИУТОПИЯ, может составить Григорий, если справа от этой комбинации согласные расположены в алфавитном порядке, а гласные – в обратном, а слева – гласные в алфавитном порядке, а согласные – в обратном? Буквы в словах могут повторяться любое количество раз или же не встречаться вовсе.
322264
from itertools import * ans = [] for i in set(product('антиутопия*', repeat = 7)): s = ''.join(i) #проверяем, что слово 'антиутопия' обозначенное '*' #встречается только один раз и оно не стоит на первой #и последней позициях, иначе слева или справа от него #не будет ни гласных букв, ни согласных if s.count('*') == 1 and s[0] != '*' and s[-1] != '*': #находим индекс символа '*' в строке ind = s.index('*') #разбиваем слово на две подстроки: до звездочки (left) #и после звездочки (right) left = s[: ind]; right = s[ind+1:] #из левой подстроки формируем две подстроки: одну только #с гласными буквами, другую - только с согласными left_gl = left_sg = left #удаляем все согласные буквы из подстроки с гласными буквами for c in 'нтп': left_gl = left_gl.replace(c, '') #удаляем все гласные буквы из подстроки с согласными буквами for c in 'аиуоя': left_sg = left_sg.replace(c, '') #создадим переменную flag = 1, которая будет отвечать за расположение #согласных и гласных букв, если расположение нарушено, она получит значение 0 flag = 1 #перебираем все гласные - они должны стоять в алфавитном порядке for j in range(1, len(left_gl)): if left_gl[j-1] > left_gl[j]: flag = 0; break #перебираем все согласные - они должны стоять в обратном алфавитном порядке for j in range(1, len(left_sg)): if left_sg[j-1] < left_sg[j]: flag = 0; break #из правой подстроки формируем две подстроки: одну только #с гласными буквами, другую - только с согласными right_gl = right_sg = right #удаляем все согласные буквы из подстроки с гласными буквами for c in 'нтп': right_gl = right_gl.replace(c, '') #удаляем все гласные буквы из подстроки с согласными буквами for c in 'аиуоя': right_sg = right_sg.replace(c, '') #перебираем все гласные - они должны стоять в обратном алфавитном порядке for j in range(1, len(right_gl)): if right_gl[j-1] < right_gl[j]: flag = 0; break #перебираем все согласные - они должны стоять в алфавитном порядке for j in range(1, len(right_sg)): if right_sg[j-1] > right_sg[j]: flag = 0; break #если flag = 1, то мы получили искомое слово, запоминаем его if flag: ans.append(''.join(i)) print(len(ans)) print(ans[:50])
(Д. Статный) Григорий придумывает 16-буквенные слова, состоящие из букв слова АНТИУТОПИЯ. Сколько слов, содержащих комбинацию АНТИУТОПИЯ, может составить Григорий, если справа от этой комбинации находятся только согласные в алфавитном порядке, а слева от нее – гласные в обратном алфавитном порядке? Буквы в словах могут повторяться любое количество раз или же не встречаться вовсе.
1478
from itertools import * ans = [] for i in set(product('антиутопия*', repeat = 7)): if i.count('*') == 1 and i[0] != '*' and i[-1] != '*': s = ''.join(i) ind = s.index('*') left = s[:ind]; right = s[ind+1:] if all(c not in left for c in 'аиуоя'): if all(c not in right for c in 'нтп'): flag = 1 for j in range(1, len(left)): if left[j-1] > left[j]: flag = 0; break for j in range(1, len(right)): if right[j-1] < right[j]: flag = 0; break if flag: ans.append(''.join(i)) print(len(ans)) print(ans[:100])
(Д. Статный) Григорий придумывает 16-буквенные слова, состоящие из букв слова АНТИУТОПИЯ. Сколько слов, содержащих комбинацию АНТИУТОПИЯ, может составить Григорий, если справа от этой комбинации находится равное количество гласных и согласных, а слева – не больше 2-х согласных? Буквы в словах могут повторяться любое количество раз или же не встречаться вовсе.
414400
from itertools import * ans = [] for i in set(product('антиутопия*', repeat = 7)): if i.count('*') == 1 and i[0]!='*' and i[-1]!='*': s = ''.join(i) ind = s.index('*') for c in 'аиуоя': s = s.replace(c, '1') for c in 'нтп': s = s.replace(c, '2') if s[:ind].count('2') <= 2 and\ s[ind+1:].count('1') == s[ind+1:].count('2'): ans.append(''.join(i)) print(len(ans)) print(ans[:100])
(Д. Статный) Григорий придумывает 16-буквенные слова, состоящие из букв слова АНТИУТОПИЯ. Сколько слов, содержащих комбинацию АНТИУТОПИЯ, может составить Григорий, если количество гласных справа от этой комбинации отличается от количества гласных слева на 1? Буквы в словах могут повторяться любое количество раз или же не встречаться вовсе.
418530
from itertools import * ans = [] for i in set(product('антиутопия*', repeat = 7)): if i.count('*') == 1: s = ''.join(i) ind = s.index('*') for c in 'аиуоя': s = s.replace(c, '#') if abs(s[:ind].count('#') - s[ind+1:].count('#')) == 1: ans.append(''.join(i)) print(len(ans)) print(ans[:100])
(C. Якунин) Дмитрий составляет слова, переставляя буквы в слове АМФИБРАХИЙ. Сколько слов, начинающихся на АМ и заканчивающихся на ИЙ может составить Дмитрий?
720
from itertools import * ans = set() for i in permutations('амфибрахий'): s = ''.join(i) if s[:2] == 'ам' and s[-2:] == 'ий': ans.add(s) print(len(ans), list(ans)[:100])
(C. Якунин) Дмитрий составляет слова, переставляя буквы в слове АМФИБРАХИЙ. Сколько слов, в которых до буквы Ф и после неё идут по 2 одинаковых гласных буквы, может составить Дмитрий?
Примечание: одинаковые буквы должны примыкать к букве 'Ф' слева и справа (непосредственно слева - две одинаковые буквы и непосредственно справа - две одинаковые буквы)
1440
from itertools import * ans = set() for i in permutations('амфибрахий'): s = ''.join(i) indx = s.index('ф') if 1 < indx < len(s) - 2: if s[indx - 1] == s[indx - 2] and s[indx - 1] in 'аи' and\ s[indx + 1] == s[indx + 2] and s[indx + 1] in 'аи': ans.add(s) print(len(ans), list(ans)[-100:])
(C. Якунин) Дмитрий составляет слова, переставляя буквы в слове АМФИБРАХИЙ. Сколько слов, в которых сочетание БР расположено по центру слова, может составить Дмитрий?
10080
from itertools import * ans = set() for i in permutations('амфибрахий'): s = ''.join(i) if s[4:6] == 'бр': ans.add(s) print(len(ans), list(ans)[-100:])
(C. Якунин) Дмитрий составляет слова, переставляя буквы в слове АМФИБРАХИЙ. Сколько слов, в которых на чётных позициях стоят согласные (кроме Й) может составить Дмитрий? Примечание: буква Й может стоять в любой нечётной позиции.
3600
from itertools import * ans = set() for i in permutations('амфибрахий'): s = ''.join(i) if s.index('й') % 2 != 0: for c in 'мфбрх': s = s.replace(c, '*') for j in range(0, len(s), 2): if s[j] != '*': break else: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(C. Якунин) Дмитрий составляет слова, переставляя буквы в слове АМФИБРАХИЙ. Сколько слов, в которых есть, хотя бы, 2 подряд идущие гласные может составить Дмитрий?
756000
from itertools import * ans = set() for i in permutations('амфибрахий'): s = ''.join(i) for c in 'аи': s = s.replace(c, '*') if '**' in s: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(Е. Усов) Леся составляет словосочетания длины 5 из пробела и букв своего имени. При этом никакие две гласные и две согласные не стоят рядом. Словосочетанием считается два слова, разделённых между собой пробелом. Слова не обязательно должны быть осмысленными словами русского языка. Сколько различных словосочетаний может составить Леся?
Примечание: каждую букву можно использовать любое количество раз или не использовать совсем. Пробел только один.
1920
from itertools import * ans = set() for i in product('леся*', repeat = 5): s = ''.join(i) if s[0] != '*' and s[-1] != '*' and s.count('*') == 1: for c in 'ея': s = s.replace(c, 'е') for c in 'лс': s = s.replace(c, 'л') if 'ее' not in s and 'лл' not in s: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(Е. Усов) Леся составляет новые предложения перестановкой букв и символов из предложения 'ХОЧУ В ВУЗ'. При этом она не любит слова, начинающиеся с буквы У. Предложение – это три слова, разделённых между собой пробелами. Слова не обязательно должны быть осмысленными словами русского языка. Сколько различных новых предложений может составить Леся?
Примечание: по формулировкой НОВЫЕ ПРЕДЛОЖЕНИЯ, подразумевается, что исходное предложение 'ХОЧУ В ВУЗ' учитывать не нужно.
75599
from itertools import * ans = set() for i in permutations('хочу*в*вуз'): s = ''.join(i) if s[0] not in '*у' and s[-1] != '*' and\ '**' not in s and '*у' not in s: ans.add(s) print(len(ans) - 1, list(ans)[:100])
(Е. Усов) Леся составляет новые словосочетания перестановкой букв и символов из словосочетания ХОЧУ СОТКУ. При этом она не любит слова, начинающиеся с буквы У. Словосочетание – это два слова, разделённых между собой пробелом. Слова не обязательно должны быть осмысленными словами русского языка. Сколько различных новых словосочетаний может составить Леся?
423359
from itertools import * ans = set() for i in permutations('хочу_сотку'): s = ''.join(i) if s[0] not in '_у' and '_у' not in s and s[-1] != '_': ans.add(s) ans.remove('хочу_сотку') print(len(ans), list(ans)[:100])
(А. Бриккер) Миша составляет пятибуквенные слова из букв К, О, Н, Ф, Е, Т, А. Он выбирает слова, которые содержат не менее двух гласных, причём между любыми двумя гласными есть хотя бы одна согласная. Сколько различных слов может составить Миша?
3888
from itertools import * ans = set() for i in product('конфета', repeat = 5): s = ''.join(i) for c in 'оеа': s = s.replace(c, '*') if s.count('*') >= 2 and '**' not in s: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(А. Бриккер) Определите количество шестизначных чисел, записанных в восьмеричной системе счисления, в которых первые две цифры меньше всех оставшихся четырёх цифр, а запись числа не содержит трёх подряд идущих чётных цифр.
5528
from itertools import * ans = set() for i in product('01234567', repeat = 6): s = ''.join(i) if s[0] != '0': if max(s[:2]) < min(s[2:]): for c in '0246': s = s.replace(c, '*') if '***' not in s: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
Все пятибуквенные слова, в составе которых могут быть только русские буквы С, О, Й, К, А, записаны в алфавитном порядке и пронумерованы начиная с 1.
Ниже приведено начало списка.
1. ААААА 2. ААААЙ 3. ААААК 4. ААААО 5. ААААС 6. АААЙА ...
Под каким номером в списке идёт последнее слово, которое содержит не более одной буквы О и не содержит букв С, стоящих рядом?
2990
from itertools import * k = 0 for i in product('айкос', repeat = 5): k += 1 s = ''.join(i) if s.count('о') <= 1 and 'сс' not in s: km = k; sm = s print(km, sm)
(А. Игнатюк) Ученые хотят дать название своему новому изобретению, которое должно состоять из 10 различных строчных латинских букв, при этом в названии должно быть не менее двух гласных букв. Необходимо найти количество вариантов всевозможных названий и записать в ответ сумму цифр найденного числа.
Примечание: в латинском алфавите 26 букв, из которых 5 - гласные.
36
from itertools import * k = 0 for i in product('гс', repeat = 10): s = ''.join(i); kgl = s.count('г') if 2 <= kgl <= 5: ksg = 10 - kgl; gl = 5; sg = 21; p = 1 while kgl: p *= gl; gl -= 1; kgl -= 1 while ksg: p *= sg; sg -= 1; ksg -= 1 k += p print(sum(map(int, str(k))))
(Е. Джобс) Сколько существует девятиразрядных десятичных чисел таких, в которых есть хотя бы 3 различные цифры?
899979336
#всего девятиразрядных чисел: k = 9 * 10 ** 8 #не нужно учитывать следующие числа #со всеми одинаковыми цифрами: k1 = 9 #с двумя различными цифрами: #количество комбинаций из двух различных цифр from itertools import * ans = set() #составляем всевозможные наборы из двух цифр for i in permutations('0123456789', 2): alf = ''.join(i) #генерируем девятиразрядые числа из двух цифр for j in product(alf, repeat = 9): s = ''.join(j) if len(set(s)) == 2 and s[0] != '0': ans.add(s) k2 = len(ans) print(k - k1 - k2)
(А. Богданов) Определите количество шестизначных чисел, записанных в системе счисления с основанием 42, в записи которых только одна цифра 6, при этом никакая нечётная цифра не стоит рядом с цифрой 6.
218530000
#шестёрка в первой позиции k = 1 * 20 * 41 ** 4 #шестёрка во второй позиции k += 19 * 1 * 20 * 41 ** 3 #шестёрка в последней позиции k += 40 * 41 ** 3 * 20 * 1 #шестёрка в остальных 3-х позициях k += 3 * (40 * 20 * 1 * 20 * 41 ** 2) print(k)
(А. Малышев) Малоизвестный кондитер переехал в Россию и решил потратить жизнь на то, чтобы составлять семибуквенные слова перестановкой букв из набора: Х, Л, Е, Б, Н, Ы, Й, М, Я, К, И, Ш. Сколько всего различных слов может составить кондитер, если слово должно начинаться с буквы Х, в центре слова должна быть одна буква из набора: Б, Ы, К, И, Ш, а согласные не могут стоять друг за другом.
5400
from itertools import * ans = set(); nb = 'быкиш' for i in permutations('лебныймякиш', 6): s = 'х'+''.join(i) if s[3] in nb: for c in 'хлбнймкш': s = s.replace(c, '*') if '**' not in s: ans.add('х'+''.join(i)) print(len(ans), list(ans)[:100])
(А. Богданов) Рассматриваются числа, восьмеричная запись которых содержит ровно 10 знаков. Определите количество таких чисел, в восьмеричной записи которых ровно пять цифр 7 и при этом никакая нечётная цифра не стоит рядом с цифрой 7.
5888
from itertools import * k = 0 for i in product('7чн', repeat = 10): s = ''.join(i) if s.count('7') == 5 and all(c not in s for c in ['77','н7','7н']): if s[0] == 'ч': k += 3 * 4 ** (s.count('ч') - 1) * 3 ** s.count('н') else: k += 4 ** s.count('ч') * 3 ** s.count('н') print(k)
Рассматриваются числа, восьмеричная запись которых содержит ровно 10 знаков. Определите количество таких чисел, в восьмеричной записи которых ровно три нечётных цифры, причём никакие две нечётные цифры не стоят рядом.
49545216
from itertools import * k = 0 for i in product('чн', repeat = 10): s = ''.join(i) if s.count('н') == 3 and 'нн' not in s: if s[0] == 'ч': k += 3 * 4 ** 9 else: k += 4 ** 10 print(k)
Рассматриваются числа, восьмеричная запись которых содержит ровно 11 знаков. Определите количество таких чисел, в восьмеричной записи которых ровно четыре нечётных цифры, причём никакие две нечётные цифры не стоят рядом.
256901120
from itertools import * k = 0 for i in product('чн', repeat = 11): s = ''.join(i) if s.count('н') == 4 and 'нн' not in s: if s[0] == 'ч': k += 3 * 4 ** 10 else: k += 4 ** 11 print(k)
Рассматриваются числа, восьмеричная запись которых содержит ровно 12 знаков. Определите количество таких чисел, в восьмеричной записи которых ровно пять нечётных цифр, причём никакие две нечётные цифры не стоят рядом.
851443712
from itertools import * k = 0 for i in product('чн', repeat = 12): s = ''.join(i) if s.count('н') == 5 and 'нн' not in s: if s[0] == 'ч': k += 3 * 4 ** 11 else: k += 4 ** 12 print(k)
Определите количество семизначных чисел, записанных в девятеричной системе счисления, в записи которых ровно одна цифра 2 и ровно три нечётные цифры.
512000
#единичка в произведении показывает, что учтена позиция двойки
from itertools import *
k = 0
for i in product('2чн', repeat = 7):
s = ''.join(i)
if s.count('2') == 1 and s.count('н') == 3:
if s[0] == 'ч': k += 3 * 1 * 4 ** 5
else: k += 1 * 4 ** 6
print(k)
Определите количество семизначных чисел, записанных в девятеричной системе счисления, в записи которых ровно одна цифра 8 и ровно четыре нечётные цифры.
399360
from itertools import * k = 0 for i in product('8чн', repeat = 7): s = ''.join(i) if s.count('8') == 1 and s.count('н') == 4: if s[0] == 'ч': k += 3 * 1 * 4 ** 5 else: k += 1 * 4 ** 6 print(k)
Василиса составляет слова из букв своего имени ВАСИЛИСА. Слово должно состоять из 6 букв, каждая буква может встречаться любое число раз и не встречаться вообще. Кроме того, в слове количество гласных букв должно быть больше, чем количество согласных. Сколько различных слов может составить Василиса?
2800
from itertools import * ans = set() for i in product('василиса', repeat = 6): s = ''.join(i) for c in 'аи': s = s.replace(c, '*') for c in 'всл': s = s.replace(c, '#') if s.count('*') > s.count('#'): ans.add(''.join(i)) print(len(ans), list(ans)[:100])
Святослав составляет слова из букв своего имени СВЯТОСЛАВ. Слово должно состоять из 7 букв, каждая буква может встречаться любое число раз и не встречаться вообще. Кроме того, в слове количество гласных букв должно быть больше, чем количество согласных. Сколько различных слов может составить Святослав?
285687
from itertools import * ans = set() for i in product('святослав', repeat = 7): s = ''.join(i) for c in 'яоа': s = s.replace(c, '*') for c in 'свтл': s = s.replace(c, '#') if s.count('*') > s.count('#'): ans.add(''.join(i)) print(len(ans), list(ans)[:100])
Тимофей составляет слова из букв своего имени ТИМОФЕЙ. Слово должно состоять из 6 букв, каждая буква может встречаться любое число раз и не встречаться вообще. Кроме того, в слове количество гласных букв должно совпадать с количеством согласных букв. Сколько различных слов может составить Тимофей?
34560
from itertools import * ans = set() for i in product('тимофей', repeat = 6): s = ''.join(i) for c in 'иое': s = s.replace(c, '*') for c in 'тмфй': s = s.replace(c, '#') if s.count('*') == s.count('#'): ans.add(''.join(i)) print(len(ans), list(ans)[:100])
Ваня составляет коды перестановкой букв слова ВОДОПАД. Код должен состоять из 7 букв, каждая буква должна встречаться в нем встречаться столько же раз, сколько и в исходном слове. Кроме того, в коде две гласные не должны стоять рядом. Сколько различных слов может составить Ваня?
360
from itertools import * ans = set() for i in permutations('водопад', 7): s = ''.join(i) for c in 'оа': s = s.replace(c, '*') if '**' not in s: ans.add(''.join(i)) print(len(ans), list(ans)[:100])
(Д. Статный, М. Шагитов) Определите количество восьмизначных чисел, записанных в шестнадцатеричной системе счисления, в записи которых ровно 3 чётные цифры.
895483904
from itertools import * k = 0 for i in product('чн', repeat = 8): s = ''.join(i) if s.count('ч') == 3: if s[0] == 'ч': k += 7 * 8 ** 7 else: k += 8 ** 8 print(k)
(Д. Статный, М. Шагитов) Определите количество восьмизначных чисел, записанных в тринадцатеричной системе счисления, которые содержат ровно 6 различных цифр и не более 2-х цифр А.
298322640
Решение от авторов:
from functools import *
@lru_cache(None)
def f(l, c, k, s):
k += c=='A'
s = ''.join(set(s))
if l==8: return k<=2 and len(s)==6
return sum(f(l+1, i, k, s+i) for i in '0123456789ABC')
print(sum(f(1, i, 0, i) for i in '123456789ABC'))
# l - количество цифр в числе
# c - цифра числа
# i - перебираем цифры в 12-ричной СС
# s - множество из цифр числа
(Д. Статный, М. Шагитов) Определите количество десятизначных чисел, которые содержат равное количество двоек и троек.
2620547276
Решение от авторов:
from functools import cache @cache def f(p, k2, k3, l): k2 += p=='2' k3 += p=='3' if l == 10: return k2 == k3 return sum(f(i, k2, k3, l + 1) for i in '0123456789') print(sum(f(i, 0, 0, 1) for i in '123456789'))
(Д. Статный) Определите количество двенадцатиразрядных чисел, записанных в пятнадцатеричной системе счисления, произведение значений цифр которых ненулевое и не превышает 103. При вычислении произведения считать, что значение цифры А – 10, значение цифры B – 11 и т. д.
15719036
Решение от авторов № 1:
from functools import cache digits = '123456789ABCDE' @cache def F(l, p): if p > 10 ** 3: return 0 if l == 12: return 1 return sum(F(l + 1, p * int(i, 15)) for i in digits ) print(F(0, 1))
Решение от авторов № 2 (Д. Статный):
from functools import cache @cache def f(l, p): if l == 12: return 0 < p <= 10 ** 3 return sum(f(l + 1, p * int(i, 15)) for i in '0123456789ABCDE') print(sum(f(1, int(i, 15)) for i in '123456789ABCDE'))
(Д. Статный) Определите количество двенадцатиразрядных чисел в десятичной системе счисления, в которых сумма цифр не превышает 25.
1128227308
from functools import * @lru_cache(None) def f(l, s): if s > 25: return 0 if l == 12: return 1 return sum(f(l + 1, s + int(i)) for i in '0123456789') print(sum(f(1, int(i)) for i in '123456789'))
(Д. Статный) Определите количество десятиразрядных девятеричных чисел, в записи которых каждая цифра повторяется не более 2-х раз.
992476800
Решение от авторов:
from functools import cache @cache def F(l = 0, counters = '000000000'): if l == 10: return 1 k = 0 for i in range(0 if l > 0 else 1, 9): if counters[i] < '2': c2 = counters[:i] + chr(ord(counters[i])+1) + counters[i+1:] k += F( l+1, c2 ) return k print(F())
Решение. Автор Д. Статный:
from time import time
from functools import *
#ОПТИМИЗИРОВАННОЕ РЕШЕНИЕ ДЛЯ БОЛЬШОЙ ДЛИНЫ, ДАБЫ НЕ ХРАНИТЬ БОЛЬШУЮ СТРОКУ
#ПРОВЕРКА НА ПОВТОР ЧИСЛА ОСУЩЕСТВЛЯЕТСЯ ЧЕРЕЗ ВЫЧИСЛЕНИЕ
#СТЕПЕНИ ВХОЖДЕНИЯ 10-КИ В НАКАПЛИВАЕМУЮ СУММУ
st = time()
@cache
def f(d, l):
if l == 10: return 1
return sum(f(d+10**(int(i)+1), l+1) for i in '012345678'\
if (d//10**(int(i)+1))%10<2)
print(sum(f(10**(int(i)+1), 1) for i in '12345678'))
print(time()-st)
(Д. Статный) Определите количество десятизначных тринадцатеричных чисел, в которых сумма нечётных цифр равна сумме чётных цифр. При вычислении суммы цифр считать, что значение цифры А – 10, значение цифры B – 11 и т. д.
2076464049
Решение от авторов:
from functools import cache @cache def F(l = 0, sEven = 0, sOdd = 0 ): if l == 10: return int(sEven == sOdd) k = 0 for i in range(0 if l > 0 else 1, 13): if i % 2 == 0: k += F( l + 1, sEven + i, sOdd ) else: k += F( l + 1, sEven, sOdd + i ) return k print(F())
Автор Д. Статный:
from functools import cache @cache def f(s1, s2, l): if l==10: return s1==s2 count = 0 for i in range(13): if i%2==0: count += f(s1, s2+i, l+1) else: count += f(s1+i, s2, l+1) return count print( sum(f(i, 0, 1) for i in range(1, 13, 2)) +\ sum(f(0, i, 1) for i in range(2, 13, 2)))
(Д. Статный) Определите количество семиразрядных чисел, записанных в тридцатеричной системе счисления, в которых цифра B встречается ровно 2 раза и никакие две одинаковые цифры не могут стоять рядом.
273741440
Решение от авторов:
from functools import cache @cache def F(l = 0, lastDigit = -1, countB = 0 ): if l == 7: return int(countB == 2) k = 0 for i in range(0 if l > 0 else 1, 30): if lastDigit != i: if i == int('B',30): if countB < 2: k += F( l + 1, i, countB+1 ) else: k += F( l + 1, i, countB ) return k print( F() )
Автор Д. Статный:
from functools import cache @cache def f(c, l, k11): k11 += (c == 11) if l == 7: return k11 == 2 count = 0 for j in range(30): if j != c: count += f(j, l + 1, k11) return count print(sum(f(i, 1, 0) for i in range(1, 30)))
Все четырехбуквенные слова, в составе которых могут быть только русские буквы А, В, Л, О, Р записаны в алфавитном порядке и пронумерованы начиная с 1. Ниже приведено начало списка:
1. АААА 2. АААВ 3. АААЛ 4. АААО 5. АААР 6. ААВА
Под каким номером идет первое слово, начинающееся на Л?
251
from itertools import * k = 0 for i in product('АВЛОР', repeat = 4): s = ''.join(i); k += 1 if s[0] == 'Л': print(k); break
Все пятибуквенные слова, в составе которых могут быть только русские буквы А, К, Л, М, Н, Я записаны в алфавитном порядке и пронумерованы начиная с 1. Ниже приведено начало списка:
1. ААААА 2. ААААК 3. ААААЛ 4. ААААМ 5. ААААН 6. ААААЯ 7. АААКА
Под каким номером идет первое слово, которое начинается на буквы КМ?
1945
from itertools import * k = 0 for i in product('АКЛМНЯ', repeat = 5): s = ''.join(i); k += 1 if s[:2] == 'КМ': print(k); break
Все шестибуквенные слова, в составе которых могут быть только русские буквы А, В, О, Р, Т записаны в алфавитном порядке и пронумерованы начиная с 1. Ниже приведено начало списка:
1. АААААА 2. АААААВ 3. АААААО 4. АААААР 5. АААААТ 6. ААААВА
Под каким номером стоит слово ВОРОТА?
4821
from itertools import * k = 0 for i in product('АВЛОР', repeat = 4): s = ''.join(i); k += 1 if s[0] == 'Л': print(k); break
Все пятибуквенные слова, составленные из букв К, О, М, П, Ь, Ю, Т, Е, Р, записаны в алфавитном порядке и пронумерованы. Начало списка выглядит так:
1. ЕЕЕЕЕ 2. ЕЕЕЕК 3. ЕЕЕЕМ 4. ЕЕЕЕО 5. ЕЕЕЕП 6. ЕЕЕЕР 7. ЕЕЕЕТ 8. ЕЕЕЕЬ ...
Под каким номером в списке стоит последнее слово с нечётным номером, которое не начинается с буквы Ь и содержит ровно две буквы К?
58979
from itertools import *
k = 0; ans = []
for i in product('екмопртью', repeat = 5):
s = ''.join(i); k += 1
if k % 2 != 0 and s[0] != 'ь' and s.count('к') == 2:
ans.append([k, s])
print(*max(ans))
#Ответ: 58979 юююкк
Все шестибуквенные слова, составленные из букв М, А, Н, Г, У, С, Т, записаны в алфавитном порядке и пронумерованы. Начало списка выглядит так:
1. АААААА 2. АААААГ 3. АААААМ 4. АААААН 5. АААААС 6. АААААТ 7. АААААУ ...
Под каким номером в списке стоит последнее слово, которое не начинается с буквы У, содержит только две буквы М и не более одной буквы Г?
100810
from itertools import *
k = 0; ans = []
for i in product('агмнсту', repeat = 6):
s = ''.join(i); k += 1
if s[0] != 'у' and s.count('м') == 2 and s.count('г') <= 1:
ans.append([k, s])
print(*max(ans))
#Ответ: 100810 тууумм
Сколько существует шестнадцатеричных трёхзначных чисел, в которых все цифры различны и никакие две чётные или две нечётные цифры не стоят рядом?
840
Вариант 1:
from itertools import * ans = [] for i in range(0x100, 0xfff+1): x = f'{i:x}' if len(set(x)) == 3: for c in '02468ace': x = x.replace(c, 'ч') for c in '13579bdf': x = x.replace(c, 'н') if 'чч' not in x and 'нн' not in x: ans.append(i) print(len(ans))
Вариант 2:
from itertools import *
k = 0
for i in product('0123456789abcdef', repeat = 3):
x = ''.join(i)
if x[0] != '0' and len(set(x)) == 3:
for c in '02468ace': x = x.replace(c, 'ч')
for c in '13579bdf': x = x.replace(c, 'н')
if 'чч' not in x and 'нн' not in x:
k += 1
print(k)
Сколько существует восьмеричных пятизначных чисел, не содержащих в своей записи цифру 1, в которых все цифры различны и никакие две чётные или две нечётные цифры не стоят рядом?
180
Вариант 1:
from itertools import * ans = [] for i in product('01234567', repeat = 5): x = ''.join(i) if x[0] != '0' and x.count('1') == 0 and len(set(x)) == 5: for c in '0246': x = x.replace(c, 'ч') for c in '1357': x = x.replace(c, 'н') if 'чч' not in x and 'нн' not in x: ans.append(''.join(i)) print(len(ans), ans)
Вариант 2:
k = 0 for x in range(0o10000, 0o100000): x8 = f'{x:o}' if x8.count('1') == 0 and len(set(x8)) == 5: for c in '0246': x8 = x8.replace(c, 'ч') for c in '1357': x8 = x8.replace(c, 'н') if 'чч' not in x8 and 'нн' not in x8: k += 1 print(k)
Все шестибуквенные слова, составленные из букв Ф, А, В, О, Р, И, Т, записаны в алфавитном порядке и пронумерованы.
Вот начало списка:
1. АААААА 2. АААААВ 3. АААААИ 4. АААААО 5. АААААР 6. АААААТ 7. АААААФ
Определите в этом списке количество слов с чётными номерами, которые не начинаются с буквы О и при этом содержат в своей записи ровно две буквы Р.
8640
from itertools import * ans = []; k = 0 for i in product('авиортф', repeat=6): s = ''.join(i); k += 1 f1 = k % 2 == 0 f2 = s[0] != 'о' and s.count('р') == 2 if f1 and f2: ans.append(s) print(len(ans), ans[:10])
Все шестибуквенные слова, в составе которых могут быть только русские буквы С, О, Р, Н, Я, К, записаны в алфавитном порядке и пронумерованы начиная с 1. Ниже приведено начало списка:
1. КККККК 2. КККККН 3. КККККО 4. КККККР 5. КККККС 6. КККККЯ 7. ККККНК ...
Под каким номером в списке идёт первое слово, которое содержит не более трёх букв К и ровно две буквы Я?
72
from itertools import * for i, s in enumerate(product(sorted('сорняк'), repeat = 6), 1): slovo = ''.join(s) if slovo.count('к') <= 3 and slovo.count('я') == 2: print(i); break
Все семибуквенные слова, составленные из букв А, Е, К, П, Т, Ч, записаны в алфавитном порядке и пронумерованы начиная с 1.
Вот начало списка:
1. ААААААА 2. ААААААЕ 3. ААААААК 4. ААААААП 5. ААААААТ 6. ААААААЧ 7. ААААААЕ ...
Сколько слов в списке расположено между словами АПТЕЧКА и ПЕЧАТКА?
Сами слова АПТЕЧКА и ПЕЧАТКА учитывать не нужно.
125459
from itertools import * k = 0 for i in product('аекптч', repeat = 7): s = ''.join(i) if 'аптечка' < s < 'печатка': k += 1 print(k)
(М. Ишимов) Все 6-буквенные слова, составленные из букв А, У, Д, И, Ш, Х, записаны в алфавитном порядке и пронумерованы. Вот начало списка:
1. АААААА 2. АААААД 3. АААААИ 4. АААААУ 5. АААААХ 6. АААААШ ...
Под каким номером в списке стоит первое слово с нечётным номером, которое не начинается с буквы А, содержит не более трёх букв Ш и не содержит букв Х?
7777
from itertools import * for i, s in enumerate(product(sorted('аудишх'), repeat = 6), 1): if s[0] != 'а' and s.count('ш') <= 3 and 'х' not in s: print(i, ''.join(s)); break
(М. Ишимов) Все 5-буквенные слова, составленные из букв Ч, Е, Б, Ю, записаны в алфавитном порядке и пронумерованы. Вот начало списка:
1. БББББ 2. ББББЕ 3. ББББЧ 4. ББББЮ 5. БББЕБ 6. БББЕЕ ...
Сколько существует слов в списке с чётными номерами, которые не начинаются с буквы Ю, и не содержат букв Е, стоящих рядом?
285
from itertools import * k = 0 for i, s in enumerate(sorted(product('чебю', repeat = 5)), 1): slovo = ''.join(s) if i % 2 == 0 and s[0] != 'ю' and 'ее' not in slovo: k += 1 print(k)
(А. Носкин) Маша составляет семибуквенные слова перестановкой букв слова ГЛУБИНА так, чтобы ни одна буква не оставалась на том же месте, что и до перестановки. Например, одним из вариантов перестановки букв может быть слово ЛГБУНАИ. Сколько существует таких слов?
1854
from itertools import * k = 0 for i in permutations('глубина'): s = ''.join(i) if all(len(set(c)) != 1 for c in zip('глубина', s)): k += 1 print(k)
(А. Носкин) Маша составляет семибуквенные слова перестановкой букв слова ГЛУБИНА. Сколько существует слов, в которых буква «Г» расположена после буквы «А», но не сразу после нее?
1800
from itertools import * k = 0 for i in permutations('глубина'): s = ''.join(i) if s.find('г') - s.find('а') > 1: k += 1 print(k)
(А. Носкин) Маша составляет семибуквенные слова перестановкой букв слова ГЛУБИНА. Сколько существует слов, в которых буква «Г» расположена после букв «А» и «И»?
1680
from itertools import * k = 0 for i in permutations('глубина'): s = ''.join(i) if s.find('г') > s.find('а') and s.find('г') > s.find('и'): k += 1 print(k)
(А. Минак) Для составления цепочек используются бусины, помеченные буквами A, Б, В, Г, Д, Е, по следующим правилам: на первом месте в цепочке стоит одна из бусин A, Б, В, Г; на втором – любая согласная буква, если первая буква согласная, или любая гласная, если первая гласная; на третьем месте – одна из бусин Б, В, Д, Е, не стоящая в цепочке на первом или втором месте; на четвертом месте – любая согласная буква, не стоящая на втором или третьем месте. Алгоритм выполняется последовательно, генерируя новые цепочки в лексикографическом порядке.
Вот начало списка:
1. ААБВ 2. ААБГ 3. ААБД 4. ААВБ 5. ААВГ 6. ААВД 7. ААДБ 8. ААДВ 9. ААДГ 10. ААЕБ ...
Под каким номером в списке будет цепочка бусин ГВЕД.
84
Вариант 1:
def f(s): if len(s) == 4: ans.append(s); return 1 if len(s) == 1: return sum(f(s+x) for x in 'абвгде' if s in 'ае' and x in 'ае'\ or s in 'бвгд' and x in 'бвгд') if len(s) == 2: return sum(f(s+x) for x in 'бвде' if x != s[0] and x != s[1]) if len(s) == 3: return sum(f(s+x) for x in 'бвгд' if x != s[1] and x != s[2]) ans = [] for s in 'абвг': f(s) for i, c in enumerate(ans, 1): if c == 'гвед': print(i); break
Вариант 2:
ans = [] for c1 in 'абвг': if c1 == 'а': for c2 in 'ае': for c3 in 'бвде': if c3 != c2 and c3 != c1: for c4 in 'бвгд': if c4 != c2 and c4 != c3: ans.append(c1+c2+c3+c4) else: for c2 in 'бвгд': for c3 in 'бвде': if c3 != c2 and c3 != c1: for c4 in 'бвгд': if c4 != c2 and c4 != c3: ans.append(c1+c2+c3+c4) for i, s in enumerate(ans, 1): if s == 'гвед': print(i) break
(Д. Паршиков) Алиса составила все пятибуквенные слова из букв П, Р, И, В, Ы, Ч, К, А, записала их в алфавитном порядке и пронумеровала. После этого Алиса удалила каждое пятое слово и пронумеровала новый список. Вот начало списка после удаления слов:
1. ААААА 2. ААААВ 3. ААААИ 4. ААААК 5. ААААР (слово ААААП удалено) ...
Под каким номером идет первое слово, состоящее только из согласных букв, где все буквы различные?
4754
from itertools import *
gen = [''.join(i) for i in product(sorted('привычка'), repeat = 5)]
for i, c in enumerate(gen, start = 1):
if i % 5 == 0:
#мы задаем в enumerate принудительную нумерацию с 1,
#но в списке у элементов индекс НА ЕДИНИЦУ МЕНЬШЕ
gen[i-1] = ''
gen = [c for c in gen if c != '']
for i, c in enumerate(gen, 1):
if all(s not in c for s in 'иыа') and len(set(c))==5:
print(i, c); break
Сколько существует чисел, девятеричная запись которых состоит из пяти цифр, содержит ровно один ноль, причём ни одна нечётная цифра не стоит рядом с нулём?
5120
def f(x): s = '' while x: s += str(x%9); x //= 9 return s[::-1] ans = [] for x in range(int('10000',9), int('100000',9)): x9 = f(x) if x9.count('0') == 1: for c in '357': x9 = x9.replace(c, '1') if '01' not in x9 and '10' not in x9: ans.append(f(x)) print(len(ans), ans[:50])
Сколько существует чисел, восьмеричная запись которых состоит из пяти цифр, не начинается с нечётных цифр, не оканчивается цифрами 2 и 6 и содержит не более двух цифр 7?
9135
from itertools import * cnt = 0 for i in product('01234567', repeat = 5): x = ''.join(i) if x[0] not in '01357' and x[-1] not in '26': if x.count('7') <= 2: cnt += 1 print(cnt)
Сколько существует чисел, девятеричная запись которых состоит из шести цифр, не начинается с нечётных цифр, не оканчивается цифрами 2 и 3 и содержит не менее двух цифр 1?
19868
from itertools import * cnt = 0 for i in product('012345678', repeat = 6): x = ''.join(i) if x[0] not in '01357' and x[-1] not in '23': if x.count('1') >= 2: cnt += 1 print(cnt)
Все пятибуквенные слова, составленные из букв Ф, О, К, У, С записаны в алфавитном порядке и пронумерованы. Вот начало списка:
1. ККККК 2. ККККО 3. ККККС 4. ККККУ 5. ККККФ ...
Под каким номером в списке идёт последнее слово, которое не содержит букв Ф и содержит ровно две буквы У?
2313
from itertools import * for nmb, sl in enumerate(product(sorted('фокус'), repeat=5),1): s = ''.join(sl) if 'ф' not in s and s.count('у')==2: n = nmb print(n)
Определите количество 15-ричных пятизначных чисел, в записи которых ровно одна цифра 8 и не менее двух цифр с числовым значением, превышающим 9.
83175
def f(x): k = k8 = 0 while x: k += x%15 > 9 k8 += x%15 == 8 x //= 15 return k >= 2 and k8 == 1 cnt = 0 for x in range(int('10000',15), int('100000',15)): cnt += f(x) print(cnt)
Определите количество 14-ричных пятизначных чисел, в записи которых ровно одна цифра 9 и не более трех цифр с числовым значением, превышающим 10.
133612
def f(x): k = k9 = 0 while x: k += x%14 > 10 k9 += x%14 == 9 x //= 14 return k <= 3 and k9 == 1 cnt = 0 for x in range(int('10000',14), int('100000',14)): cnt += f(x) print(cnt)
Определите количество 12-ричных пятизначных чисел, в записи которых ровно одна цифра 7 и не более трёх цифр с числовым значением, превышающим 8.
67476
from itertools import * cnt = 0 for i in product('0123456789AB', repeat = 5): s = ''.join(i) if s[0] != '0': if s.count('7') == 1: if sum(c > '8' for c in s) <= 3: cnt += 1 print(cnt)
(О. Лысенков) Определите количество чисел, 20-ричная запись которых содержит пять цифр, причём в этой записи чётные и нечётные цифры чередуются и сумма числовых значений крайних цифр равна 26.
13000
Вариант 1 (замены):
from itertools import * from string import * alph = (digits + ascii_uppercase)[:20] cnt = 0 for i in product(alph, repeat = 5): s = ''.join(i) if int(s[0],20)+int(s[-1],20) == 26: for c in alph: if alph.index(c) % 2 == 0: s = s.replace(c,'0') else: s = s.replace(c,'1') if '00' not in s and '11' not in s: cnt += 1 print(cnt)
Вариант 2:
from itertools import * alph = list(range(20)) cnt = 0 for s in product(alph, repeat=5): if s[0] + s[-1] == 26: if all(s[j-1] % 2 != s[j] % 2 for j in range(1, 5)): cnt += 1 print(cnt)
(О. Лысенков) Определите количество чисел, 25-ричная запись которых содержит четыре цифры, причём в этой записи ровно одна нечётная цифра и не более двух цифр с числовым значением, не превышающим 5.
95700
from itertools import * alph = list(range(25)) cnt = 0 for s in product(alph, repeat = 4): if s[0] != 0: if sum(c%2 != 0 for c in s) == 1: if sum(c <= 5 for c in s) <= 2: cnt += 1 print(cnt)
(О. Лысенков) Все девятибуквенные слова, в составе которых могут быть только русские буквы Т, О, К, С, И, Ч, Н, Ы, Й записаны в алфавитном порядке и пронумерованы начиная с 5. Вот начало списка:
5. ИИИИИИИИИ 6. ИИИИИИИИЙ 7. ИИИИИИИИК 8. ИИИИИИИИН 9. ИИИИИИИИО 10. ИИИИИИИИС 11. ИИИИИИИИТ 12. ИИИИИИИИЧ 13. ИИИИИИИИЫ 14. ИИИИИИИЙИ ...
Под каким номером в этом списке стоит слово ТОКСИЧНЫЙ?
278775753
alph = sorted('токсичный') s = 'токсичный' v = ''.join(str(alph.index(c)) for c in s) print(int(v,9)+5)
(О. Лысенков) Определите количество чисел, 36-ричная запись которых содержит четыре цифры, среди которых не менее двух гласных латинских букв (A, E, I, U, Y, O) и не более двух цифр с числовым значением, не превышающим 13. Цифры со значениями из диапазона [10;35] обозначаются латинскими буквами A-Z (например, значению 35 соответствует буква Z).
203929
from string import * alph = digits + ascii_uppercase vowels = [alph.index(c) for c in 'AEIUYO'] dig_alph = list(range(36)) from itertools import * cnt = 0 for x in product(dig_alph, repeat = 4): if x[0] != 0: if sum(c in vowels for c in x) >= 2: if sum(c <= 13 for c in x) <= 2: cnt += 1 print(cnt)
(О. Лысенков) Известно что число X = ****A**16 = ****2***38. На месте символа "*" может быть любая из цифр соответствующей системы счисления, причём каждая из звёздочек является значащей цифрой (число не может начинаться с цифры 0). Найдите количество чисел X, удовлетворяющих этому условию.
114688
from itertools import * cnt = 0 for i in product('01234567', repeat=7): x8 = ''.join(i[:4])+'2'+''.join(i[4:])+'3' if x8[0] != '0': x16 = f'{int(x8, 8):X}' if len(x16) == 7 and x16[-3] == 'A': cnt += 1 print(cnt)
Петя составляет список всех возможных кодов, составленных из заглавных латинских букв. Сначала он выписывает в алфавитном порядке все коды, состоящие из одного символа (A, B, …, Z), затем – тоже в алфавитном порядке – коды из двух символов (AA, AB, …, AZ, BA, BB, … ZZ), далее идут трёхсимвольные коды (AAA, AAB, …, ZZZ) и так далее. Под каким порядковым номером окажется в этом списке код DEAED? Нумерация начинается с единицы.
1916594
from string import * alph = ascii_uppercase from itertools import * cnt = 0 for n in range(1, 6): for i in product(alph, repeat = n): s = ''.join(i) cnt += 1 if s == 'DEAED': print(cnt) break
Все пятибуквенные слове, в составе которых могут быть только русские буквы Я, Н, В, А, Р, Ь, записаны в алфавитном порядке и пронумерованы, начиная с 1. Вот начало списка:
1. ААААА 2. AAAAB 3. AAAAH 4. AAAAP 5. AAAAЬ 6. ААААЯ 7. AAABA ...Под каким номером в списке идёт последнее слово, которое не начинается с буквы Я, содержит не более одной буквы Ь и не содержит букв Я, стоящих рядом?
6406
from itertools import * for nmb, i in enumerate(product(sorted('январь'), repeat=5), 1): s = ''.join(i) if s[0] != 'я' and s.count('ь') <= 1: if 'яя' not in s: last = nmb print(last)
(О. Лысенков) Петя составляет список всех возможных кодов, составленных из заглавных латинских букв. Сначала он выписывает в алфавитном порядке все коды, состоящие из одного символа (A, B, …, Z), затем – тоже в алфавитном порядке – коды из двух символов (AA, AB, …, AZ, BA, BB, … ZZ), далее идут трёхсимвольные коды (AAA, AAB, …, ZZZ) и так далее. Какое слово в этом списке стоит под номером 3282210? Нумерация начинается с единицы.
GDSHV
from string import * alph = ascii_uppercase from itertools import * cnt = 0; flag = 0 for n in range(1, 27): for i in product(alph, repeat = n): cnt += 1 if cnt == 3282210: print(''.join(i)) flag = 1 break if flag: break
Шифр кодового замка представляет собой последовательность из четырёх символов, каждый из которых является цифрой от 1 до 6. Сколько различных вариантов шифра можно задать, если известно, что цифра 3 должна встречаться в коде ровно 1 раз, а каждая из других допустимых цифр может встречаться в шифре любое количество раз или не встречаться совсем, но при этом количество чётных цифр в шифре не превосходит количество нечётных.
392
Вариант 1:
from itertools import * ans = [] for i in product('123456', repeat = 4): s = ''.join(i) if s.count('3') == 1: for c in '46': s = s.replace(c, '2') for c in '35': s = s.replace(c, '1') if s.count('2') <= s.count('1'): ans.append(''.join(i)) print(len(ans), ans[:50])
Вариант 2 (регулярные выражения):
from itertools import * from re import * ans = [] for i in product('123456', repeat = 4): s = ''.join(i) if s.count('3') == 1: s = sub(r'[46]','2',s); s = sub(r'[35]','1',s) if s.count('2') <= s.count('1'): ans.append(''.join(i)) print(len(ans), ans[:50])
(Б. Михлин) Ученик составляет список всех возможных слов, составленных из заглавных латинских букв. Сначала он выписывает в алфавитном порядке все словa, состоящие из одной буквы (A, B, …, Z), затем – тоже в алфавитном порядке – словa из двух букв (AA, AB, …, AZ, BA, BB, … ZZ), далее идут трёхбуквенные словa (AAA, AAB, …, ZZZ) и так далее. Нумерация слов начинается с единицы: 1 – A, 2 – B, ..... 26 – Z, 27 – AA, 28 – AB, ...... Под каким порядковым номером окажется в этом списке слово KBYTE?
5079313
from itertools import * from string import * alph = printable[10:36].upper() cnt = 0 for n in range(1, 6): flag = 0 for i in product(alph, repeat=n): cnt += 1 if len(i) == 5: s = ''.join(i) if s == "KBYTE": flag = 1; print(cnt); break if flag: break
(Б. Михлин) Ученик составляет список всех возможных слов, составленных из заглавных латинских букв. Сначала он выписывает в алфавитном порядке все словa, состоящие из одной буквы (A, B, …, Z), затем – тоже в алфавитном порядке – словa из двух букв (AA, AB, …, AZ, BA, BB, … ZZ), далее идут трёхбуквенные словa (AAA, AAB, …, ZZZ) и так далее. Нумерация слов начинается с единицы: 1 – A, 2 – B, ..... 26 – Z, 27 – AA, 28 – AB, ...... Под каким порядковым номером окажется в этом списке слово SCREEN?
227436964
Вариант 1:
from itertools import * from string import * alph = printable[10:36] number = 26 + 26**2 + 26**3 + 26**4 + 26**5 step = 0 for i in 'screen'[::-1]: number += alph.index(i) * 26**step step += 1 print(number + 1)
Вариант 2 (более длительный):
from itertools import * from string import * alph = printable[10:36] number = 26 + 26**2 + 26**3 + 26**4 + 26**5 for n, i in enumerate(product(alph, repeat = 6), 1): s = ''.join(i) if s == 'screen': break print(number + n)
Виктор составляет таблицу кодовых слов для передачи сообщений, каждому сообщению соответствует своё кодовое слово. В качестве кодовых слов Виктор использует 5-буквенные слова, в которых могут быть только буквы Д, Г, И, А, Ш, Э, причём слово не должно начинаться с гласной и не должно заканчиваться согласной. Сколько различных кодовых слов может использовать Виктор?
1944
from itertools import * ans = set() for i in product('дгиашэ', repeat = 5): s = ''.join(i) if s[0] not in 'иаэ' and s[-1] not in 'дгш': ans.add(s) print(len(ans), list(ans)[:100])
Все шестибуквенные слова, в составе которых могут быть только буквы П, О, Б, Е, Д, А, записьны в алфавитном порядке и пронумерованы начиная с 1.
Ниже приведено начало списка.
1. AAAAAA 2. АААААБ 3. АААААД 4. AAAAAE 5. АААААО 6. АААААП ...
Определите последний чётный номер слова, которое начинается с буквы О и в котором каждая буква встречается ровно один раз.
Примечание. Слово - последовательность идущих подряд букв, не обязательно осмысленная.
38306
from itertools import * for n, i in enumerate(product(sorted('победа'), repeat=6),1): s = ''.join(i) if n%2==0 and s[0]=='о' and len(set(s))==6: mx = n print(mx)