Строки

351 задача
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
📅
Шаг 4: Когда же экзамен?!
Средне
Расписание экзаменов прислали сразу три разных департамента. В одном пишут даты через точку (15.06.2025), в другом — через слеш (15/06/2025), в третьем — через дефис (15-06-2025). Конечно же, никто не согласовался. И конечно же, разбираться тебе. Приведи весь хаос к нормальному виду ГГГГ-ММ-ДД, как делают серьёзные айтишники.
Условие задачи
 

Извлеки все даты из текста и выведи их в формате ГГГГ-ММ-ДД (ISO 8601).

Формат входных дат: ровно 2 цифры дня, разделитель (., / или -), 2 цифры месяца, тот же или другой разделитель, 4 цифры года. Год от 2020 до 2026, день от 01 до 28, месяц от 01 до 12 (валидность гарантируется).

Входные данные

Одна строка текста.

Выходные данные

Все найденные даты в формате ГГГГ-ММ-ДД, по одной на строке.

Подсказка: Группы захвата: (\d{2})[./-](\d{2})[./-](\d{4}). Класс [./-] заменит сразу все три разделителя.
📄
Шаг 3: Бланки ЕГЭ
Просто
Сегодня в комиссию пришёл абитуриент Костя. Он принёс распечатку с десяти разных сайтов с результатами ЕГЭ, потому что «не понял, какому верить». Среди этой пачки бумаг нужно отыскать номера бланков ЕГЭ — и проверить, что они валидные. Костя нервничает. Костя смотрит на тебя. Костя верит.
Условие задачи
 

Номер бланка ЕГЭ имеет формат: ровно 4 цифры, дефис, ровно 7 цифр. Например, 0123-4567890.

Входные данные

Одна строка текста.

Выходные данные

Все найденные валидные номера бланков, по одному на строке.

Подсказка: Регулярка \b\d{4}-\d{7}\b. Границы \b важны — иначе номер 12345-67890123 тоже подойдёт частично, а это не наш случай.
📧
Шаг 2: Письма из ниоткуда
Просто
День второй. На почту приёмной комиссии завалилось 347 писем от абитуриентов. Кто-то пишет email в подписи, кто-то в теле письма, кто-то прямо в теме: «Если что, пишите на vasya.gamer@hse.ru, я там всегда онлайн». Твой начальник просит собрать все email в один список, потому что Excel у него снова завис. Печаль.
Условие задачи
 

Email считается валидным, если он состоит из:

  • имени из латинских букв, цифр и точек,
  • символа @,
  • домена из латинских букв, цифр и точек,
  • точки и доменного зона из 2–4 латинских букв (например, .ru, .edu, .com).
Входные данные

Одна строка произвольного текста.

Выходные данные

Все найденные email-адреса, по одному на строке, в порядке появления.

Подсказка: Шаблон: [a-zA-Z0-9.]+@[a-zA-Z0-9.]+\.[a-zA-Z]{2,4}. Не забудь экранировать точку перед доменной зоной: \..

Что не так с кодом df[df['A'] > 5 & df['B'] < 10]?

  1. всё в порядке, код работает
  2. надо писать and вместо &
  3. не хватает скобок вокруг каждого сравнения, будет ошибка
  4. надо писать | вместо &

В выражении (df['A'] > 5) & (df['B'] < 10) зачем нужны скобки вокруг каждого условия?

  1. для красоты, можно убрать
  2. оператор & имеет более высокий приоритет, чем сравнение, без скобок будет ошибка
  3. чтобы pandas понял русский язык
  4. чтобы код стал быстрее

Два слова являются анаграммами, если одно можно получить из другого перестановкой букв.

На вход подаётся число \(N\), затем \(N\) слов (каждое с новой строки, все строчные).

