Упражнения

Входные данные для всех задач записаны в файле input.txt, результат работы нужно вывести в файл output.txt.

A: Числа могут быть где угодно

Во входном файле записано два целых числа, которые могут быть разделены пробелами и концами строк. Выведите в выходной файл их сумму.

Указание. Считайте весь файл в строковую переменную при помощи метода read() и разбейте ее на части при помощи метода split().

Ввод Вывод
  2

 2
4

B: Обращение строки

Во входном файле записана одна текстовая строка, возможно, содержащая пробелы. Выведите эту строку в обратном порядке.

Строка во входном файле заканчивается символом конца строки '\n'.

Ввод Вывод
hello world
dlrow olleh

C: Построчное обращение

Выведите все строки данного файла в обратном порядке. Для этого считайте список всех строк при помощи метода readlines().

Последняя строка входного файла обязательно заканчивается символом '\n'.

Ввод Вывод
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Complex is better than complicated.
Simple is better than complex.
Explicit is better than implicit.
Beautiful is better than ugly.

D: Обращение всего файла

Выведите в обратном порядке содержимое всего файла полностью. Для этого считайте файл целиком при помощи метода read().

Ввод Вывод
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.

.detacilpmoc naht retteb si xelpmoC
.xelpmoc naht retteb si elpmiS
.ticilpmi naht retteb si ticilpxE .ylgu naht retteb si lufituaeB

E: Длинные строки

В выходной файл выведите все строки наибольшей длины из входного файла, не меняя их порядок.

В данной задаче удобно считать список строк входного файла целиком при помощи метода readlines().

Ввод Вывод
One
Twenty one
Two
Twenty two
Twenty one
Twenty two

F: Покер

Даны 5 целых чисел, каждое от 1 до 13. Выведите одну из следующих строк:

Ввод Вывод
1 3 9 3 2
One Pair
1 5 5 4 4
Two Pairs
1 5 2 4 3
Straight
10 11 12 13 1
Nothing

G: Сумма чисел в строкaх

Дан файл, каждая строка которого может содержать одно или несколько целых чисел, разделенных одним или несколькими пробелами.

Вычислите сумму чисел в каждой строке и выведите эту сумму (для каждой строки выводится сумма чисел в этой строке).

В данной задаче удобно считывать данные построчно.

Ввод Вывод
2 2
3 4

1 5
4
7
0
6

H: Сумма чисел в файле

В файле могут быть записаны десятичные цифры и все, что угодно. Числом назовем последовательность цифр, идущих подряд (т.е. число всегда неотрицательно).

Вычислите сумму всех чисел, записанных в файле. В данной задаче удобно считывать данные посимвольно.

Ввод Вывод
 123
aaa456
1x2y3 4 5 6
600

I: Статистика по файлу

Дан файл. Определите сколько в нем букв (латинского алфавита), слов (последовательность букв латинского алфавита), строк. Выведите три найденных числа в формате, приведенном в примере.

Для экономии памяти читайте файл посимвольно, то есть не сохраняя целиком в памяти файл или отдельные его строки.

Ввод Вывод
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Input file contains:
108 letters
20 words
4 lines

J: Шифр Цезаря - 2

Зашифруйте данный текстовый файл шифром Цезаря, при этом символы первой строки файла должны циклически сдвигаться на 1, второй строки — на 2, третьей строки — на три и т.д. При этом заглавный буквы остаются заглавными, строчные — строчными, остальные символы не меняются.

В этой задаче удобно считывать файл построчно, шифруя каждую строку в отдельности.

Ввод Вывод
Hello
Hello!
Hello!!
Hello!!!
Ifmmp
Jgnnq!
Khoor!!
Lipps!!!

K: Быки и коровы

В игре «Быки и коровы» один игрок загадывает четырехзначное число, состоящее из различных цифр, а другой игрок угадывает это число, называя также четырехзначные числа с различными цифрами. Загадавший число на каждое из названных чисел сообщает, сколько в нем «быков» (т. е. цифр, которые не только присутствуют и в задуманном, и в названном числе, но даже стоят на одних и тех же местах) и «коров» (цифр, которые присутствуют в обоих числах, но стоят на разных местах).

Дана запись партии (последовательность тестовых чисел и ответов на них), но задуманное число неизвестно. Определите задуманное число.

Во входном файле содержится несколько строк, в каждой строке записано по три числа. Первое – названное четырехзначное число (оно не начинается с нуля), второе – количество «быков», третье – количество «коров».

Требуется вывести одно задуманное четырёхзначное число. Это число не начинается с 0.

Гарантируется, что ответ в задаче существует и является единственным.

Ввод Вывод
1234 0 0
5678 2 2
6578 0 4
5678

L: Домино

Проводя генеральную уборку на дачном чердаке, Саша нашел в комоде кучу доминошек из разных наборов. Каждая доминошка представляет собой прямоугольник, разделенный на две половинки. На каждой из половинок нарисовано от 0 до 6 точек. Ориентации доминошки не имеют — их можно как угодно поворачивать.

В совсем раннем детстве Саша видел, как играют в домино: суть игры заключается в том, что надо брать доминошку и как можно громче колотить ею об стол, крича при этом «рыба!». Услышав доносящийся с чердака грохот, наверх поднялся Сашин дедушка. Он смог объяснить Саше настоящие правила игры в домино: игроки составляют длинную цепочку, в которой соседние доминошки касаются половинками с одинаковым числом точек.

