Вывести слова которые можно составить из букв первого слова строки
«Циклический сдвиг строки» Вводятся строки слов, з...
«Циклический сдвиг строки» Вводятся строки слов, з...
«Циклический сдвиг строки»
Вводятся строки слов, записанных через пробел.
В каждой строке первое слово — исходное, остальные слова для проверки.
Формат вывода
Для каждой строки вывести в порядке уменьшения длины (в случае одинаковой — в порядке ввода) слова, которые можно составить из букв первого слова в этой строке.
Обязательно читай данные через 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)
Так проверяется, что каждой буквы в проверяемом слове не больше, чем в первом.
Data Controller: Learn Service
We use cookies and process personal data to improve site performance, personalize content,
and analyze traffic. You can choose which types of cookies to allow.
Find more information in our Privacy Policy
and Cookie Policy.
Legal basis: Contract performance and compliance with legal obligations
Processing duration: For your session duration + 1 year for consent
These cookies are necessary for the website to function (authentication, security protection, preferences).
They are usually set in response to your actions and cannot be disabled without disrupting the site.
Legal basis: Consent (confidential)
Processing duration: Up to 24 months
These cookies help us understand how visitors use the site by collecting anonymous information (GA4).
Data is completely anonymous and not linked to your identity.
Legal basis: Consent
Processing duration: Up to 12 months
These cookies allow the site to provide enhanced functionality and personalization
(language choice, region, display preferences).
Legal basis: Consent
Processing duration: Up to 30 months
These cookies are used to display relevant advertising and track the
effectiveness of marketing campaigns based on your interests.