Загрузка данных



Задача 1. «Дышащий зигзаг»
Выведите на экран узор из n строк (n вводится с клавиатуры, 3 ≤ n ≤ 15). Пример для n = 5:
plain

*
***
*****
*******
*********
*******
*****
***
*

Но! В каждой чётной строке вместо * используется символ #. Пример для n = 4:
plain

*
###
*****
#######
*****
###
*

Условия:

    Запрещено использовать умножение строк ("*" * k) — только циклы посимвольно.
    Запрещено строить список строк и потом переворачивать его — паттерн должен печататься «на лету», управляя счётчиком ширины через один цикл с флагом направления.


Задача 2. «Числа-муравьи»
Назовём число «муравьиным», если при многократном повторении операции «возвести каждую цифру в квадрат и сложить» последовательность никогда не приходит к 1 и не входит в цикл длиной больше 4 (т.е. либо приходит к 1, либо зацикливается на цикле длины ≤ 4).
Найдите и выведите все «муравьиные» числа от 1 до 10000, а также их количество.
Подвох: если детектировать цикл через «повторилось число — стоп», задача решается неправильно: цикл длины 4 пройдёт мимо. Нужно хранить последовательность и проверять циклы любой длины. Для цикла внутри цикла — без множеств (set), только списки и ручной поиск.


Задача 3. «Шахматный штурм»

На шахматной доске 8×8 ферзь стоит на клетке (x, y) — координаты вводятся (от 1 до 8). Вводится также число k (1 ≤ k ≤ 20). Ферзь делает ровно k ходов по спирали: 1 клетку вправо, 1 вверх, 2 влево, 2 вниз, 3 вправо, 3 вверх, 4 влево… Если очередной ход вывел бы ферзя за доску — он отменяется целиком (ферзь остаётся на месте), но длина следующего хода всё равно увеличивается по спиральному правилу.
Выведите конечную позицию ферзя и количество успешных ходов.

Условия: никаких if direction == ... с четырьмя копиями кода — направление должно выбираться через список смещений и индекс по модулю 4. Вложенный цикл: внешний по шагам спирали, внутренний по клеткам хода (с проверкой границ перед движением).

Задача 4. «Упрямая последовательность»
Задаётся рекуррентность:
plain

a₀ = вводится пользователем (вещественное, 0 < a₀ < 10)
aₙ₊₁ = cos(aₙ) + (aₙ mod 1.5)

(«mod» — остаток от деления на 1.5.)
Найдите минимальное n, при котором |aₙ₊₁ − aₙ| < 10⁻⁶, но не более 100000 итераций. Если сошлось — выведите n и значение. Если нет — выведите «расходится» и значение |aₙ₊₁ − aₙ| на последней итерации.
Подвохи:

    Запрещён while True с break в середине — только цикл с составным условием.
    Наивная проверка «разница меньше эпсилон» ложно срабатывает на первых итерациях для некоторых a₀ (например, a₀ = 0.9). Нужно начинать проверку с n ≥ 2. Студент должен сам это обнаружить тестированием.
    Выведите также таблицу первых 5 итераций для самопроверки.


Задача 5. «Цифровой бургер» (босс-уровень)
Назовём натуральное число «бургером» порядка p, если:

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

Найдите все «бургеры» от 10 до 1 000 000, для каждого p от 2 до 6. Выведите таблицу: p → список чисел.
Условия:

    Общий перебор должен занимать разумное время — требуется оптимизация: сначала проверять дешёвое условие (произведение цифр), и только если оно прошло — считать сумму степеней. Прямой перебор с суммой степеней для всех чисел и всех p должен у студента ощутимо тормозить — пусть замерит время обоих вариантов и сравнит.
    Никаких строк для разбора цифр — только деление и остаток (//, %).