Реализация последовательности строк

Само задание взято отсюда 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 шт):

Автор решения: strawdog

Если я не ошибаюсь, это известный тип задач с простым решением: число делится нацело на 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
→ Ссылка