Саше решил называть «дружными доминошками» пару доминошек, которые можно поставить в игре рядом (т.е. доминошки в паре соприкасаются половинками с равными числами) в том или ином порядке. Играть в домино ему не с кем, поэтому Саша развлекается тем, что всевозможными способами составляет пары и считает количество «дружных доминошек».

По заданному набору доминошек определите, сколько пар «дружных доминошек» можно составить из него. Пары, отличающиеся хотя бы одной доминошкой, считаются различными. По-разному составленная пара из одних и тех же доминошек считается один раз.

В первой строке входного файла содержится натуральное число \(N\) — количество доминошек (\(1 \le N ≤ 100000\)).

В каждой из последующих строк содержится описание доминошки: два целых числа \(X\) и \(Y\) (\(0 \le X, Y \le 6\)) — количество точек на каждой из половинок доминошки.

Выведите одно число — количество пар «дружных доминошек».

Ввод Вывод
2
1 2
2 1
1
5
1 2
2 3
3 1
4 3
4 3
8

Примечание. Во втором тесте дружными являются следующие пары: 1-2 2-3, 1-2 3-1, 2-3 3-1, 2-3 4-3, 2-3 4-3, 3-1 4-3, 3-1 4-3, 4-3 4-3

M: Школа танцев

В школу бальных танцев профессора Падеграса записались \(n\) учеников — мальчиков и девочек. Профессор построил их в один ряд, и хочет отобрать из них для первого занятия группу стоящих подряд учеников, в которой количество мальчиков и девочек одинаково. Сколько вариантов выбора есть у профессора?

В первой строке задано число \(n\) (\(1 \le n \le 10^6\)). Во второй строке задается описание построенного ряда из мальчиков и девочек — строка из \(n\) символов a и b (символ a соответствует девочке, а символ b — мальчику).

В единственной строке должно содержаться единственное число — количество вариантов выбора требуемой группы.

Ввод Вывод
3
bab
2
8
abbababa
13

N: Банковские карты

Банк переходит на новый вид банковских карт. Для этого производятся одинаковые заготовки, на которых есть специальное место для идентификации клиента. Изначально на этом месте записывается кодовое число X. В банке с помощью специального прибора можно стирать некоторые цифры числа X. Оставшиеся цифры, будучи записанными подряд, должны образовывать номер счета клиента. Например, при X = 12013456789 номера счетов 5, 12, 17 или 12013456789 получить можно, а номера 22 или 71 получить нельзя.

Способ распределения номеров счетов в банке очень прост. Счетам присваиваются последовательно номера 1, 2, … Очевидно, что при таком способе в какой-то момент впервые найдется номер счета N, который нельзя будет получить из цифр X указанным выше способом. Руководство банка хочет знать значение N.

Напишите программу, которая находила бы N по заданному X.

Вводится натуральное число \(X\) без ведущих нулей (\(1 \le X < 10^{1000}\)).

Выведите искомое \(N\) без ведущих нулей.

Ввод Вывод
179
2
12013456789
22

O: Драгоценные камни

В одной далекой восточной стране до сих пор по пустыням ходят караваны верблюдов, с помощью которых купцы перевозят пряности, драгоценности и дорогие ткани. Разумеется, основная цель купцов состоит в том, чтобы подороже продать имеющийся у них товар. Недавно один из караванов прибыл во дворец одного могущественного шаха.

Купцы хотят продать шаху \(n\) драгоценных камней, которые они привезли с собой. Для этого они выкладывают их перед шахом в ряд, после чего шах оценивает эти камни и принимает решение о том, купит он их или нет. Видов драгоценных камней на Востоке известно не очень много всего 26, поэтому мы будем обозначать виды камней с помощью строчных букв латинского алфавита. Шах обычно оценивает камни следующим образом. Он заранее определил несколько упорядоченных пар типов камней: \((a_1, b_1)\), \((a_2, b_2)\), ..., \((a_k, b_k\)). Эти пары он называет красивыми, их множество мы обозначим как \(P\). Теперь представим ряд камней, которые продают купцы, в виде строки \(S\) длины \(n\) из строчных букв латинского алфавита. Шах считает число таких пар \((i, j)\), что \(1 \le i \lt j \le n\), а камни \(S_i\) и \(S_j\) образуют красивую пару, то есть существует такое число \(1 \le q \le k\), что \(S_i = a_q\) и \(S_j = b_q\).

Если число таких пар оказывается достаточно большим, то шах покупает все камни. Однако в этот раз купцы привезли настолько много камней, что шах не может посчитать это число. Поэтому он вызвал своего визиря и поручил ему этот подсчет. Напишите программу, которая находит ответ на эту задачу.

Первая строка входного файла содержит целые числа \(n\) и \(k\) (\(1 \le n \le 100000\), \(1 \le k \le 676\)) число камней, которые привезли купцы и число пар, которые шах считает красивыми. Вторая строка входного файла содержит строку \(S\), описывающую типы камней, которые привезли купцы.

Далее следуют \(k\) строк, каждая из которых содержит две строчных буквы латинского алфавита и описывает одну из красивых пар камней.

В выходной файл выведите ответ на задачу — количество пар, которое должен найти визирь.

Ввод Вывод
7 1
abacaba
aa
6
7 3
abacaba
ab
ac
bb
7