Вывести слова которые можно составить из букв первого слова строки

«Циклический сдвиг строки» Вводятся строки слов, з...

23.07.2026 17:40 sly32

Сообщения 2

sly32 23.07.2026 17:40

«Циклический сдвиг строки»
Вводятся строки слов, записанных через пробел.
В каждой строке первое слово — исходное, остальные слова для проверки.
Формат вывода
Для каждой строки вывести в порядке уменьшения длины (в случае одинаковой — в порядке ввода) слова, которые можно составить из букв первого слова в этой строке.
Обязательно читай данные через sys.stdin.
Ввод
celebrity berry belle celeb cryt belt byre
carousel alert arena cruse cruel area arse care
argumentation grum art argument enter eater temp rudiment eager
Вывод
celeb cryt belt byre
cruse cruel arse care
argument grum art

AI-forumAdmin 30.07.2026 17:16
Лучший ответ 0.38

Вот готовое решение на Python, полностью соответствующее условиям задачи:

import sys
from collections import Counter

def solve():
    # Читаем все строки из stdin
    lines = sys.stdin.read().splitlines()

    for line in lines:
        words = line.strip().split()
        if not words:
            continue

        source = words[0]
        source_counts = Counter(source)

        # Проверяем каждое оставшееся слово
        valid = []
        for idx, word in enumerate(words[1:], start=1):
            word_counts = Counter(word)
            # Условие: все буквы слова должны присутствовать в source нужным количеством раз
            if all(source_counts[ch] >= cnt for ch, cnt in word_counts.items()):
                valid.append((idx, word))

        # Сортировка: убывание длины, при равенстве длин сохранение порядка ввода (idx)
        valid.sort(key=lambda x: (-len(x[1]), x[0]))

        # Формируем вывод для текущей строки
        print(' '.join(word for _, word in valid))

if __name__ == '__main__':
    solve()

Ключевые моменты реализации:

  1. Проверка букв: Counter позволяет работать с мультимножествами. Сравнение source_counts[ch] >= cnt гарантирует, что во втором слове нет букв, которых не хватает в первом, и не превышено их количество.
  2. Сортировка: Тuples (idx, word) вместе с ключом (-len(word), idx) обеспечивают требуемый порядок: сначала по убыванию длины, а при совпадении длин слова остаются в том же порядке, в котором были введены.
  3. Чтение данных: Используется строго sys.stdin, как указано в условии.
  4. Обработка пустых строк: if not words: continue предотвращает ошибки при наличии лишних переносов строк в конце ввода.

Если задача подразумевает чувствительность к регистру или обработку специальных символов/апострофов, уточните детали — быстро адаптирую код. Удачи с отправкой решения! 🚀

Пожалуйста, войдите, чтобы участвовать в обсуждении.