Skip to content

Latest commit

 

History

History
288 lines (267 loc) · 6.84 KB

answers-3.2.md

File metadata and controls

288 lines (267 loc) · 6.84 KB

Ответы и решения задач из хэндбука Яндекс «Основы Python», параграф 3.2

3.2. Множества, словари

A. Символическая выжималка

print("".join(set(input())))

B. Символическая разница

string_1 = input()
string_2 = input()
print("".join(set(string_1) & set(string_2)))

C. Зайка — 8

items = set()
for _ in range(int(input())):
    items = items | set(input().split())
print("\n".join(items))

D. Кашееды

n, m = int(input()), int(input())
children_1, children_2 = set(), set()
for _ in range(n):
    children_1.add(input())
for _ in range(m):
    children_2.add(input())
count = len(children_1 & children_2)
if count > 0:
    print(count)
else:
    print("Таких нет")

E. Кашееды — 2

n, m = int(input()), int(input())
children = set()
for _ in range(n + m):
    children.add(input())
count = len(children) * 2 - (n + m)
if count > 0:
    print(count)
else:
    print("Таких нет")

F. Кашееды — 3

n, m = int(input()), int(input())
children = set()
for _ in range(n + m):
    child = input()
    if child in children:
        children.remove(child)
    else:
        children.add(child)
if len(children) > 0:
    print("\n".join(sorted(children)))
else:
    print("Таких нет")

G. Азбука Морзе

MORSE = {
    "A": ".-", "B": "-...", "C": "-.-.",
    "D": "-..", "E": ".", "F": "..-.",
    "G": "--.", "H": "....", "I": "..",
    "J": ".---", "K": "-.-", "L": ".-..",
    "M": "--", "N": "-.", "O": "---",
    "P": ".--.", "Q": "--.-", "R": ".-.",
    "S": "...", "T": "-", "U": "..-",
    "V": "...-", "W": ".--", "X": "-..-",
    "Y": "-.--", "Z": "--..",
    "0": "-----", "1": ".----", "2": "..---",
    "3": "...--", "4": "....-", "5": ".....",
    "6": "-....", "7": "--...", "8": "---..",
    "9": "----."
}
for word in input().upper().split():
    encoded_word = []
    for char in word:
        encoded_word.append(MORSE[char])
    print(" ".join(encoded_word))

H. Кашееды — 4

porridges = dict()
for _ in range(int(input())):
    line = input().split()
    for porridge in line[1:]:
        porridges[porridge] = porridges.get(porridge, []) + [line[0]]
result = porridges.get(input(), ["Таких нет"])
print("\n".join(sorted(result)))

I. Зайка — 9

animals = dict()
while (line := input()) != "":
    for item in line.split():
        animals[item] = animals.get(item, 0) + 1
for animal, count in animals.items():
    print(animal, count)

J. Транслитерация

RULES = {
    "А": "A", "Б": "B", "В": "V", "Г": "G",
    "Д": "D", "Е": "E", "Ё": "E", "Ж": "Zh",
    "З": "Z", "И": "I", "Й": "I", "К": "K",
    "Л": "L", "М": "M", "Н": "N", "О": "O",
    "П": "P", "Р": "R", "С": "S", "Т": "T",
    "У": "U", "Ф": "F", "Х": "Kh", "Ц": "Tc",
    "Ч": "Ch", "Ш": "Sh", "Щ": "Shch", "Ъ": "",
    "Ы": "Y", "Ь": "", "Э": "E", "Ю": "Iu", 
    "Я": "Ia"
}
result = ""
for char in input():
    new_char = RULES.get(char.upper(), char)
    if char.islower():
        new_char = new_char.lower()
    result += new_char
print(result)

K. Однофамильцы

persons = set()
uniques = set()
for _ in range(count := int(input())):
    name = input()
    if name in persons:
        uniques.discard(name)
    else:
        persons.add(name)
        uniques.add(name)
print(count - len(uniques))

L. Однофамильцы — 2

persons = set()
repeats = dict()
for _ in range(int(input())):
    name = input()
    if name in persons:
        if name in repeats:
            repeats[name] += 1
        else:
            repeats[name] = 2
    else:
        persons.add(name)
if len(repeats):
    for name in sorted(repeats.keys()):
        print(f"{name} - {repeats[name]}")
else:
    print("Однофамильцев нет")

M. Дайте чего-нибудь новенького!

dishes = set()
for _ in range(int(input())):
    dishes.add(input())
for _ in range(int(input())):
    for _ in range(int(input())):
        dishes.discard(input()) 
if len(dishes) > 0:
    print("\n".join(sorted(dishes)))
else:
    print("Готовить нечего")

N. Это будет шедевр!

result = set()    
in_stock = set()
for _ in range(int(input())):
    in_stock.add(input())
for _ in range(int(input())):
    recipe = input()
    items = set()
    for _ in range(int(input())):
        items.add(input())
    if len(items - in_stock) == 0:
        result.add(recipe)
if len(result) > 0:
    print("\n".join(sorted(result)))
else:
    print("Готовить нечего")

O. Двоичная статистика!

numbers = input().split()
result = []
for n in numbers:
    b = bin(int(n))[2:]
    result.append({
        "digits": len(b),
        "units": b.count("1"),
        "zeros": b.count("0")
    })
print(result)

P. Зайка — 10

result = set()
while (line := input()) != "":
    items = line.split()
    for i in range(len(items)):
        if items[i] == "зайка":
            if i > 0:
                result.add(items[i - 1])
            if i < len(items) - 1:
                result.add(items[i + 1])
print("\n".join(result))

Q. Друзья друзей

persons = dict()
while (line := input()) != "":
    x, y = line.split()
    persons[x] = persons.get(x, set()) | {y}
    persons[y] = persons.get(y, set()) | {x}
for x in sorted(persons.keys()):
    level_1 = persons[x]
    level_2 = set()
    for y in level_1:
        level_2 = level_2 | persons[y]
    level_2 = level_2 - level_1 - {x}
    print(f"{x}: {', '.join(sorted(level_2))}")

R. Карта сокровищ

counters = dict()
for _ in range(int(input())):
    x, y = input().split()
    group = x[:-1] + " " + y[:-1]
    counters[group] = counters.get(group, 0) + 1
print(max(counters.values()))

S. Частная собственность

toys = set()
uniques = set()
for _ in range(int(input())):
    for toy in set(input().split(": ")[1].split(", ")):
        if toy in toys:
            uniques.discard(toy)
        else:
            toys.add(toy)
            uniques.add(toy)
print("\n".join(sorted(uniques)))

T. Простая задача 4.0

numbers = []
for n in set(input().split("; ")):
    numbers.append(int(n))
numbers.sort()
primes = dict()
for i in range(len(numbers)):
    for j in range(i + 1, len(numbers)):
        a, b = numbers[i], numbers[j]
        while b:
            a, b = b, a % b
        if a == 1:
            primes[numbers[i]] = primes.get(numbers[i], []) + [str(numbers[j])]
            primes[numbers[j]] = primes.get(numbers[j], []) + [str(numbers[i])]
    if numbers[i] in primes:
        print(f"{numbers[i]} - {', '.join(primes[numbers[i]])}")