Пытался решить задачу, но выдает ошибку при переводе в 10-ичную сс. Помогите, пожалуйста, решить задачу.
Автомат обрабатывает десятичное натуральное число N по следующему алгоритму:
1) Строится двоичная запись числа N.
2) К полученному числу справа дописывается 0, если в числе единиц больше, чем нулей; иначе дописывается 1.
3) Из середины двоичного числа убирается 2 разряда, если количество разрядов получилось четным, и 3 разряда, если нечетное.
4) Результат переводится в десятичную систему.
Пример. Дано число N = 11. Алгоритм работает следующим образом.
1) Двоичная запись числа N: 11 = 10112
2) Единиц больше, чем нулей, новая запись 101102.
3) Длина начётная, удаляем три средних разряда, новая запись 102.
4) Десятичное значение полученного числа 2.
Сколько различных значений может получиться на отрезке [50; 100] в результате работы автомата?
cnt = 0
for n in range(1, 1000):
s = bin(n)[2:]
if s.count('1') > s.count('0'):
s += '0'
else:
s+= '1'
m = len(s) // 2 ## округляется по меньшему числу
if len(s) % 2 == 0:
s = s[:m-1] + s[m+1:]
else:
s = s[:m-1] + s[m+2:]
r = int(s, 2)
if 50 <= r <= 100:
cnt += 1
print(cnt)
Ошибка
Traceback (most recent call last):
line 13, in <module>
r = int(s, 2)
ValueError: invalid literal for int() with base 2: ''