Я использую этот вопрос в интервью, и мне интересно, каково лучшее решение.
Напишите подпрограмму Perl, которая принимает n списков, а затем возвращает 2 ^ n -1 списков, сообщающих вам, какие элементы находятся в каких списках; то есть, какие элементы находятся только в первом списке, втором списке, как в первом, так и во втором списке, и во всех других комбинациях списков. Предположим, что n достаточно мало (менее 20).
Например:
list_compare([1, 3], [2, 3]);
=> ([1], [2], [3]);
Здесь первый список результатов дает все элементы, которые есть только в списке 1, второй список результатов дает все элементы, которые есть только в списке 2, а третий список результатов дает все элементы, которые есть в обоих списках.
list_compare([1, 3, 5, 7], [2, 3, 6, 7], [4, 5, 6, 7])
=> ([1], [2], [3], [4], [5], [6], [7])
Здесь первый список дает все элементы, которые есть только в списке 1, второй список дает все элементы, которые есть только в списке 2, а третий список дает все элементы, которые находятся в обоих списках 1 и 2, как в первый пример. Четвертый список дает все элементы, которые есть только в списке 3, пятый список дает все элементы, которые есть только в списках 1 и 3, шестой список дает все элементы, которые есть только в списках 2 и 3, и седьмой список дает все элементы которые есть во всех 3 списках.
Обычно я задаю эту проблему как продолжение этой проблемы для n = 2.
Какое решение?
Продолжение: элементы в списках являются строками. Могут быть дубликаты, но поскольку они являются просто строками, дубликаты должны быть помещены в вывод. Порядок элементов в выходных списках не имеет значения, порядок самих списков имеет значение.