Python задачка "Всё ограниченно"

Нужно посчитать количество битов равных 1 в числе переведенном в двоичную систему, допустим число 13 , в битовом вариаинте 13 = 1101, ответ будет 3. У меня получилось написать код, который считает количество битов, но не проходит, я не особо понял условие задачи, поэтому условия оставляю на английском.

Числа в промежутке от 0 до 2^32

In your code you cannot have non-whitespace substrings of length greater than one with the exception of the following:int(,print(,input()

[![Задание][1]][1]

n=int(input())
bin_n = []
bin_n.append(bin(n))
count = 0
for i in bin_n:
    for j in i:
        if j == '1':
            count+=1
print(count)

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

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

у вас не код, а тихий ужас

вариант 1:

не проще ли сделать так:

value = int(input())

count = 0
while value > 0:
    count += value % 2
    value //= 2

print(count)
  1. получить ввод от пользователя

  2. перевести его в число

  3. перевести побитово в двоичный вид (деление числа по модулю 2 даёт текущий бит, деление нацело на 2 уменьшает число)

  4. подсчитать биты равные 1 (просто увеличиваем счетчик текущим битом - он или 1 или 0, 0 сумму не увеличивает)

вариант 2:

если же делать через строки как вы, тогда вот вам вариант вообще в 1 строку:

print(bin(int(input()))[2:].count('1'))
  1. получить ввод от пользователя

  2. перевести его в число

  3. преобразовать число в hex представление в виде строки

  4. отрезать первые 2 символа (в них содержится 0b - указатель, что строка это число в двоичном представлении)

  5. подсчитать кол-во 1

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

In your code you cannot have non-whitespace substrings of length greater than one with the exception of the following:int(,print(,input()

Простейшим решением этой головоломки могут быть 32 копии следующего блока:

r = r + ( ( a & 1 ) > 0 )
a = int( a / 2 )

( ( a & 1 ) > 0 ) - это аналог a % 2, только без деления.
Прямая проверка того, что последний бит включен.
Хотя, можно использовать и деление.


a = int( input() )

r = 0

# 0
r = r + ( ( a & 1 ) > 0 )
a = int( a / 2 )

# 1
r = r + ( ( a & 1 ) > 0 )
a = int( a / 2 )

# 2
r = r + ( ( a & 1 ) > 0 )
a = int( a / 2 )

# 3
r = r + ( ( a & 1 ) > 0 )
a = int( a / 2 )

# ...

# 32
r = r + ( ( a & 1 ) > 0 )
a = int( a / 2 )

print( r )
→ Ссылка
Автор решения: Эникейщик

В коде нельзя иметь последовательности букв и прочих символов длиннее 1 символа, за исключением перечисленных. Отсюда следует: переменным давать имена из одной буквы и можно пользоваться только арифметическими операторами. Например:

n = input()
s = int( n )
r = 0

d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
print( r )
→ Ссылка
Автор решения: Stanislav Volodarskiy

Надо уже как-то оптимизировать:

h = 2 * 8 * 8
m = h - 1
b = [ 0 , 1 , 1 , 2 , 1 , 2 , 2 , 3 , 1 , 2 , 2 , 3 , 2 , 3 , 3 , 4 , 1 , 2 , 2 , 3 , 2 , 3 , 3 , 4 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 1 , 2 , 2 , 3 , 2 , 3 , 3 , 4 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6 , 1 , 2 , 2 , 3 , 2 , 3 , 3 , 4 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6 , 4 , 5 , 5 , 6 , 5 , 6 , 6 , 7 ]
s = int( input() )
t = int( s / h )
u = int( t / h )
v = int( u / h )
w = int( v / h )
print( b [ s & m ] + b [ t & m ] + b [ u & m ] + b [ v & m ] + b [ w & m ] )
→ Ссылка