Информатика

15 732 задачивместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.

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

Оказалось, что все щиты стоят одинаково, независимо от размера щита. Определите, какое наименьшее число щитов необходимо приобрести, чтобы починить весь забор.

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

Первая строка входных данных содержит целое число L (L > 0) – максимальный размер щита. Во второй строке входных данных записано целое число N (N > 0) – количество досок в заборе. Следующие N строк содержат по одному числу, равному 0 или 1. Число 1 обозначает, что соответствующая доска в заборе нуждается в замене, число 0 – что доска может быть сохранена.

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

Программа должна вывести одно целое число – минимальное число щитов, которое необходимо приобрести для ремонта всего забора.

На дискотеке в ряд стоят три прожектора, которые поочерёдно светят в следующем порядке: левый, средний, правый, средний, левый, средний, правый, средний и т.д. (слева направо, затем налево, опять направо, ...). Каждый прожектор горит в течение одной секунды.

Известно, что лампа левого прожектора имеет ресурс A секунд горения, среднего – B секунд, правого – С секунд. Определите, сколько времени сможет продолжаться этот процесс горения прожекторов.

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

Программа получает на вход три целых неотрицательных числа A, B, C – время горения левого, среднего, правого прожектора.

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

Программа должна вывести одно целое число.

Пояснение к примеру
Прожектора горят в следующем порядке: левый, средний, правый, средний, левый, средний, правый. После этого должен загореться средний прожектор, но он уже выработал ресурс и загореться не сможет. Поэтому процесс обрывается после 7 с.

re.finditer(pattern, string) - находит все совпадения, возвращает итератор.

  • Возвращает: итератор объектов Match
  • Использование: for match in re.finditer(r'\d+', text):


match.groups(default=None) - возвращает все захваченные группы в виде кортежа

Особенности:

  • Возвращает ВСЕ группы из шаблона

  • Группы нумеруются с 1 (group(1)group(2))

  • Если группа не найдена, возвращает default (по умолчанию None)

match.group(0) - найденная строка


Найти все теги товаров и вывести их вместе с названиями товаров.

Формат вывода
Товар: iPhone_14
Теги: Premium, New
Полное совпадение: Name: iPhone_14, Price: 999.99$, Category: Electronics, Tags: [Premium, New]
На ленте исполнителя МТ в соседних ячейках записана последовательность из 1000 символов, включающая только нули и единицы. Ячейки справа и слева от последовательности заполнены пустыми символами «λ». В начальный момент времени головка расположена в ближайшей ячейке слева от последовательности.

Программа для исполнителя:
  l 0 1
q0 l, R, q1    
q1 l, S, q1 1, R, q1 0, R, q1

Команды движения каретки: L – влево, R – вправо, S – стоп. После выполнения программы на ленте осталось ровно 319 нулей. Определите максимально возможное число единиц в исходной последовательности
 
На ленте исполнителя МТ в соседних ячейках записана последовательность из 1000 символов, включающая только нули и единицы. Ячейки справа и слева от последовательности заполнены пустыми символами «λ». В начальный момент времени головка расположена в ближайшей ячейке слева от последовательности.

Программа для исполнителя:
 
  l 0 1
q0 l, R, q1    
q1 l, S, q1 1, R, q1 0, R, q1

Команды движения каретки: L – влево, R – вправо, S – стоп. После выполнения программы на ленте осталось ровно 515 нулей. Определите максимально возможное число нулей в исходной последовательности.
 
На ленте исполнителя МТ в соседних ячейках записана последовательность из 1000 символов, включающая только нули и единицы. Ячейки справа и слева от последовательности заполнены пустыми символами «λ». В начальный момент времени головка расположена в ближайшей ячейке справа от последовательности.
Программа для исполнителя:
  λ 0 1
q0 λ, L, q1    
q1 λ, S, q1 1, S, q1 0, L, q1

Команды движения каретки: L – влево, R – вправо, S – стоп. После выполнения программы на ленте осталось ровно 758 нулей. Определите минимально возможное число нулей в исходной последовательности.
 
Исполнитель МТ представляет собой читающую и записывающую головку, которая может передвигаться вдоль бесконечной горизонтальной ленты, разделённой на равные ячейки.
Полный текст условия см. по ссылке
 

Выполните задание.

На ленте записана последовательность из 900 символов. Каждый символ берется из алфавита {0, 1, 2}. Последовательность окружёна слева и справа пустым символом λ. Головка стартует на ближайшем слева символе λ и находится в состоянии q0.

Программа работы исполнителя:

 

λ

0 1 2
q0

λ, R, q1

     
q1

λ, S, q1

1, R, q2

2, R, q1 2, R, q1
q2

λ, S, q2

0, R, q2

1, R, q2 0, R, q2

После выполнения количество единиц стало 300, количество двоек стало 450. Определите минимально возможное число нулей в исходной последовательности.

Исполнитель МТ представляет собой читающую и записывающую головку, которая может передвигаться вдоль бесконечной горизонтальной ленты, разделённой на равные ячейки.
Полный текст условия см. по ссылке
 

Выполните задание.

На ленте записана последовательность из 800 символов. Каждый символ берется из алфавита {0, 1, 2, 3}. Последовательность окружёна слева и справа пустым символом λ. Головка стартует на ближайшем слева символе λ и находится в состоянии q0. В исходной последовательности присутствует каждый символ из алфавита хотя бы один раз.

Программа работы исполнителя:

 

λ

