• 1
    数据输入输出
    • 任务
  • 2
    条件语句
    • 任务
  • 3
    for循环
    • 任务
  • 4
    字符串
    • 任务
  • 5
    while循环
    • 任务
  • 6
    列表
    • 任务
  • 7
    二维数组
    • 任务
  • 8
    字典
    • 任务
  • 9
    集合
    • 任务
  • 10
    函数与递归
    • 任务
  • к

课程 4. Lines

难度:

任务«Memes»

💻 Python

四位朋友——罗曼(IT专家)、马克西姆(化学家)、丹尼克(设计师)和弗拉德(多面手)——创建了一个共享聊天群来交换表情包。为了不因不合时宜的玩笑而分散彼此的工作注意力,他们决定编写一个机器人,该机器人能自动判断表情包的主题,并将其仅发送给感兴趣的人。你的任务——为这个机器人编写核心程序。

分类规则:
你将在输入中收到一行——这是表情包的文本。机器人必须分析该文本,并根据是否包含特定字母来确定其类别:

  1. IT 表情包:   如果该行包含所有字母 'b', 'u', 'g'(顺序和数量不限)。接收者——  罗曼 。
  2. 化学表情包:   如果该行包含所有字母 'b', 'o', 'o', 'm'(即字母 'o' 必须至少出现两次)。接收者——  马克西姆 。
  3. 设计师表情包:   如果该行包含所有字母 'e', 'd', 'i', 't', 's'。接收者——  丹尼克 。
  4. 其他:   如果表情包不符合上述任何类别。接收者——  弗拉德 。

关键规则(冲突解决):
一个表情包可能同时符合多个类别。在这种情况下,它必须发送给其类别“完成”得更早的那个人。当该类别所需的最后一个字母在行中被找到时,该类别即被视为“完成”。机器人必须选择完成索引最小的类别。

你需要编写一个程序,该程序接收一行(表情包)并输出接收者的名字。

输入格式

一行,即一个“梗”(类型:字符串)。

输出格式

收件人姓名(类型:字符串)。

示例

输入

淹没它

输出

罗马

提示

There will be no clue here, decide for yourself!

main.py
测试 1
测试 2
测试 3
测试 4
测试 5
测试 6
测试 7
测试 8
测试 9
测试 10
开发者解答
from collections import Counter

def find_completion_index(meme, required_letters):
    """
    Находит индекс, на котором категория считается "завершенной".
    Возвращает индекс или очень большое число, если категория не подходит.
    """
    # Создаем счетчик необходимых букв (например, для 'boom' -> {'b': 1, 'o': 2, 'm': 1})
    required_counts = Counter(required_letters)
    current_counts = Counter()
    
    # Проверяем, выполнены ли все условия
    def are_requirements_met():
        for char, count in required_counts.items():
            if current_counts[char] < count:
                return False
        return True

    # Идем по строке и считаем буквы
    for i, char in enumerate(meme):
        if char in required_counts:
            current_counts[char] += 1
            # Как только все буквы найдены, возвращаем текущий индекс
            if are_requirements_met():
                return i
    
    # Если цикл закончился, а буквы не найдены, возвращаем "бесконечность"
    return float('inf')

# Получаем текст мема
meme_text = input()

# Создаем список кандидатов с их условиями
candidates = [
    ('Roma', 'bug'),
    ('Maxim', 'boom'),
    ('Danik', 'edits')
]

# Находим "индекс завершения" для каждого кандидата
results = []
for name, letters in candidates:
    index = find_completion_index(meme_text, letters)
    results.append((index, name))

# Находим победителя. Функция min() для кортежей (индекс, имя)
# автоматически выберет тот, у которого первый элемент (индекс) наименьший.
winner_index, winner_name = min(results)

# Если минимальный индекс остался "бесконечным", значит, никто не подошел
if winner_index == float('inf'):
    print("Vlad")
else:
    print(winner_name)

🎉 恭喜! 🎉

你出色地完成了任务!这是一个不小的挑战,但你找到了正确答案。你离编程大师又近了一步!继续保持,每一步都让你更强大。

AD

广告

red-snake blue-snake green-snake

正在运行代码...

AI助手

你好!我是你的编程助手。随时向我提问关于 Python 的问题——我可以解释函数、方法,并帮助你完成当前任务!