Помогите решить 8 задание в егэ

(№ 5890) (А. Бриккер) Определите количество шестизначных чисел, записанных в восьмеричной системе счисления, в которых первые две цифры меньше всех оставшихся четырёх цифр, а запись числа не содержит трёх подряд идущих чётных цифр.

Ответ: 5528

Сижу уже второй час и никак не могу понять, где я могла допустить ошибку

Мой код:

from itertools import *

s = '01234567'
k = 0

for i in product(s, repeat = 6):
    a = ''.join(i)
    if a[0] != '0' and len(a) == 6 and a[0] < a[2] and a[0] < a[3] and a[0] < a[4] and a[0] < a[5] and a[1] < a[2] and a[1] < a[3] and a[1] < a[4] and a[1] < a[5] and '000' not in a and '222' not in a and '444' not in a and '666' not in a:
        k += 1
print(k)

Выводит: 7156


Ответы (3 шт):

Автор решения: cringe foundation
count = 0
for x in range(8**5, 8**6):
  i = x
  d = ''
  e = ''
  while i > 0:
    d += str(i%8)
    e += str((i%8)%2)
    i //= 8
  # d - реверс числа в 8ричной, e - чётности цифр реверса
  A = '000' not in e
  if not A:
    continue
  mx = max(int(d[-1]), int(d[-2]))
  # mx - макс. из первых двух цифр
  flag = True
  for i in range(4):
    if int(d[i]) <= mx:
      flag = False
      break
  if not flag:
    continue
  count += 1
print(count)
  
  
→ Ссылка
Автор решения: Wals
from itertools import permutations, product

comb = list(product("01234567", repeat = 6))
c = 0
for i in comb:
    if i[0]!="0":
        f = 1
        for j in range(2,6):
            if (int(i[0]) >= int(i[j])) or (int(i[1]) >= int(i[j])):
                f = 0
        for h in range(4):
            if int(i[h])%2 == int(i[h+1])%2 == int(i[h+2])%2 == 0:
                f = 0
        if f == 1:
            c+=1
print(c)
→ Ссылка
Автор решения: Stanislav Volodarskiy

Ошибка в условии "запись числа не содержит трёх подряд идущих чётных цифр". Вы проверяете комбинации из трёх подряд одинаковых чисел, а они могут быть разными. Первое лишнее число в вашем решении 102232. Комбинация 022 недопустима.

Если регулярные выражения вас не пугают, можно решить задачу так:

from itertools import product
import re

c = 0
for p in product('01234567', repeat=6):
    # строка из цифр
    n = ''.join(p)

    # настоящие числа с нуля не начинаются
    if n[0] == '0':
        continue
    
    # "первые две цифры меньше всех оставшихся четырёх цифр"
    if max(n[:2]) >= min(n[2:]):
        continue

    # "не содержит трёх подряд идущих чётных цифр"
    if re.search('[0246]{3}', n) is not None:
        continue

    # print(n)
    c += 1

print(c)
→ Ссылка