Здравствуйте, Константин Юрьевич!
Решая 5 задание 5 варианта из генератора, отталкивался от предложенного решения за № 184 ege5.doc,
def alg( x ):
s = "{:08b}".format(x-1)
s1 = ""
doInversion = True
for c in reversed(s):
if c == '1': s1 = '0' + s1
else: s1 = '1' + s1
return int(s1,2)
for i in range(1, 256):
print( i, alg(i) )
if alg(i) == 18:
break
К сожалению, так и не смог понять, для чего нужна эта строка:
doInversion = True, если программа и без нее работает ...
Пришлось искать другие пути.
К своему удивлению нашел более короткие и понятные для себя алгоритмы, буду рад, если Вы сочтете возможным какое - либо из них опубликовать, в крайнем случае, может они помогут таким же как я, начинающим "питонистам" форума
решение 184 задания перебором 1:
for i in range(1, 256):
s = "{:08b}".format(i-1)
s = s.replace('1', '2')
s = s.replace('0', '1')
s = s.replace('2', '0')
if int(s,2) == 18:
print( i )
решение 184 способ 2:
for i in range(1,256):
x = bin(i-1)[2:]
s = '0'*(8-len(x))+x
s = s.replace('1', '2')
s = s.replace('0', '1')
s = s.replace('2', '0')
if int(s,2)==18:
print('Решение перебором:',i)
решение 184 задания с конца:
x=bin(18)[2:]
s = '0'*(8-len(x))+x
s = s.replace('1', 'k')
s = s.replace('0', '1')
s = s.replace('k', '0')
print('Решение с конца:',int(s,2)+1)
или
s = "{:08b}".format(18)
s = s.replace('1', 'k')
s = s.replace('0', '1')
s = s.replace('k', '0')
print(int(s,2)+1)
Отсда и аналогичные решения для задания 5 варианта 5
for i in range(10,100):
x=bin(i)[2:]
s = '0'*(8-len(x))+x
s = s.replace('1', 'k')
s = s.replace('0', '1')
s = s.replace('k', '0')
x=int(s,2)+1
if x==221:
print('Решение перебором',i)
и
s = bin(220)[2:]
s = s.replace('1', 'k')
s = s.replace('0', '1')
s = s.replace('k', '0')
print(int(s,2))
Спасибо!
С уважением, Александр