Программа должна:

  • Разбить слова на группы анаграмм
  • Вывести каждую группу, в которой больше одного слова
  • Группы отсортировать по убыванию размера. При равном размере — по алфавиту первого слова
  • Слова внутри группы — в алфавитном порядке, через пробел

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 30\)).

Следующие \(N\) строк — по одному слову (строчные русские буквы).

Формат выходных данных

Группы анаграмм (только те, где больше одного слова). Слова в группе через пробел в алфавитном порядке. Каждая группа на отдельной строке.

Два слова являются анаграммами, если одно можно получить из другого перестановкой букв.

На вход подаётся число \(N\), затем \(N\) слов (каждое с новой строки, все строчные).

Программа должна:

  • Разбить слова на группы анаграмм
  • Вывести каждую группу, в которой больше одного слова
  • Группы отсортировать по убыванию размера. При равном размере — по алфавиту первого слова
  • Слова внутри группы — в алфавитном порядке, через пробел

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 30\)).

Следующие \(N\) строк — по одному слову (строчные русские буквы).

Формат выходных данных

Группы анаграмм (только те, где больше одного слова). Слова в группе через пробел в алфавитном порядке. Каждая группа на отдельной строке.

Два слова являются анаграммами, если одно можно получить из другого перестановкой букв. Например, «кот», «ток» и «кто» — это анаграммы друг друга.

На вход подаётся число \(N\), затем \(N\) слов (каждое с новой строки, все строчные).

Программа должна:

  • Разбить слова на группы анаграмм
  • Вывести каждую группу, в которой больше одного слова
  • Группы отсортировать по убыванию размера. При равном размере — по алфавиту первого слова
  • Слова внутри группы — в алфавитном порядке, через пробел

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 30\)).

Следующие \(N\) строк — по одному слову (строчные русские буквы).

Формат выходных данных

Группы анаграмм (только те, где больше одного слова). Слова в группе через пробел в алфавитном порядке. Каждая группа на отдельной строке.

Примечание

Подсказка: два слова — анаграммы, если при сортировке их букв получается одинаковый результат. Например, sorted("кот") и sorted("ток") оба дают ['к', 'о', 'т'].

Пользователь вводит количество чисел, а затем сами числа — каждое на отдельной строке. Сохраните все числа в список.

Выведите две строки:

  1. Исходный список — числа через пробел.
  2. Среднее арифметическое, округлённое до 1 знака после запятой.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 20\)).

Следующие \(N\) строк — по одному целому числу (от \(-1000\) до \(1000\)).

Формат выходных данных

Первая строка — исходный список через пробел.

Вторая строка — среднее арифметическое с одним знаком после запятой.

Примечание

Подсказка: среднее = сумма / количество. Для вывода используйте round(x, 1).

Пользователь вводит количество слов, а затем сами слова — каждое на отдельной строке. Сохраните все слова в список.

Выведите две строки:

  1. Исходный список — слова через пробел в порядке ввода.
  2. Отсортированный список — слова через пробел по возрастанию длины. Если длины равны, сохраните порядок ввода.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 15\)).

Следующие \(N\) строк — по одному слову (строчные русские буквы, без пробелов).

Формат выходных данных

Две строки: исходный список и отсортированный по возрастанию длины, слова через пробел.

Примечание

Подсказка: используйте key=len в функции sorted().

Пользователь вводит количество слов, а затем сами слова — каждое на отдельной строке. Сохраните все слова в список.

Выведите две строки:

  1. Исходный список — слова через пробел в порядке ввода.
  2. Отсортированный список — слова через пробел в алфавитном порядке.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 15\)).

Следующие \(N\) строк — по одному слову (строчные русские буквы, без пробелов).

Формат выходных данных

Две строки: исходный список и отсортированный по алфавиту, слова через пробел.

Пользователь вводит предложение. Посчитайте, сколько в нём пробелов.

Формат входных данных

Одна строка — предложение (может содержать буквы, цифры, знаки препинания и пробелы). Длина от 1 до 200 символов.

