Суперкомпьютер для разминки генерирует тройки слов. Первое слово имеет длину 5 и состоит из букв слова ПИРОГ, в нём каждая буква может встречаться любое количество раз, при этом буква Р может стоять только после буквы О. Второе слово имеет длину 4 и состоит из цифр шестеричной системы счисления. Третье слово имеет также длину 4 и состоит из цифр пятеричной системы счисления. Причём количество чётных цифр во втором и третьем словах должно быть одинаковым и они не могут начинаться с 0.
Необходимо найти общее число троек, которое может составить Суперкомпьютер.
Решение через циклы
a = ’ПИРОГ’ # символы первого слова
b = ’012345’ # символы второго слова
c = ’01234’ # символы третьего слова
count1 = 0
count23 = 0
for x1 in a:
for x2 in a:
for x3 in a:
for x4 in a:
for x5 in a:
s = x1+x2+x3+x4+x5
if s.count(’Р’) == s.count(’ОР’):
count1 += 1
for x1 in ’12345’: # число не может начинаться с 0
for x2 in b:
for x3 in b:
for x4 in b:
s1 = x1+x2+x3+x4
for x5 in ’1234’: # число не может начинаться с 0
for x6 in c:
for x7 in c:
for x8 in c:
s2 = x5+x6+x7+x8
m1 = [i for i in s1 if int(i) % 2 == 0] # четные цифры первого числа
m2 = [i for i in s2 if int(i) % 2 == 0] # четные цифры второго числа
if len(m1) == len(m2):
count23 += 1
print(count1*count23) # перемножаем для того чтобы получить итоговое количество троек
Решение через itertools
from itertools import product
s1 = ’ПИРОГ’
cnt1 = 0
for i in product(s1, repeat=5):
word = ’’.join(i)
if word.count(’Р’) == word.count(’ОР’):
cnt1 += 1
s2 = ’012345’
s3 = ’01234’
cnt23 = 0
for i in product(s2, repeat=4):
i = ’’.join(i)
if i[0] != ’0’:
for j in product(s3, repeat=4):
j = ’’.join(j)
if j[0] != ’0’:
i = i.replace(’2’, ’0’).replace(’4’, ’0’)
j = j.replace(’2’, ’0’).replace(’4’, ’0’)
if i.count(’0’) == j.count(’0’):
cnt23 += 1
print(cnt1 * cnt23)