Python

8 Тип ЕГЭ Информатика

Нужно решить программно на Python:

Ваня составляет 6-буквенные слова из букв слова КОМПЬЮТЕР так, что в них можно убрать три буквы и получить слово КОТ. Сколько различных слов может составить Ваня?
 from itertools import product 


def check(v):
k, o, t = 0, 0, 0
for i in v:
if i == 'K':
k = 1
elif i == 'O' and k == 1:
o = 1
elif i == 'T' and o == 1:
t = 1
return k * o * t


a = ['K', 'O', 'M', 'P', '`', 'U', 'T', 'E', 'R']
b = list(product(a, repeat=6))
c = 0
for i in b:
c += check(i)
print(c)

Результатом работы данной программы будет 11249, что и является ответом
Kurmet Amantai
Kurmet Amantai
182
Лучший ответ
Банальная комбинаторика.
Три буквы К, О, Т в 6-буквенном слове можно разместить A(3, 6) = 6! / (6 - 3)! способами.
На оставшихся 3 местах 6-буквенного слова оставшиеся 6 букв М, П, Ь, Ю, Е, Р можно разместить A(3, 6) = 6! / (6 - 3)! способами.
Весь код:
 import math
print((math.factorial(6) // math.factorial(3)) ** 2)
Если порядок букв КОТ важен, то для К, О, Т вместо A(3, 6) берём С(3, 6) = 6! / (3! *(6 - 3)!)
Весь код:
 import math
print(math.factorial(6) ** 2 // math.factorial(3) ** 3)
Василий Кобзев
Василий Кобзев
99 380
Василий Гурьевских Однако верный ответ — 11249 (Сайт Kpolyakov с ответами, но без решений)
 from itertools import product  

a = ['К', 'О', 'М', 'П', 'Ь', 'Ю', 'Т', 'Е', 'Р']
comb = list(product(a, repeat=6))
count = 0
for word in comb:
search_ptr = 0
for letter in word:
if letter == "КОТ"[search_ptr]:
search_ptr += 1
if search_ptr == 3:
count += 1
break

print(count)
Без itertools:
 word = "КОМПЬЮТЕР" 
count = 0

for c1 in word:
for c2 in word:
for c3 in word:
for c4 in word:
for c5 in word:
for c6 in word:
new_word = c1+c2+c3+c4+c5+c6
search_ptr = 0
for letter in new_word:
if letter == "КОТ"[search_ptr]:
search_ptr += 1
if search_ptr == 3:
count += 1
break
print(count)
Через рекурсию:
 def generate_words(word, new_word=""): 
combinations = []
if len(new_word) == 6:
combinations.append(new_word)
else:
for c in word:
combinations.extend(generate_words(word, new_word + c))
return combinations

word = "КОМПЬЮТЕР"
count = 0
comb = generate_words(word)
for word in comb:
search_ptr = 0
for letter in word:
if letter == "КОТ"[search_ptr]:
search_ptr += 1
if search_ptr == 3:
count += 1
break

print(count)
ss = set()
from itertools import product
for n in set(product( 'КОМПЬЮТЕР', repeat=6 )):
___ n = ''.join(n)
___ if n.find('К') >= 0 and n.rfind('Т')>= 0 and n.find('О', n.find('К'), n.rfind('Т'))>0:
_______ss.add(n)
print(len(ss))
C.
Crazy ....
185