Формат файла ZIP использует DEFLATE для алгоритма сжатия.Поэтому вам нужно рассмотреть, как работает этот алгоритм, и подобрать данные так, чтобы алгоритм легко сжимался.Согласно статье в википедии, есть два этапа сжатия.Первый использует LZ77 , чтобы найти повторяющиеся разделы данных и заменить их краткими ссылками.Второй использует кодирование Хаффмана , чтобы взять оставшиеся данные и устранить избыточность по всему блоку.Это называется энтропийным кодированием - если информация не очень случайная (имеет низкую энтропию), код заменяет обычные вещи короткими символами, увеличивая энтропию.
В общем, тогда списки с большим количеством повторных прогонов ([111,2,44,93,111,2,44,93 ...]) хорошо сжимаются при первом проходе.Списки с большим количеством повторяющихся чисел в других случайных вещах (т. Е. [111,34,43,50,111,34,111,111,2,34,22,60,111,98,2], где часто встречаются 34 и 111) будут хорошо сжиматься ввторой проход.
Чтобы найти подходящие числа, я думаю, что проще всего просто отсортировать каждый список, затем объединить их, сохранив сортировку, пока вы не получите 42000 выходных чисел.Вы получите пробеги, как они случаются.Это не будет оптимальным, у вас может быть число 255 в каждом входном списке, и вы бы пропустили их, используя эту технику, но это было бы легко.
Другой подход состоял бы в гистограмме чисел в 256 бинов.,Любые выделенные ячейки указывают номера, которые следует сгруппировать.После этого, я думаю, вам нужно искать последовательности.Опять же, сортировка входных данных, вероятно, облегчит эту задачу.
Я только что заметил, что у вас есть ограничение на выбор одного числа из каждого списка.Таким образом, в обоих случаях вы могли бы отсортировать каждый список, а затем удалить дубликаты.
Кроме того, коды Хаффмана могут быть сгенерированы с использованием дерева, поэтому мне интересно, есть ли какая-то магическая древовидная структура, в которую вы могли бы поместить числа, которые бы автоматически давалиправильный ответ.