Вот задание:
Алгоритм получает на вход натуральное число N и строит по нему новое число R следующим образом:
1. Строится двоичная запись числа N.
2. Подсчитывается количество чётных и нечётных цифр в десятичной записи заданного числа. Если в десятичной записи больше чётных цифр, то в конец двоичной записи дописывается 1, если нечётных — 0. Если чётных и нечётных цифр в десятичной записи поровну, то в конец двоичной записи дописывается 0, если данное число чётное, и 1 — если нечётное.
3−4. Пункт 2 повторяется для вновь полученных чисел ещё два раза.
5. Результатом работы алгоритма становится десятичная запись полученного числа R.
Определите количество принадлежащих отрезку [876 544; 1 234 567 899] чисел, которые могут получиться в результате работы этого алгоритма.
Вот мой код (пожалуйста, не убирайте метод
replace, если это возможно):
res = []
for n in range(1, 10000):
s = bin(n)[2:]
for _ in range(3):
i = str(n)
i = i.replace('0', '2').replace('4', '2').replace('6', '2').replace('8', '2')
i = i.replace('3', '1').replace('5', '1').replace('7', '1').replace('9', '1')
if i.count('2') > i.count('1'):
s += '1'
elif i.count('2') < i.count('1'):
s += '0'
elif i.count('2') == i.count('1'):
if i.count('2') % 2 == 0:
s += '0'
else:
s += '1'
if int(s, 2) >= 876544 and int(s, 2) <= 1234567899:
res.append(int(s, 2))
print(len(res))