Формат выходных данных

Одно целое число — количество пробелов в строке.

Пользователь вводит слово. Выведите его первый и последний символ через пробел.

Формат входных данных

Одна строка — слово (без пробелов). Длина не менее 2 символов.

Формат выходных данных

Два символа через пробел — первый и последний символ слова.

Пользователь вводит имя и фамилию через пробел. Выведите только фамилию.

Формат входных данных

Одна строка — имя и фамилия, разделённые ровно одним пробелом.

Формат выходных данных

Одна строка — фамилия.

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

Формат входных данных

Одна строка — слово (только буквы, без пробелов).

Формат выходных данных

То же слово, но все буквы заглавные.

Пользователь вводит слово. Выведите его длину (количество символов).

Формат входных данных

Одна строка — слово (без пробелов). Длина от 1 до 100 символов.

Формат выходных данных

Одно целое число — длина слова.

Пользователь вводит слова через пробел в одной строке. Сохраните в список только те слова, длина которых строго больше 3. Выведите получившийся список — слова через пробел в том порядке, в котором следуют во входных данных.

Формат входных данных

Одна строка — слова через пробел (от 1 до 20 слов).

Формат выходных данных

Одна строка — слова с длиной больше 3 через пробел. Если таких слов нет, выведите пустую строку.

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

Формат входных данных

Одна строка — целые числа через пробел (от 1 до 20 чисел, каждое от \(-1000\) до \(1000\)).

Формат выходных данных

Одно целое число — сумма всех введённых чисел.

Пользователь вводит несколько слов через пробел. Постройте словарь, где ключ — слово, значение — его длина. Выведите пары в формате слово: длина, отсортированные по длине в порядке возрастания. Если длины одинаковые, сортируйте по алфавиту.

Формат входных данных

Одна строка — слова через пробел (от 2 до 15 слов). Все слова различны.

Формат выходных данных

Строки в формате слово: длина, отсортированные по длине (по возрастанию), при равенстве — по алфавиту.

Дана строка ДНК, состоящая из символов A, T, G, C. Длина строки кратна 3. Выполните следующие вычисления:

  1. Длина последовательности.

  2. GC-состав — процентная доля нуклеотидов \(G\) и \(C\): \[\mathrm{GC\%} = \frac{|G| + |C|}{n} \times 100,\] где \(|X|\) — количество символов \(X\), \(n\) — длина строки. Округлить до 2 знаков после запятой.

  3. Обратная комплементарная цепь (reverse complement). Комплементарность: \(A \leftrightarrow T\), \(G \leftrightarrow C\); затем цепь разворачивается.

  4. GC-богатые кодоны — количество кодонов (трёхбуквенных блоков), в которых два или три нуклеотида являются \(G\) или \(C\).

  5. Наиболее частый нуклеотид. При ничьей вывести тот, который идёт первым в алфавитном порядке (A < C < G < T).

Формат ввода. Одна строка — последовательность ДНК (только заглавные A, T, G, C; \(6 \le n \le 300\); \(n\) кратно 3).

Формат вывода. Ровно 5 строк в следующем порядке:

length: <целое>
gc: <вещественное, 2 знака>
rc: <строка>
gc_rich_codons: <целое>
most_frequent: <символ>

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

ATGGGCCCTATGAAA

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

length: 15
gc: 46.67
rc: TTTCATAGGGCCCAT
gc_rich_codons: 2
most_frequent: A

Разбор примера. Последовательность: ATG GGC CCT ATG AAA.

 

GC-состав: \((3+3+2+1)/15 = 9/15 \approx 46.67\%\). Кодоны GGC (\(3\,G/C\)) и CCT (\(2\,G/C\)) — итого 2 GC-богатых кодона. Наиболее частый нуклеотид: \(A=5, G=4, C=3, T=3\) — лидирует \(A\).

 

Поделиться
Класснуть