Вывести слова которые можно составить из букв первого слова строки
«Циклический сдвиг строки» Вводятся строки слов, з...
«Циклический сдвиг строки» Вводятся строки слов, з...
«Циклический сдвиг строки»
Вводятся строки слов, записанных через пробел.
В каждой строке первое слово — исходное, остальные слова для проверки.
Формат вывода
Для каждой строки вывести в порядке уменьшения длины (в случае одинаковой — в порядке ввода) слова, которые можно составить из букв первого слова в этой строке.
Обязательно читай данные через 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
Вот готовое решение на 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()
Counter позволяет работать с мультимножествами. Сравнение source_counts[ch] >= cnt гарантирует, что во втором слове нет букв, которых не хватает в первом, и не превышено их количество.(idx, word) вместе с ключом (-len(word), idx) обеспечивают требуемый порядок: сначала по убыванию длины, а при совпадении длин слова остаются в том же порядке, в котором были введены.sys.stdin, как указано в условии.if not words: continue предотвращает ошибки при наличии лишних переносов строк в конце ввода.Если задача подразумевает чувствительность к регистру или обработку специальных символов/апострофов, уточните детали — быстро адаптирую код. Удачи с отправкой решения! 🚀
Решение корректное: оно учитывает количество повторений букв, сохраняет порядок слов одинаковой длины и сортирует остальные по убыванию длины.
Можно немного упростить сортировку — idx не нужен, поскольку sort в Python стабильный:
import sys
from collections import Counter
for line in sys.stdin:
words = line.split()
if not words:
continue
available = Counter(words[0])
result = []
for word in words[1:]:
needed = Counter(word)
if all(available[ch] >= count for ch, count in needed.items()):
result.append(word)
result.sort(key=len, reverse=True)
print(*result)
При одинаковой длине слов их исходный порядок сохранится благодаря стабильности сортировки Python.
Да, так короче: Counter проверяет кратность букв, а стабильная сортировка sort(key=len, reverse=True) сохраняет исходный порядок слов одинаковой длины. Решение соответствует условию.
Да, это и есть короткий корректный вариант: проверяйте, что Counter(слово) не превышает частоты букв исходного слова, а затем сортируйте подходящие слова по длине. list.sort стабилен и при reverse=True, поэтому порядок слов одинаковой длины сохранится.
Да, верно: сортировка list.sort стабильна и с reverse=True, поэтому слова одинаковой длины останутся в исходном порядке. Например:
import sys
from collections import Counter
for line in sys.stdin:
words = line.split()
if not words:
continue
available = Counter(words[0])
result = [
word for word in words[1:]
if all(Counter(word)[ch] <= available[ch] for ch in Counter(word))
]
result.sort(key=len, reverse=True)
print(*result)
Так проверяется, что каждой буквы в проверяемом слове не больше, чем в первом.
Обработчик данных: Learn Service
Мы используем файлы cookie и обрабатываем персональные данные для улучшения работы сайта,
персонализации контента и анализа трафика. Вы можете выбрать, какие типы cookies разрешить.
Дополнительную информацию найдете в нашей Политике конфиденциальности
и Политике использования cookies.
Правовое основание: Выполнение договора и соблюдение юридических обязательств
Время обработки: На время вашей сессии + 1 год для согласия
Эти файлы cookie необходимы для работы сайта (авторизация, защита безопасности, предпочтения).
Они обычно устанавливаются в ответ на ваши действия и не могут быть отключены без нарушения работы сайта.
Правовое основание: Согласие (конфиденциально)
Время обработки: До 24 месяцев
Эти файлы cookie помогают нам понять, как посетители используют сайт,
собирая анонимную информацию (GA4). Данные полностью анонимны и не связаны с вашей личностью.
Правовое основание: Согласие
Время обработки: До 12 месяцев
Эти файлы cookie позволяют сайту предоставлять расширенные функции и персонализацию
(выбор языка, регион, предпочтения отображения).
Правовое основание: Согласие
Время обработки: До 30 месяцев
Эти файлы cookie используются для показа релевантной рекламы и отслеживания
эффективности маркетинговых кампаний на основе ваших интересов.