В чем ошибка? Задача из ЕГЭ на Python

В чем заключается ошибка в коде? На вход алгоритма подается натуральное число N > 1. Алгоритм строит по нему новое число R следующим образом.

  1. Строится двоичная запись числа N.
  2. Из полученной записи убирается старшая (левая) единица.
  3. Далее эта запись обрабатывается по следующему правилу:
    1. если в полученной записи количество единиц четное, то слева дописывается 10;
    2. если количество единиц нечётное, слева дописывается 1, справа 0.

Полученная таким образом запись является двоичной записью искомого числа R.

Например,

для исходного числа 4 = 1002 результатом будет являться число 8 = 10002, а для исходного числа 6 = 1102 результатом будет являться число 12 = 11002.

Укажите максимальное число R, меньшее 450, которое может являться результатом работы алгоритма. В ответе запишите это число в десятичной системе счисления.

Ответ 444, выводит 382

def to_two(n):
    s = ""
    while n > 0:
        s = str(n % 2) + s
        n //= 2
    return s

for n in range(100000):
    k1 = to_two(n)
    k1 = k1[1:]  
    if k1.count("1") % 2 == 0:
        k1 = "10" + k1
    else:
        k1 = "1" + k1 + "0"
    if int(k1, 2) < 450:
        ans = int(k1, 2)
print(ans)

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

Автор решения: Alex Titov

А у Вас был ответ 444, но в ходе дальнейшего выполнения цикла он "затерся" последним успешным сравнением if int(k1, 2) < 450. Надо перед началом цикла присвоить ans=0, а потом не запоминать ответы, если они меньше "предыдущего" ans.

→ Ссылка
Автор решения: Алексей Р

Я бы обходил результирующие числа задом наперед, поскольку нужно найти наибольшее. А входящие числа можно вообще не рассматривать.

for i in range(449, -1, -1):
    b = f'{i:b}'
    if b[:2] == '10' and b[3:].count('1') % 2 == 0 or b[0] + b[-1] == '10' and b[1:-1].count('1') % 2:
        print(i)
        break
444
→ Ссылка