Newer
Older
{"cells":[{"cell_type":"markdown","metadata":{},"source":["## **Азбука**\n","Знакомые нам воспитанники детского сада наконец-то начали учить буквы.<br>Воспитатель предложил ребятам назвать слова, которые начинаются с А, Б или В. Напишите программу, которая проверяет, что первая буква во всех словах — А, Б или В.\n","### **Формат ввода**\n","Вводится натуральное число $N$ — количество слов, названных детьми.<br>В каждой из последующих $N$ строк записано по одному слову строчными буквам.\n","### **Формат вывода**\n","YES — если все слова начинаются с нужной буквы.<br>NO — если хотя бы одно слово начинается не с нужной буквы.\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|3<br>арбуз<br>барабан<br>ворона|YES<br> <br> <br> <br>|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|4<br>аист<br>вареник<br>кузнечик<br>алыча|NO<br> <br> <br> <br> <br>|"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["f = True\n","for i in range(int(input())):\n"," s = input().lower()[0]\n"," for sym in \"абв\":\n"," if sym == s:\n"," f = True\n"," break\n"," else:\n"," f = False\n"," if not f:\n"," break\n","\n","if f:\n"," print(\"YES\")\n","else:\n"," print(\"NO\")"]},{"cell_type":"markdown","metadata":{},"source":["## **Кручу-верчу**\n","Очень часто в текстовых редакторах требуется траспонировать (повернуть) текст.<br>К сожалению, в Python такая функция по-умолчанию отсутствует. Давайте создадим программу, которая преобразует введённую стоку из горизонтальной записи в вертикальную.\n","### **Формат ввода**\n","Одна строка.\n","### **Формат вывода**\n","Вертикальное представление введённой строки.\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|Привет<br> <br> <br> <br> <br> <br>|П<br>р<br>и<br>в<br>е<br>т<br>|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|Питон<br> <br> <br> <br> <br>|П<br>и<br>т<br>о<br>н<br>|"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["s = input()\n","for i in s:\n"," print(i)"]},{"cell_type":"markdown","metadata":{},"source":["## **Анонс новости**\n","Местная новостная компания заказала сайт. Его неотъемлемая часть — новостная лента.<br>Чтобы пользователи могли быстрее анализировать статьи, нужно сократить заголовки. Напишите программу, которая сокращает длинные заголовки до требуемой длины и завершает их многоточием ... при необходимости.\n","### **Формат ввода**\n","Вводится натуральное число $L$ — необходимая длина заголовка.<br>Вводится натуральное число $N$ — количество заголовков, которые требуется сократить.<br>В каждой из последующих $N$ строк записано по одному заголовку.\n","### **Формат вывода**\n","Сокращённые заголовки.\n","### **Примечание**\n","Многоточие учитывается при подсчёте длины заголовка.\n","### **Пример**\n","|Ввод |Вывод|\n","|-----|-----|\n","|25<br>3<br>Начался саммит по глобальному потеплению<br>Завтра Новый год!<br>Python и Java конкурируют за звание самого популярного языка программирования|Начался саммит по глоб...<br>Завтра Новый год!<br>Python и Java конкурир...<br> <br> <br>|"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["length, n = int(input()), int(input())\n","\n","arr = []\n","\n","for _ in range(n):\n"," arr.append(input())\n","\n","for s in arr:\n"," if len(s) > length:\n"," print(f\"{s[:(length - 3)]}...\")\n"," else:\n"," print(s)"]},{"cell_type":"markdown","metadata":{},"source":["## **Очистка данных**\n","Местный провайдер собирает большое количество логов, однако зачастую файлы с отчётами приходят в негодность.<br>Самые частые проблемы — ошибки вида ## и @@@.<br>Напишите программу, которая избавляется от:<br>\n","* Двух символов # в начале информационных сообщений;\n","* Строк, заканчивающихся тремя символами @.\n","\n","\n","### **Формат ввода**\n","Вводятся строки отчёта. Признаком завершения ввода считается пустая строка.\n","### **Формат вывода**\n","Очищенные данные.\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|Hello, world<br>Hello, @@@<br>##Goodbye<br>|Hello, world<br>Goodbye<br> <br>|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|First Message<br>##Second Message<br>@@@Third Message##<br>##Fourth Message@@@<br>|First Message<br>Second Message<br>@@@Third Message##<br> <br>|"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["arr = []\n","s = input()\n","while s:\n"," arr.append(s)\n"," s = input()\n","\n","for s in arr:\n"," if s[-3:] == \"@@@\":\n"," continue\n"," elif s[:2] == \"##\":\n"," print(s[2:])\n"," else:\n"," print(s)"]},{"cell_type":"markdown","metadata":{},"source":["## **А роза упала на лапу Азора 4.0**\n","Вернёмся к палиндромам — числам, словам и предложениям, которые читаются одинаково в оба направления.<br>Напишите программу, которая определяет, относится ли введённая строка к палиндромам.\n","### **Формат ввода**\n","Вводится строка.\n","### **Формат вывода**\n","Требуется вывести YES — если введенная строка является палиндромом, иначе – NO.\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|мама|NO|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|анна|YES|\n"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["s = input()\n","if s == s[::-1]:\n"," print(\"YES\")\n","else:\n"," print(\"NO\")"]},{"cell_type":"markdown","metadata":{},"source":["## **Зайка — 6**\n","Очередное путешествие родителей с детьми, очередная игра с поиском зверушек за окном.<br>Давайте поиграем и найдём заек.\n","### **Формат ввода**\n","В первой строке записано натуральное число $N$ — количество выделенных придорожных местностей.<br>В каждой из $N$ последующих строк записано описание придорожной местности.\n","### **Формат вывода**\n","Количество заек.\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|3<br>березка елочка зайка волк березка<br>сосна зайка сосна елочка зайка медведь<br>сосна сосна сосна белочка сосна белочка|3<br> <br> <br> <br>|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|4<br>зайка березка<br>березка зайка<br>березка елочка березка<br>елочка елочка елочка|2<br> <br> <br> <br> <br>|"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["arr = []\n","for _ in range(int(input())):\n"," arr += input().split()\n","\n","c = 0\n","for s in arr:\n"," if s == \"зайка\":\n"," c += 1\n","\n","print(c) "]},{"cell_type":"markdown","metadata":{},"source":["## **А и Б сидели на трубе**\n","Сложение чисел весьма простая задача.<br>К сожалению, пользователи не всегда вводят данные так, как нам удобно.\n","### **Формат ввода**\n","Два целых числа, разделённые пробелом.\n","### **Формат вывода**\n","Одно целое число — сумма переданных чисел.\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|2 2|4|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|-3 5|2|"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["a, b = [int(i) for i in input().split()]\n","print(a + b)"]},{"cell_type":"markdown","metadata":{},"source":["## **Зайка — 7**\n","Вновь поищем заек за окном поезда.\n","### **Формат ввода**\n","В первой строке записано натуральное число $N$ — количество выделенных придорожных местностей.<br>В каждой из $N$ последующих строк записано описание придорожной местности.\n","### **Формат вывода**\n","Для каждой строки нужно найти положение первого зайки.<br>Если в строке нет заек, то об этом нужно непременно сообщить.\n","### **Примечание**\n","Для символов в строках используйте нумерацию с 1.\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|3<br>березка елочка зайка волк березка<br>сосна зайка сосна елочка зайка медведь<br>сосна сосна сосна белочка сосна белочка<br>|16<br>7<br>Заек нет =(<br> <br>|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|4<br>зайка березка<br>березка зайка<br>березка елочка березка<br>елочка елочка елочка<br>|1<br>9<br>Заек нет =(<br>Заек нет =(<br> <br>|"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["arr = []\n","for _ in range(int(input())):\n"," arr.append(input())\n","\n","c = 0\n","for elem in arr:\n"," pos = 0\n"," for i in range(len(elem) - 4):\n"," if elem[i: i + 5] == \"зайка\":\n"," pos = i + 1\n"," break\n"," if pos:\n"," print(pos)\n"," else:\n"," print(\"Заек нет =(\")"]},{"cell_type":"markdown","metadata":{},"source":["## **Без комментариев**\n","Мы надеемся, вы пишите комментарии к своему коду. Если так, то интерпретатор удаляет их перед тем, как выполнить код. Напишите программу, которая выполняет данную функцию за интерпретатор.\n","### **Формат ввода**\n","Вводятся строки программы.<br>Признаком остановки является пустая строка.\n","### **Формат вывода**\n","Каждую строку нужно очистить от комментариев.<br>А если комментарий — вся строка, то выводить её не надо.\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|# Моя первая супер-пупер программа<br>print(\"What is your name?\") # Как тебя зовут?<br>name = input() # Сохраняем имя<br>print(f\"Hello, {name}!\") # Здороваемся# Конец моей супер-пупер программы<br>|print(\"What is your name?\")<br>name = input()<br>print(f\"Hello, {name}!\")<br> <br>|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|# Мой первый цикл<br>for i in range(10): # Считаем до 10<br> print(i) # выводим число<br>|for i in range(10):<br> print(i)<br> <br>|"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["s = input()\n","arr = []\n","while s:\n"," arr.append(s)\n"," s = input()\n","\n","for s in arr:\n"," res = \"\"\n"," for i in range(len(s)):\n"," res = s\n"," if s[i] == \"#\":\n"," res = s[:i]\n"," break\n"," if res:\n"," print(res)"]},{"cell_type":"markdown","metadata":{},"source":["## **Частотный анализ на минималках**\n","Частотный анализ — подсчёт, какие символы чаще всего встречаются в тексте. Это важнейший инструмент взлома многих классических шифров — от шифра Цезаря и до шифровальной машины «Энигма». Выполним простой частотный анализ: выясним, какой символ встречается в тексте чаще всего.\n","### **Формат ввода**\n","Вводятся строки, пока не будет введена строка «ФИНИШ».\n","### **Формат вывода**\n","Выводится один символ в нижнем регистре — наиболее часто встречающийся.<br><br>Примечания<br>Пробелы в анализе не участвуют.<br>Если в результате анализа получено несколько ответов, следует вывести первый по алфавиту.\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|Баобаб<br>Белка<br>Бобы<br>ФИНИШ|б<br> <br> <br> <br>|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|Финики Фокачча Зайка<br>Филин Фосфор Светофор<br>Фехтовальщик Форма<br>ФИНИШ|ф<br> <br> <br> <br>|\n"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["string = \"\"\n","s = input()\n","while s != \"ФИНИШ\":\n"," string += s\n"," s = input()\n","\n","string = string.lower().replace(\" \", \"\")\n","\n","d = {}\n","\n","for i in string:\n"," if i in d:\n"," d[i] += 1\n"," else:\n"," d[i] = 1\n","\n","maxl, s = 0, \"я\"\n","for i in d.keys():\n"," if d[i] > maxl:\n"," maxl = d[i] \n"," s = i\n"," elif d[i] == maxl:\n"," if ord(i) < ord(s):\n"," s = i\n","\n","print(s)"]},{"cell_type":"markdown","metadata":{},"source":["## **Найдётся всё**\n","Поиск информации — одна из основных нужд в современном мире.<br>Создайте программу, которая реализует маленький компонент поисковой системы.\n","### **Формат ввода**\n","Вводится натуральное число $N$ — количество страниц, среди которых требуется произвести поиск.<br>В каждой из последующих $N$ строк записаны заголовки страниц.<br>В последней строке записан поисковый запрос.\n","### **Формат вывода**\n","Вывести все заголовки страниц, в которых присутствует поисковый запрос (регистр не имеет значения).<br>Порядок заголовков должен сохраниться.\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|3<br>Яндекс выпустил задачник по программированию<br>На соревнованиях по программированию победил любитель питона<br>Как заказать Яндекс.Такси?!<br>яндекс<br>|Яндекс выпустил задачник по программированию<br>Как заказать Яндекс.Такси?!<br> <br> <br> <br>|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|8<br>сериал шерлок смотреть онлайн<br>учебник питона<br>мемы<br>социальная сеть<br>упражнения по питону<br>кормовые мыши для питонов<br>ответы егэ скачать бесплатно<br>компьютерные мыши<br>питон<br>|учебник питона<br>упражнения по питону<br>кормовые мыши для питонов<br> <br> <br> <br> <br> <br> <br> <br>|"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["arr = [input() for _ in range(int(input()))]\n","\n","research = input()\n","\n","for s in arr:\n"," if research.lower() in s.lower():\n"," print(s)"]},{"cell_type":"markdown","metadata":{},"source":["## **Меню питания**\n","В детском саду ежедневно подают новую кашу на завтрак.<br>Каши чередуются в следующем порядке:<br>\n","* Манная;\n","* Гречневая;\n","* Пшённая;\n","* Овсяная;\n","* Рисовая.\n","\n","Напишите программу, которая строит расписание каш на ближайшие дни.\n","### **Формат ввода**\n","Вводится натуральное число $N$ — количество дней.\n","### **Формат вывода**\n","Вывести список каш в порядке подачи.\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|3<br> <br> <br>|Манная<br>Гречневая<br>Пшённая<br>|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|12<br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br>|Манная<br>Гречневая<br>Пшённая<br>Овсяная<br>Рисовая<br>Манная<br>Гречневая<br>Пшённая<br>Овсяная<br>Рисовая<br>Манная<br>Гречневая<br>|"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["arr = [\"Манная\", \"Гречневая\", \"Пшённая\", \"Овсяная\", \"Рисовая\"]\n","\n","n = int(input())\n","for i in range(n):\n"," print(arr[i % 5])"]},{"cell_type":"markdown","metadata":{},"source":["## **Массовое возведение в степень**\n","Часто возникают трудности, когда нужно выполнить множество однообразных операций. В таких случаях люди желают упростить себе работу. Напишите программу, которая возводит в заданную степень все числа, что передали пользователи.\n","### **Формат ввода**\n","Вводится натуральное число $N$ — количество чисел.<br>В каждой из последующих $N$ строк записано по одному числу.<br>В последней строке записано натуральное число $P$ — степень, в которую требуется возвести числа.\n","### **Формат вывода**\n","Последовательность чисел, являющихся ответом.\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|3<br>2<br>3<br>4<br>3<br>|8<br>27<br>64<br> <br> <br>|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|5<br>222222<br>22222<br>2222<br>222<br>22<br>2<br>|49382617284<br>493817284<br>4937284<br>49284<br>484<br> <br> <br>|"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["arr = [int(input()) for _ in range(int(input()))]\n","\n","p = int(input())\n","\n","for i in arr:\n"," print(i**p)"]},{"cell_type":"markdown","metadata":{},"source":["## **Массовое возведение в степень 2.0**\n","Продолжим упрощать себе работу, минуя множество одинаковых операций.<br>Создадим новую программу, которая возводит в заданную степень все числа, переданные пользователем.\n","### **Формат ввода**\n","В первой строке записана последовательность натуральных чисел, разделённых пробелами.<br>Во второй строке записано натуральное число $P$ — степень, в которую требуется возвести числа.\n","### **Формат вывода**\n","Последовательность чисел, являющихся ответом.<br>Числа вывести в одну строку через пробел.\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|2 3 4<br>3|8 27 64<br> <br>|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|222222 22222 2222 222 22<br>2|49382617284 493817284 4937284 49284 484<br> <br>|"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["arr = [int(i) for i in input().split()]\n","p = int(input())\n","for i in arr:\n"," print(i ** p, end=\" \")"]},{"cell_type":"markdown","metadata":{},"source":["## **НОД 3.0**\n","Местному НИИ в очередной раз нужно находить наибольший общий делитель (НОД) нескольких чисел.<br>Руководство института вернулось с этой задачей к нам.\n","### **Формат ввода**\n","В единственной строке записывается последовательность натуральных чисел, разделённых пробелами.\n","### **Формат вывода**\n","Требуется вывести одно натуральное число — НОД всех данных чисел.\n","### **Примечание**\n","Самый распространенный способ поиска НОД — Алгоритм Эвклида.\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|12 42|6|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|102 39 768|3|"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["arr = [int(i) for i in input().split()]\n","\n","nod = 0\n","for i in range(len(arr) - 1):\n"," a, b = arr[i], arr[i + 1]\n"," while a != b:\n"," if a > b:\n"," a -= b\n"," else:\n"," b -= a\n"," arr[i + 1] = a\n","\n","print(arr[-1])"]},{"cell_type":"markdown","metadata":{},"source":["## **Анонс новости 2.0**\n","Попробуем ещё раз сократить заголовки для статей в ленте новостного сайта. Давайте сделаем программу, которая сокращает длинный заголовок до требуемой длины и завершает его многоточием ..., если это требуется.\n","### **Формат ввода**\n","Вводится натуральное число $L$ — необходимая длина заголовка.<br>Вводится натуральное число $N$ — количество строк в заголовке новости.<br>В каждой из последующих $N$ строк записано по одной строке заголовка.\n","### **Формат вывода**\n","Сокращённый заголовок.\n","### **Примечание**\n","Многоточие учитывается при подсчёте длины заголовка.<br>Символ перевода строки при подсчёте длины не учитывается.\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|144<br>5<br>Энтузиаст написал программу для управления громкостью с помощью жестов, чтоб не вставать с дивана<br>Благодаря ей он может регулировать громкость,<br>показывая расстояние между большим и указательным пальцами.<br>Для этого ему понадобилась веб-камера, знания Python и<br>библиотека для работы с компьютерным зрением.|Энтузиаст написал программу для управления громкостью с помощью жестов, чтоб не вставать с дивана<br>Благодаря ей он может регулировать громкость...<br> <br> <br> <br> <br> <br>|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|121<br>5<br>Энтузиаст написал программу для управления громкостью с помощью жестов, чтоб не вставать с дивана<br>Благодаря ей он может регулировать громкость,<br>показывая расстояние между большим и указательным пальцами.<br>Для этого ему понадобилась веб-камера, знания Python и<br>библиотека для работы с компьютерным зрением.|Энтузиаст написал программу для управления громкостью с помощью жестов, чтоб не вставать с дивана<br>Благодаря ей он может...<br> <br> <br> <br> <br> <br>|"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["length = int(input()) - 3\n","\n","arr = [input() for _ in range(int(input()))]\n","\n","for elem in arr:\n"," if len(elem) < length:\n"," print(elem)\n"," length -= len(elem)\n"," elif len(elem) == length:\n"," print(f\"{elem}...\")\n"," break\n"," else:\n"," print(f\"{elem[:length]}...\")\n"," break"]},{"cell_type":"markdown","metadata":{},"source":["## **А роза упала на лапу Азора 5.0**\n","И снова напишем программу, которая определяет, палиндромом перед нами или нет.\n","### **Формат ввода**\n","Вводится строка.\n","### **Формат вывода**\n","Если введённая строка относится к палиндрому, то вывести YES, а иначе — NO.\n","### **Примечание**\n","При проверке не обращайте внимания на регистр и пробелы.\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|А роза упала на лапу Азора|YES|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|Мама мыла раму|NO|"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["s = input().lower().replace(\" \", \"\")\n","\n","if s == s[::-1]:\n"," print(\"YES\")\n","else:\n"," print(\"NO\")"]},{"cell_type":"markdown","metadata":{},"source":["## **RLE**\n","RLE означает “run-length encoding”. Это способ сокращённой записи последовательности чего угодно (в случае этой задачи — цифр). При нём для подряд идущей группы одинаковых цифр (run) записываются сама эта цифра и длина этой группы (run length). Таким образом, 99999 превратится в 9 5 («девять пять раз») и так далее. RLE широко используется в самых разных областях. Напишите программу, которая кодирует строку цифр в RLE.\n","### **Формат ввода**\n","Строка цифр длиной не меньше 1.\n","### **Формат вывода**\n","Пары: сама цифра и количество повторений цифры подряд во введённой строке, как описано в условии и показано в примере.\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|010000100001111111110111110000000000000011111111<br> <br> <br> <br> <br> <br> <br> <br> <br> <br>|0 1<br>1 1<br>0 4<br>1 1<br>0 4<br>1 9<br>0 1<br>1 5<br>0 14<br>1 8<br>|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|0110000000100001000<br> <br> <br> <br> <br> <br> <br>|0 1<br>1 2<br>0 7<br>1 1<br>0 4<br>1 1<br>0 3<br>|"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["s = input()\n","sym = s[0]\n","c = 1\n","for i in s[1:]:\n"," if sym == i:\n"," c += 1\n"," else:\n"," print(sym, c)\n"," sym = i\n"," c = 1\n","print(sym, c)"]},{"cell_type":"markdown","metadata":{},"source":["## **Польский калькулятор**\n","Напишите программу, которая производит вычисление выражения, записанного в обратной польской нотации (ОПН).<br><br>В ОПН нет ни скобок, ни приоритета операторов («умножение раньше сложения»).<br><br>Чтобы прочитать выражение, записанное в таком формате, нужно просматривать выражение строго последовательно. Вводимые значения последовательно добавляются в стек. Когда встречается символ операции, то из стека извлекаются последние положенные туда значения, с ними проделывается эта операция и результат возвращается в стек.<br><br>Если для операции важен порядок значений, с которыми она производится, то первым идёт число, лежавшее в стеке глубже. В частности, если операция — вычитание, то из предпоследнего числа в стеке вычитается последнее, а не наоборот.<br><br>Изначально стек пустой, в результате полного вычисления выражения в нём должно остаться одно значение — результат вычислений.<br><br>Первый пример следует читать так: в стек последовательно добавляются значения 7 2 3, а затем встречаем знак операции *. Тогда значения 2 и 3 извлекаются, перемножаются, результат 6 кладётся обратно в стек. Следующий знак извлекает из стека два оставшихся в нём значения 7 и 6, вычитает одно из другого и кладёт результат снова в стек. Выражение закончилось, в стеке одно число — 1, это и есть результат вычисления.\n","### **Формат ввода**\n","Вводится одна строка, содержащая разделённые пробелами целые числа и знаки операций +, -, *, которые вместе составляют корректное выражение в обратной польской нотации.\n","### **Формат вывода**\n","Выводится одно целое число — результат вычисления выражения.\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|7 2 3 * -|1|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|10 15 - 7 *|-35|"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["arr = input().split()\n","stek = []\n","for elem in arr:\n"," if elem in \"*-+\":\n"," res = eval(f\"{stek.pop(-2)} {elem} {stek.pop(-1)}\")\n"," stek.append(res) \n"," else:\n"," stek.append(int(elem))\n","\n","print(stek[0])"]},{"cell_type":"markdown","metadata":{},"source":["## **Польский калькулятор — 2**\n","Потренируемся в ОПН дальше. Операции, которые выполняются с одним значением, называются унарными, с двумя — бинарными, с тремя — тернарными. Давайте улучшим наш калькулятор, добавив поддержку следующих операций:<br>\n","\n","\n","* бинарные:<br>- (вычитание),<br>* (умножение),<br>/ (деление нацело; для отрицательных чисел работает по тем же правилам, что и в Python);\n","\n","* унарные:<br>! (факториал),<br># (клонирование — вернуть в стек значение дважды);\n","\n","* тернарные:<br>@ (возвращает в стек те же три значения, но в ином порядке: второе, третье, первое).\n","### **Формат ввода**\n","Вводится одна строка, содержащая разделённые пробелами целые числа и знаки операций. Вместе они составляют корректное выражение в обратной польской нотации, не содержащее деления на ноль и взятия факториала от отрицательного числа.\n","### **Формат вывода**\n","Выводится одно целое число — результат вычисления выражения.\n","### **Примечание**\n","В первом примере стек по мере прочтения строки выглядит так:\n","* 7 1\n","* 7 1 10\n","* 7 1 10 100\n","* 7 1 10 100 100\n","* 7 1 10 10000\n","* 7 10 10000 1\n","* 7 10 9999\n","* 7 10009\n","* 10016\n","* -10016\n","### **Пример 1**\n","|Ввод |Вывод|\n","|-----|-----|\n","|7 1 10 100 # * @ - + + ~|-10016|\n","### **Пример 2**\n","|Ввод |Вывод|\n","|-----|-----|\n","|10 15 - 7 *|-35|"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["arr = input().split()\n","stek = []\n","for elem in arr:\n"," if elem in \"*-+\":\n"," res = eval(f\"{stek.pop(-2)} {elem} {stek.pop(-1)}\")\n"," stek.append(res)\n"," \n"," elif elem == \"/\":\n"," res = eval(f\"{stek.pop(-2)} // {stek.pop(-1)}\")\n"," stek.append(res)\n"," \n"," elif elem == \"~\":\n"," res = stek.pop(-1) * (-1)\n"," stek.append(res)\n"," \n"," elif elem == \"#\":\n"," stek.append(stek[-1])\n"," \n"," elif elem == \"!\":\n"," res = stek.pop(-1)\n"," prod = 1\n"," while res:\n"," prod *= res\n"," res -= 1\n"," stek.append(prod)\n"," \n"," elif elem == \"@\":\n"," a, b, c = stek.pop(-3), stek.pop(-2), stek.pop(-1)\n"," stek += [b, c, a] \n"," \n"," else:\n"," stek.append(int(elem))\n","\n","print(stek[0])"]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.11.1"}},"nbformat":4,"nbformat_minor":2}