"Готов ли ответ?": помощь в решении задачи

– Готов ли ответ, вы хотите спросить? – величаво перебил компьютер. – Да.
– Ответ на Великий Вопрос Жизни, Вселенной и Всего Остального?
– Да.
– И ты можешь сообщить его нам?
– Да.
– Прямо сейчас?
– Прямо сейчас. – Хотя я не думаю, что он вам понравится.
– Не важно! Мы должны знать! Немедленно!
– Ответ на Великий Вопрос…
– Ну!
– Жизни, Вселенной и Всего Остального…
– Ну!
– Это… – произнес компьютер и замолчал.
– Ну!
– Сорок два, – с бесконечным спокойствием сообщил компьютер.

Напишите программу, которая выбирает наиболее подходящий ответ.

Формат ввода
Вводятся строки слов через дефис, пока не будет введена строка 42.

Формат вывода
Из каждой строки без повторений выбрать слова, в которых есть первая буква последнего слова этой строки (независимо от регистра). Слова упорядочить по алфавиту и вывести через пробел. Если длина полученной строки кратна ее номеру (счет с 1), то все слова выводить с прописной буквы, остальные строчные.

Пример 1
Ввод

Is-the-answer-ready-you-want-to-ask
the-computer-interrupted-grandly
Yes
42

Вывод

Answer Ask Ready Want
grandly
Yes

Пример 2
Ввод

The-Answer-to-the-Great-Question
Well
Life-the-Universe-and-Everything-Else
Well
This-is-the-computer-said-and-then-stopped
Well
42

Вывод

Question
Well
Else Everything Life Universe The
Well
This Is Said Stopped
Well

Сделал решение но не могу понять в чём проблема

a = input()
s = []
s2 = []
n = 1
bool = 0
while a != "42":
    if len(a) % n == 0:
        bool = 1
    a = a.split("-")
    for i in a:
        if a[-1][0].lower() in i.lower():
            s.append(i)
    if bool:
        for j in sorted(s):
            s2.append(j.capitalize())
        print(*s2)
    else:
        print(*sorted(s))
    a = input()
    s = []
    n += 1
    s2 = []
    bool = 0

Ответы (2 шт):

Автор решения: Zhihar

как вариант:

res = []

index = 0
while True:

    text = input()
    if text == "42":
        break

    index += 1

    words = [word.lower() for word in text.split("-")]

    words_selected = set(word for word in words if words[-1][0] in word)

    words_sorted = sorted(list(words_selected))

    string = ' '.join(words_sorted)

    if len(string) % index == 0:
        string = ' '.join([word.title() for word in words_sorted])

    res.append(string)

print(*res, sep='\n')

можно избавиться от index как лишней сущности:

res = []

while True:

    text = input()
    if text == "42":
        break

    words = [word for word in text.split("-")]

    words_selected = set(word for word in words if words[-1].lower()[0] in word.lower())

    words_sorted = sorted(list(words_selected))

    string = ' '.join(words_sorted)

    if len(string) % (len(res) + 1) == 0:
        string = ' '.join([word.title() for word in words_sorted])

    res.append(string)

print(*res, sep='\n')
→ Ссылка
Автор решения: SergFSM

Немного поправил ваш код и для наглядности заменил input на список:

a = ['Is-the-answer-ready-you-want-to-ask',
     'the-computer-interrupted-grandly-the',
     'Yes-Yes',
     '42']


for j,l in enumerate(a,1):
    if l=='42': break
    s = set()
    b = l.split("-")
    for i in b:
        if b[-1][0].lower() in i.lower():
            s.add(i)
    s = ' '.join(sorted(s))
    if len(s)%j==0:
        s = s.title()
    print(s)

У вас код не сработал потому, что проверяете кратность длины исходной строки, а по условию надо проверять готовую строку. Также, по условию в готовых строках не должно быть повторений слов, у вас в коде нет такой проверки.

Результат:

'''
Answer Ask Ready Want
Computer Interrupted The
Yes
→ Ссылка