@destinyheart
Начинающий программист.

Как возможно интерпретировать этот Pascal ABC код в Python код?

Суть задачи:

В процессе обучения искусству оригами, Митя достиг апогея своего развития он научился складывать листы точно пополам! Так же он выяснил, что лист бумаги можно сложить пополам, только если длина стороны, которая уменьшается в результате складывания, не меньше удвоенной толщины. Вам задан прямоугольный лист бумаги единичной толщины и размером L W. Подсчитайте, какое максимальное количество раз он может быть сложен.
Во входном файле заданы два целых число L и W (длина и ширина листа соответственно).
В выходной файл выведите одно число максимальное число складываний, которое можно произвести с имеющимся листом бумаги.

Пример 1
Ввод
82 18 
Вывод
    4


Пример 2
Ввод	 
404 279          
Вывод
    6


Пример 3
Ввод	 
10 26             
Вывод
   3


У меня есть код который частично решает это задачу.

var L,W,M,K,T,H,F:real;
    i: integer;
    a:array [1..1000] of integer; 
Begin
read(L,W);
m:=1;
K:=0;
if W<L then begin
  H:=L;
  F:=W;
  end
else begin 
  H:=W;
  F:=L;
  end;
for i:=1 to 1000 do begin
  if H>2*m then begin
    K:=K+1;
    m:=m*2;
    H:=H/2;
  end
  else T:=K;
end;
for i:=1 to 1000 do begin
  if F>2*m then begin
    K:=K+1;
    m:=m*2;
    F:=F/2;
  end
  else T:=K;
end;
writeln(T);
End.


Могли бы Вы объяснить как работает этот код?(По какому принципу, т.к я не знаю даже основ паскаля, то пожалуйсто, подробно.) Если это возможно, интерпретируйте этот код в Python код. Надеюсь я не ошибся тематикой портала.
  • Вопрос задан
  • 2507 просмотров
Решения вопроса 2
adugin
@adugin Куратор тега Python
class Sheet:
    def __init__(self, width, length, thickness=1, count=0):
        self.width, self.length = sorted([width, length])
        self.thickness = thickness
        self.count = count
        
    @property
    def foldable(self):
        return self.length >= 2 * self.thickness
    
    def fold_once(self):
        if self.foldable:
            self.width, self.length = sorted([self.width, self.length/2])
            self.thickness *= 2
            self.count += 1
            return True
        else:
            return False
        
    def fold(self):
        while self.fold_once():
            pass
        return self


def run_test_cases():
    assert Sheet(82, 18).fold().count == 4
    assert Sheet(404, 279).fold().count == 6
    assert Sheet(10, 26).fold().count == 3


if __name__ == '__main__':
    # run_test_cases()
    with open('input.txt', 'rt') as fi, open('output.txt', 'wt') as fo:
        dimensions = map(float, next(fi).split())
        answer = Sheet(*dimensions).fold().count
        print(answer, file=fo)
Ответ написан
AlexSetup
@AlexSetup
Python
Вот код проверьте:
L, W = map(int, input().split())
m=1
K=0
if W<L:
    H=L 
    F=W 
else:
    H=W 
    F=L 
for i in range(1,1001):
    if H>2*m:
        K=K+1
        m=m*2
        H=H/2
    else:
        T=K 
for i in range(1,1001):
    if F>2*m:
        K=K+1
        m=m*2
        F=F/2
    else:
        T=K 
print(T)


P.S. Я решал бы эту задачу по-другому.
Мое решение:
L, W = map(int, input().split())
h=1
k=0
while L>=2*h or W>=2*h:
    if L>=W:
        L=L/2
        k+=1
    else:
        W=W/2
        k+=1
    h=2*h
print(k)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы