printРабочее место участника

printЗадачи

1728. Питон

Ограничения: время – 2s/4s, память – 64MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

Витя изучает новый язык программирования Питон. Пока он только успел изучить арифметические операции и условную инструкцию if, но он уже полюбил этот язык за красоту и лаконичность синтаксиса.
Отличительной особенностью языка Питон является то, что блоки после инструкций if и else (а также в циклах for и while, но Витя еще не успел изучить циклы) выделяются не ключевыми словами (например, в языке Паскаль используются слова begin и end) и не скобками (например, в языке C используются фигурные скобки), а величиной отступа от начала строки, то есть количеством пробелов, которые идут в начале строки. Например, в такой программе:
if a < 0:
    print("Число a - отрицательное")
    a = -a
print("Теперь a - положительное")
если условие "a < 0" будет истинно, то выполнятся две следующие строки print("Число a - отрицательное") и a = -a, а вот следующая строка print("Теперь a - положительное") уже находится вне блока условной инструкции if и будет выполнена после этой условной инструкции независимо от истинности проверенного условия.
Более формально правила расстановки пробелов в программе такие. Первая строка программы, а также все инструкции в программе, если они не находятся внутри блоков условных инструкций, не содержат отступа, то есть пробелов в начале строки. Если в программе встречается условная инструкция if, то блок после этой инструкции пишется с отступом. Величина отступа может быть произвольной (1, 2, 3 и более пробелов), но для всех инструкций внутри блока отступ должен быть одинаковым. Если после инструкции if идет инструкция else, то она должна иметь такой же отступ, что и соответствующая ей инструкция if, после инструкции else идет блок из одной и более инструкций с дополнительным отступом. При этом отступ у блока if и блока соответствующего ему else может быть различным (смотрите примеры верных программ ниже), но внутри одного блока отступ должен быть одинаковым.
Каждой инструкции if может соответствовать не более одной инструкции else. Не допускаются инструкции else, перед которыми нет инструкции if. После каждой инструкции if и else обязательно следует хотя бы одна инструкция с отступом.
Также допускаются вложенные условные инструкции, у блоков вложенных условных инструкций отступ должен быть большим, чем у объемлющей инструкции, но при этом может быть произвольным.
Правильно (разрешается разный отступ в блоках if и else):
if x > 0:
    print("x > 0")
    print(x)
else:
  print("x < 0")
  print(-x)
print("Bye")
Правильно (вложенные условные инструкции):
if a > b:
  if a > c:
        print(a)
  else:
      print(c)
else:
      if b > c:
        print(b)
      else:
        print(c)
Неправильно (разный отступ в одном блоке):
if x > 0:
        print(x)
    print("x > 0")
Неправильно (нет блока с отступом после инструкции if):
if x > 0:
else:
    print(x)
Витя хочет написать компилятор языка Питон, и для начала он решил реализовать анализатор корректности расстановки отступов в условных инструкциях. Помогите ему в решении этой задачи.
Во входном файле записан некоторый текст, содержащий не более 100 строк. Длина каждой строки не превосходит 100 символов. Каждая строка состоит из символов, ASCII-коды которых не менее 32 и не более 126.
Строка считается инструкцией if, если первыми непробельными символами строки является слово if, после которого идет пробел, а затем – любое число любых символов. Строка считается инструкцией else, если она содержит только одно слово else: (с двоеточием после него) и, возможно, отступ в начале строки.
Любая строка содержит хотя бы один непробельный символ. Последняя строка программы обязательно содержит ровно одно слово exit() без пробелов, завершающееся символом конца строки.
Если отступы в этой программе расставлены правильно, то программа должна вывести одно число 0. Если отступы расставлены неправильно, то нужно вывести минимальный номер строки, в которой нарушаются правила расстановки отступов.

Пример ввода 1

a, b, c = map(int, input().split())
if a > b:
    if a > c:
        print(a)
    else:
        print(c)
else:
  if b > c:
    print(b)
  else:
        print(c)
exit()

Пример вывода 1

0

Пример ввода 2

x = int(input())
if x < 0:
  print("Negative")
    x = -x
else:
    print("Positive")
exit()

Пример вывода 2

4
Источник: Московская олимпиада школьников по информатике, 2011/12 учебный год
loading