нужно в 24 строки уложиться
Замените тело функции invert на
return ''.join('0' if n == '1' else '1' for n in d)
Получится ровно 24.
Тело второй функции тоже сократим до одной строки:
return '1' if n == 1 else ((s := dracon(n - 1)) + '1' + invert(s)[::-1])
Сами функции теперь ничего не мешает переписать в виде лямбд.
Наконец, заметим, что две строки перед циклом, который перебирает
dr
, идентичны одной из веток условного оператора внутри цикла - так что удалим их, а цикл пусть сделает ещё одну итерацию, для этого в начале
dr
должно оказаться что-то, отличное от
'1'
.
Достаточно коротко получилось?invert = lambda d: ''.join('0' if n == '1' else '1' for n in d)
dracon = lambda n: '1' if n == 1 else ((s := dracon(n - 1)) + '1' + invert(s)[::-1])
dr = '0' + dracon(int(input()))
print(dr)
import turtle as t
tt = t.Turtle()
for n in dr:
if n == '1':
tt.right(90)
tt.forward(4)
else:
tt.left(90)
tt.forward(4)
input()
Тут конечно надо отметить, что на данный момент далеко не везде используется python версии 3.8+, так что приведённый код может у вас и не взлететь, по причине наличия в нём assignment expression (оператор
:=
).