Задача 1. «Фамилия, имя, отчество»

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

Пример

Ввод Вывод
  Агафонов   Федор  Иванович  
Ф. И. Агафонов
Крокодил Гена
ERROR

Задача 2. «Степени двойки»

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

Пример

Ввод Вывод
3 2
32 16
8 4
2 1

Задача 3. «Ферзи»

Известно, что на доске 8×8 можно расставить 8 ферзей так, чтобы они не били друг друга. Вам дана расстановка 8 ферзей на доске, определите, есть ли среди них пара бьющих друг друга.

Программа получает на вход восемь пар чисел, каждое число от 1 до 8 — координаты 8 ферзей. Если ферзи не бьют друг друга, выведите слово NO, иначе выведите YES.

Задача 4. «Флаги»

Сделайте упражнение I (флаги) отсюда Флаги следующим способом:

Задача 5. «Рациональные числа: Хитрая последовательность»

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

Пользуясь этими функциями, вычислите первые N членов последовательности точно и выведите их с небольшой погрешностью, деля числитель на знаменатель.
Последовательность задана рекуррентно:

  • a1 = 4
  • a2 = 4.25
  • an = 108 − (815 − 1500 / an−2) / an−1

    Сравните результат и время работы с обычными вычислениями во float — как минимум, для N, равному 5, 10, 15, 25, 30.

    Задача 6. «Несократимая дробь»

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

    Всё, кроме ввода-вывода, оформите в виде функций.

    Пример

    Ввод Вывод
    -5 6
    7 21
    -1 2

    Задача 7. «Ходы коня и ходы ферзя»

    На шахматной доске стоит конь или ферзь. Отметьте положение фигуры на доске и все клетки, которые бьёт фигура. Клетку, где стоит конь или ферзь, отметьте буквой “K” или “Q” соответственно, клетки, которые бьёт фигура, отметьте символами “*”, остальные клетки заполните точками.

    Программа получает на вход координаты фигуры на шахматной доске в шахматной нотации, то есть в виде “Ke4” или “Qb6”, где сначала идёт латинская буква, задающая фигуру, затем — номер столбца (буква от “a” до “h”, слева направо), затем — номер строки (цифра от 1 до 8, снизу вверх).

    Выведите количество клеток, которое бьёт фигура, и изображение доски. Изображение для красоты можно “разбавить” пробелами.

    Преобразование входного положения в координаты, если оно есть, должно быть в виде функции, запись звёздочки в клетку — тоже, причём в этой же функции должна быть проверка, принадлежит ли клетка шахматной доске (желательно, чтобы эта функция показывала своим возвращаемым значением — True или False, — была ли проставлена звёздочка).
    Генерация клеток-кандидатов для каждой возможной фигуры и подсчёт окончательного их количества тоже должны выполняться в функции (по одной на фигуру).

    Примеры

    Ввод Вывод
    Ke4
    8
    . . . . . . . . 
    . . . . . . . . 
    . . . * . * . . 
    . . * . . . * . 
    . . . . K . . . 
    . . * . . . * . 
    . . . * . * . . 
    . . . . . . . . 
    Qb6
    23
    . * . * . . . . 
    * * * . . . . . 
    * Q * * * * * * 
    * * * . . . . . 
    . * . * . . . . 
    . * . . * . . . 
    . * . . . * . . 
    . * . . . . * . 

    Задача 8. «Заполнение диагоналями»

    Даны натуральные N и M. Заполните двумерный массив размером N×M числами от 1 до N×M диагоналями, как показано на примере. Выведите полученный массив, отводя на вывод каждого элемента наименьшее возможное, одинаковое для всех элементов число символов.

    Пример

    Ввод Вывод
    3 3
     1 2 4
    3 5 7
    6 8 9
    3 5
      1  2  4  7 10
    3 5 8 11 13
    6 9 12 14 15

    Задача 9. «Заполнение по спирали»

    Дано целое N > 0. Заполните двумерный массив размером N×N числами от 1 до N×N по спирали, как показано в примерах. Выведите полученный массив, отводя на вывод каждого элемента ровно 4 символа.

    Примеры

    Ввод Вывод
    3
       1   2   3
    8 9 4
    7 6 5
    4
       1   2   3   4
    12 13 14 5
    11 16 15 6
    10 9 8 7

    Задача 10. «Распаковка строчки»

    Будем рассматривать только строчки, состоящие из заглавных латинских букв. Например, рассмотрим строку AAAABCCCCCDDDD. Длина этой строки равна 14. Поскольку строка состоит только из латинских букв, повторяющиеся символы могут быть удалены и заменены числами, определяющими количество повторений. Таким образом, данная строка может быть представлена как 4AB5C4D. Длина такой строки 7. Описанный метод мы назовем упаковкой строки.

    Напишите программу, которая берёт упакованную строчку и восстанавливает по ней исходную строку.

    Вводится одна строка. В строке могут встречаться только конструкции вида nA, где n — количество повторений символа (целое число от 2 до 99), а A — заглавная латинская буква, либо конструкции вида A, то есть символ без числа, определяющего количество повторений. Максимальная длина строки не превышает 80.

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

    Примеры

    Ввод Вывод
    3A4B7D
    AAABBBBDDDDDDD
    22D7AC18FGD
    DDDDDDDDDDDDDDDDDDDDDDAAAAAAACFFFFFFFFFF
    FFFFFFFFGD
    95AB
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAB
    40AB39A
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    Задача 11. «Шарики»

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

    Напишите программу, которая по данной ситуации определяет, сколько шариков будет “уничтожено”.
    Вариант а)
    Непрерывных цепочек из трёх или более одноцветных шаров в начальный момент может быть не больше одной.
    Вариант б)
    Начальная конфигурация — произвольная. В этом случае количество “уничтоженных” шариков может зависеть от порядка их “уничтожения”, поэтому примем для определённости, что каждый раз должна “уничтожаться” самая левая возможная группа шариков.

    Вводится количество шариков в цепочке и цвета шариков (от 0 до 9, каждому цвету соответствует своё целое число).

    Требуется вывести количество шариков, которое будет “уничтожено”.

    Примеры

    Ввод Вывод
    5
    1 3 3 3 2
    3
    9
    6 0 0 5 5 5 0 0 7
    7
    10
    1 1 9 9 9 1 8 8 8 1
    9
    Если в последнем примере для варианта б) мы бы сначала “уничтожили” цепочку 8 8 8, то ответ был бы 10.

    Задача 12. «Симметричная последовательность»

    Последовательность чисел назовем симметричной, если она одинаково читается как слева направо, так и справа налево. Например, следующие последовательности являются симметричными:

    1 2 3 4 5 4 3 2 1
    1 2 1 2 2 1 2 1

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

    В первой строке вводится число N — количество элементов исходной последовательности. Во второй строке через пробел идут N чисел — элементы этой последовательности, натуральные числа от 1 до 9.

    Выведите сначала число M — минимальное количество элементов, которое надо дописать к последовательности, а потом M чисел, которые надо дописать к последовательности.

    Примеры

    Ввод Вывод
    9
    1 2 3 4 5 4 3 2 1
    0
    5
    1 2 1 2 2
    3
    1 2 1
    5
    1 2 3 4 5
    4
    4 3 2 1