По заданному списку списков найдите самый короткий список, который является непрерывным подсписком ровно одного списка.
Например, если бы мы имели
[[1,2,3],
[1,2,3,4],
[2,4,5,6],
[1,2,4,5,6]]
самый короткий непрерывный подсписок будет, [3,4]
поскольку он появляется только во втором списке.
Если нет уникального смежного подсписка (для этого требуется хотя бы одна повторяющаяся запись), выведите пустой список. Вот пример
[[1,2,3],
[1,2,3],
[1,2]]
Если имеется несколько смежных подсписков минимального размера, вы можете вывести любой из них или список, содержащий их все. Например, если вход был
[[1,2,3],[2],[1],[3]]
Вы можете вывести либо [1,2]
, [2,3]
либо [[1,2],[2,3]]
. Если вы выберете последний вариант, вы можете вывести одноэлементные списки для случаев, когда существует только одно решение.
Вывод может происходить в одном и том же списке более одного раза, если он отсутствует в другом списке. Например
[[1,2,1,2],[2,1]]
должен выводить, [1,2]
потому что[1,2]
это подсписок первого списка, но не второй, хотя это подсписок первого списка двумя разными способами.
Вы можете использовать в качестве входных данных список списков, содержащих любой тип, при условии, что этот тип имеет более 100 возможных значений, т.е. не имеет логических значений.
Это код-гольф поэтому ответы будут оцениваться в байтах, причем меньше байтов будет лучше.
Тестовые случаи
[[1,1]] : [1]
[[1],[1]] : []
[[1,1],[1]] : [1,1]
источник
[[1,1]]
Pyth, 15 байт
Тестирование
Сначала мы генерируем все подстроки каждого входного списка с помощью
.:R)Q
. Затем мы генерируем все возможные упорядочения этих групп подстрок.p
.Теперь сложная часть:
-M
. Это складывает-
функцию по каждому списку заказов. Он начинается с первого списка подстрок, затем отфильтровывает всех жителей всех остальных списков.Затем результаты объединяются, упорядочиваются по длине,
[]
добавляется a , а затем первый элемент результирующего списка извлекается с помощьюh
.Это было бы на 4 байта короче, если бы я мог выдавать ошибку ни в одном уникальном списке, а не выводить пустой список.
источник
hlDs-M.p.:R
, вероятно, то, что он имеет в виду.Pyth - 20 байт
Тестовый пакет .
источник
[[1,1]]
.Haskell ,
149128126113 байтовПопробуйте онлайн!
Сохранено 21 байт благодаря Wheat Wizard, H.PWiz и Брюсу Форте.
Сохранено еще два байта благодаря H.PWiz.
Сохранено 13 байтов благодаря NIMI.
РЕДАКТИРОВАТЬ Это было оригинальное объяснение:
источник
i=
в конце вашей программы, потому что бессмысленные функции не нужно назначать в соответствии с нашими правилами.foldl1(++)
простоconcat
?(length$filter(==x)l)
может быть корочеlength(filter(==x)l)
или даже корочеsum[1|y<-l,y==x]
[]
этого есть, но>>=id
еще короче;) Также @jferard: Вы можете встроить много функций (напримерf
,g
и т . Д.), Так как вы используете их только один раз.Java 8, 251 + 19 = 270 байт
Очень грубая лямбда от минимально
List<List>
доList
(лучше всегоFunction<List<List<Integer>>, List<Integer>>
хотя ). Это решение грубой силы, которое итерирует длины чанков от 1 до размера самого большого списка, в каждом случае итерируя по каждому чанку этой длины в каждом списке и проверяя каждый такой чанк по каждому чанку равного размера в любом другом списке.Бойся меня, сборщик мусора.
Неуправляемая лямбда
Попробуйте онлайн
Java 8, 289 + 45 = 334 байта
Это более функциональный подход с использованием потоков. Если бы существовал метод,
Stream
позволяющий сократить количество элементов, которые появляются один раз, это решение было бы лучше, чем приведенное выше. Присвойте тому же типу, что и выше.Неуправляемая лямбда
Попробуйте онлайн
источник
Желе , 15 байт
Попробуйте онлайн!
-3 байта благодаря Джонатану Аллану
источник
ċ1
заменить наS
?[1, 2, 1]
для ввода,[[1,2],[1,2,1],[2,1,1]]
пока[1,1]
короче.05AB1E , 15 байтов
Попробуйте онлайн!
источник
Pyth, 14 байт
Попробуй это здесь.
источник