Цей виклик ґрунтується на проблемі, описаній в Д. Парнас, на критеріях, які слід використовувати при декомпозиції систем на модулі , та детально розроблених в J. Morris, Реальне програмування на функціональних мовах .
Напишіть програму або функцію, яка приймає список назв книг з stdin
аргументу або в аргументі у розумному, зручному для вашої мови форматі. Наприклад,
Green Sleeves
Time Was Lost
або
("Green Sleeves";"Time Was Lost")
Поверніть або роздрукуйте в stdout
алфавітному списку ключових слів, показуючи їхній контекст у межах оригінальних заголовків, додаючи кожне ключове слово у кутові дужки ( <
та >
). Як і введення, вихід може бути у прийнятному форматі, який зручний для ваших мов - розділених рядками у новому рядку, списку рядків тощо:
<Green> Sleeves
Time Was <Lost>
Green <Sleeves>
<Time> Was Lost
Time <Was> Lost
Заголовки будуть складатися з серії ключових слів, розділених єдиним пробілом. Ключові слова будуть містити лише алфавітні символи. Ключові слова слід сортувати лексикографічно . Заголовки будуть унікальними, а ключові слова будуть унікальними в кожному заголовку, але одне і те ж ключове слово може існувати в декількох заголовках. Якщо ключове слово існує у більш ніж одному заголовку, у висновку слід перелічити кожен вигляд у довільному порядку . Наприклад, враховуючи цей вхід:
A Dugong
A Proboscis
Допустимим результатом буде:
<A> Proboscis
<A> Dugong
A <Dugong>
A <Proboscis>
Або:
<A> Dugong
<A> Proboscis
A <Dugong>
A <Proboscis>
Це код-гольф - переможець - найкоротше рішення в байтах. Стандартні лазівки заборонені.