Реализация последовательности строк
Само задание взято отсюда https://stepik.org/lesson/24470/step/16?unit=6776 Выведите строки, содержащие двоичную запись числа, кратного 3.
Двоичной записью числа называется его запись в двоичной системе счисления.
Данная задача очень просто может быть решена приведением строки к целому числу и проверке остатка от деления на три, но мы все же предлагаем вам решить ее, не используя приведение к числу.
Sample Input:
0
10010
00101
01001
Not a number
1 1
0 0
Sample Output:
0
10010
01001
Моё решение:
import sys
import re
for line in sys.stdin:
line = line.rstrip()
Местный интерпретатор сайта выдает такую ошибку:

В чём дело, что я делаю не так?
Ответы (1 шт):
Если я не ошибаюсь, это известный тип задач с простым решением: число делится нацело на 3, если разница суммы единиц в его двоичной записи на четных позициях и суммы единиц на нечетных тоже кратна 3.
Посему, можно предложить навскидку такое решение:
def divthree(a: str)-> bool:
odds = sum([int(x) for x in a[::2]])
evens = sum([int(x) for x in a[1::2]])
diff = odds - evens
if diff/3 == diff//3:
return True
return False
Проверяем:
divthree("1111") # True
divthree("1101") # False
divthree("0") # True
divthree("1") # False