Вот задание:
Алгоритм получает на вход натуральное число 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))