0 1 2 3
q0

λ, R, q1

       
q1

λ, S, q1

1, R, q1

2, R, q1 3, R, q1 0, R, q1

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

Исполнитель МТ представляет собой читающую и записывающую головку, которая может передвигаться вдоль бесконечной горизонтальной ленты, разделённой на равные ячейки.
Полный текст условия см. по ссылке
 

Выполните задание.

На ленте записана последовательность из 1000 символов. Каждый символ берется из алфавита {0, 1, 2}. Последовательность окружёна слева и справа пустым символом λ. Головка стартует на ближайшем слева символе λ и находится в состоянии q0. В исходной последовательности присутствует каждый символ из алфавита хотя бы один раз.

Программа работы исполнителя:

 

λ

0 1 2
q0

λ, R, q1

     
q1

λ, S, q0

0, R, q1

2, R, q1 1, R, q1

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

Исполнитель МТ представляет собой читающую и записывающую головку, которая может передвигаться вдоль бесконечной горизонтальной ленты, разделённой на равные ячейки.
Полный текст условия см. по ссылке
 

Выполните задание.

На ленте записана последовательность из 900 символов (0 и 1), окружённая  слева и справа пустым символом λ. Головка стартует на ближайшем слева символе λ и находится в состоянии q0.

Программа работы исполнителя:

 

λ

1 0
q0

λ, R, q1

   
q1

λ, S, q0

0, R, q1

1, R, q1

После выполнения программы на ленте осталось ровно 480 единиц. Определите минимально возможное число единиц в исходной последовательности.

Дубликаты - одинаковые строки в данных, которые могут исказить анализ.

Основные методы

df.duplicated() - находит дубликаты (возвращает True/False)
df.drop_duplicates() - удаляет дубликаты
df.nunique() - количество уникальных значений
Параметры drop_duplicates()
subset - столбцы для проверки дубликатов
keep - какую копию оставить ('first', 'last', False)
ignore_index -  пересоздает аккуратный последовательный индекс (0, 1, 2, 3, 4...).
Пример
df_clean = df.drop_duplicates()  # Удалить полные дубликаты
df_partial = df.drop_duplicates(subset=['name'])  # По имени
df_last = df.drop_duplicates(keep='last')  # Оставить последний

Задание

1) Посчитайте количество полных дубликатов в прикрепленном датасете (программа должна вывести целое число)
2) Удалите все полные дубликаты и выведите размер получившегося датасета.

Обработка пропусков

df.dropna() - удаляет строки с пропусками
df.fillna(value, inplace=True) - заполняет пропуски значением value
df.fillna(df.mean(), inplace=True) - заполняет средним значением

Параметр inplace:
inplace=False (по умолчанию) - создает копию с изменениями
inplace=True- изменяет исходный DataFrame напрямую

Метод fillna() с словарем позволяет заполнить пропуски в разных столбцах различными значениями за одну операцию. Синтаксис:
df.fillna({'column1': value1, 'column2': value2, ...})
Пример
 
df = ...
# Заполнение разными значениями
fill_dict = {
    'age': df['age'].mean(),      # Средним значением
    'salary': df['salary'].median(), # Медианой
    'city': 'Unknown'             # Константой
}

df_filled = df.fillna(fill_dict)
print(df_filled)
 

Задание

Проанализируйте датасет супергероев, считав его из прикрепленного файла
Напишите программу, который ищет и обрабатывает пропуски. 

  1. Заполните пропуски в power и intelligence средними значениями
  2. Заполните пропуски в costume_cost медианным значением 
  3. Заполните пропуски в first_appearance значением 1950 
  4. Для текстовых полей (name, alias, universe) заполните пропуски строкой Unknown
Выведите обработанный датасет на экран, используя print(df)

Пропущенные значения (NaN, None, NULL) - одна из главных проблем при анализе данных.

Поиск пропусков

df.isnull() - находит пропуски
df.isnull().sum() - считает пропуски по столбцам

 

Задание

Проанализируйте датасет супергероев, считав его из прикрепленного файла
Напишите программу, который ищет пропуски. Выведите

  1. В первой строке - количество пропусков в каждом столбце (семь целых чисел через пробел)
  2. Во второй строке - процент пропущенных значений (отбросив дробную часть) для каждого столбца  (семь целых чисел через пробел)
Числа должны быть в порядке перечисления столбцов в датасете.

Пример вывода (пример дан для понимания формата вывода):
1 2 3 2 1 1 4
10 20 30 20 10 10 40

Промахом считается выстрел с расстоянием больше 10.0. Определите, у какого игрока был самый худший одиночный выстрел (максимальное значение в массиве)? А сколько всего фатальных промахов совершила вся команда?

Тренеры заметили, что некоторые игроки сильно «разогреваются» к концу сессии. Проверьте гипотезу: сравните среднюю точность каждого игрока по первым пяти выстрелам и по последним пяти. У кого разница в пользу последних выстрелов наибольшая? (Значит, он "разыгрывается").
Точность — это хорошо, но стабильность — лучше! Найдите игрока с самой маленькой дисперсией или стандартным отклонением результатов. Это значит, что он стабильно стреляет примерно с одинаковой точностью.
Найдите сумму всех целых чисел, расположенных между двумя целыми числами a и b (включая a и b).

Формат входных данных
В первой строке записано целое число a, во второй - целое число b (-1000 <= a, b <= 1000).

Формат выходных данных
Выведите искомую сумму.
Поделиться
Класснуть