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


Задача 1
n = int(input("Введите количество слов N: "))
dictionary = {}

for _ in range(n):
    line = input().strip()
    # Разделяем по дефису с учетом возможного наличия пробелов
    en, ru = line.split('-')
    dictionary[en.strip()] = ru.strip()

target = input("Введите искомое слово: ").strip()
print(dictionary.get(target, "Не найдено"))

Задача 2
grades = list(map(int, input("Введите оценки через пробел: ").split()))
counts = {}

for grade in grades:
    counts[grade] = counts.get(grade, 0) + 1

for grade in sorted(counts.keys()):
    print(f"{grade}: {counts[grade]}")

Задача 3
line1 = input("Введите товары со склада 1: ").split()
line2 = input("Введите товары со склада 2: ").split()

inventory = {}

for pair in line1 + line2:
    if ':' in pair:
        item, qty = pair.split(':')
        inventory[item] = inventory.get(item, 0) + int(qty)

for item, qty in inventory.items():
    print(f"{item}: {qty}")

Задача 4
results = {}

with open('results.txt', 'r', encoding='utf-8') as f:
    for line in f:
        if line.strip():
            surname, score = line.strip().split()
            results[surname] = int(score)

best_student = max(results, key=results.get)
print(f"{best_student} {results[best_student]}")

Задача 5
pairs = input("Введите пары ключ=значение через пробел: ").split()
inverted = {}

for pair in pairs:
    key, value = pair.split('=')
    inverted[value] = key

for new_key in sorted(inverted.keys()):
    print(f"{new_key}: {inverted[new_key]}")

Задача 6
text = input("Введите строку текста: ").lower()
freq = {}

for char in text:
    if char.isalpha():
        freq[char] = freq.get(char, 0) + 1

if freq:
    # Сортировка по частоте (убывание), затем по алфавиту (возрастание)
    best_char = min(freq.keys(), key=lambda c: (-freq[c], c))
    print(f"Буква '{best_char}' встречается {freq[best_char]} раз(а)")

Задача 7
import re

text = input("Введите строку текста: ")
# Извлекаем слова, убирая знаки препинания
words = re.findall(r'\b\w+\b', text)

len_dict = {}

for word in words:
    length = len(word)
    if length not in len_dict:
        len_dict[length] = []
    if word not in len_dict[length]:
        len_dict[length].append(word)

for length in sorted(len_dict.keys()):
    print(f"{length}: {len_dict[length]}")

Задача 8
logs = {}

with open('logs.txt', 'r', encoding='utf-8') as f:
    for line in f:
        line = line.strip()
        if line:
            parts = line.split(maxsplit=1)
            user_id = parts[0]
            event = parts[1]
            # Последовательное перезаписывание сохраняет последнее по времени событие
            logs[user_id] = event

for user_id, event in logs.items():
    print(f"{user_id}: {event}")

Задача 9
words = input("Введите список слов через пробел: ").split()
anagrams = {}

for word in words:
    key = tuple(sorted(word.lower()))
    anagrams.setdefault(key, []).append(word)

# Вывод отсортированного множества/списка групп анаграмм
for key in sorted(anagrams.keys()):
    print(f"{key}: {anagrams[key]}")

Задача 10
text = input("Введите строку текста: ")

# Первый проход: формирование частотного словаря
freq = {}
for char in text:
    freq[char] = freq.get(char, 0) + 1

# Второй проход: поиск первого символа с частотой 1
found = False
for idx, char in enumerate(text):
    if freq[char] == 1:
        print(f"Символ: '{char}', Индекс: {idx}")
        found = True
        break

if not found:
    print("Нет уникальных")

Задача 11*
arr = list(map(int, input("Введите числа массива через пробел: ").split()))
k = int(input("Введите число K: "))

prefix_counts = {0: 1}
current_sum = 0
count = 0

for num in arr:
    current_sum += num
    count += prefix_counts.get(current_sum - k, 0)
    prefix_counts[current_sum] = prefix_counts.get(current_sum, 0) + 1

print(count)

Задача 12*
pairs_str = input("Введите пары чисел вида a-b через пробел: ").split()
unmatched = set()

for pair in pairs_str:
    a, b = pair.split('-')
    current = (a, b)
    mirror = (b, a)
    
    if mirror in unmatched:
        unmatched.remove(mirror)
    else:
        unmatched.add(current)

result = [f"{a}-{b}" for a, b in unmatched]
print(result)

Задача 13*
n = int(input())
reversed_graph = {}
input_lines = [input().strip() for _ in range(n)]

# Инициализация словаря для всех вершин
for line in input_lines:
    v = line.split('-')[0].strip()
    if v not in reversed_graph:
        reversed_graph[v] = []

# Разворот рёбер
for line in input_lines:
    parts = line.split('-')
    u = parts[0].strip()
    neighbors = parts[1].split() if len(parts) > 1 and parts[1].strip() else []
    
    for v in neighbors:
        if v not in reversed_graph:
            reversed_graph[v] = []
        reversed_graph[v].append(u)

for v in sorted(reversed_graph.keys()):
    print(f"{v}: {' '.join(sorted(reversed_graph[v]))}")

Задача 14*
tickets = input("Введите билеты Откуда-Куда через пробел: ").split()

routes = {}
departures = set()
arrivals = set()

for ticket in tickets:
    src, dst = ticket.split('-')
    routes[src] = dst
    departures.add(src)
    arrivals.add(dst)

# Старт — город, из которого есть выезд, но нет въезда
start_city = (departures - arrivals).pop()

path = [start_city]
current = start_city
while current in routes:
    current = routes[current]
    path.append(current)

print(" - ".join(path))