Вступление:
Я собираю извилистые головоломки. Большинство извилистых головоломок производятся и продаются китайскими компаниями. Большинство известных компаний запрашивают разрешение у разработчиков пазлов на разработку своих проектов и совместную работу над созданием продукта на рынке. В этом случае дизайнеры головоломок, конечно же, очень счастливы и горды тем, что одна из их головоломок появилась на рынке.
Есть, однако, и китайские компании, которые выпускают загадочные пазлы. Эти подделки являются либо дизайнами, использованными без разрешения оригинального создателя, либо просто более дешевыми копиями уже низкого качества уже существующих головоломок.
Вызов:
Мы собираемся определить оригинальность чисел, которые «выпущены» в определенном порядке (слева направо † ).
Дайте список целых чисел, сгруппируйте и выведите их по оригинальности.
Как определяется оригинальность номеров?
- Является ли число точной копией более раннего числа? Группа (наименее оригинальная), где группа идет за всеми остальными группами.
- Является ли число дубликатом более раннего числа, но вместо этого оно отрицательное (т. Е. Исходное число было , а теперь или наоборот)? Группа .
- Можно ли сформировать абсолютное значение числа путем объединения одного или нескольких более ранних абсолютных чисел, и не является ли оно частью ранее упомянутых групп или ? Группа , где - количество различных чисел, используемых в конкатенации (и ).
- Разве число не подходит ни к одной из вышеперечисленных групп, поэтому пока оно полностью уникально? Группа (самая оригинальная), которая опережает все остальные группы.
Это может звучать довольно расплывчато, так что пошаговый пример :
Ввод-лист: [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
34
это первое число, которое всегда оригинально и в группе . Вывод пока:[[34]]
9
также оригинально:[[34,9]]
4
также оригинально:[[34,9,4]]
-34
является отрицательным от предыдущего числа34
, так что это в группе :[[34,9,4],[-34]]
19
оригинально:[[34,9,4,19],[-34]]
-199
может быть образован двумя предыдущими числами19
и9
, таким образом, это в группе :[[34,9,4,19],[-199],[-34]]
34
является точной копией более раннего числа, поэтому оно находится в группе :[[34,9,4,19],[-199],[-34],[34]]
-213
оригинально:[[34,9,4,19,-213],[-199],[-34],[34]]
94
может быть образован двумя предыдущими числами9
и4
, таким образом, это в группе :[[34,9,4,19,-213],[-199,94],[-34],[34]]
1934499
может быть образован из четырех предыдущих чисел19
,34
,4
и в два раза9
, так что в группе :[[34,9,4,19,-213],[19499],[-199,94],[-34],[34]]
213
является отрицательным от предыдущего числа-213
, так что это в группе :[[34,9,4,19,-213],[1934499],[-199,94],[-34,213],[34]]
3
оригинально:[[34,9,4,19,-213,3],[1934499],[-199,94],[-34,213],[34]]
21
оригинально:[[34,9,4,19,-213,3,21],[1934499],[-199,94],[-34,213],[34]]
-2134
может быть образован двумя более ранними числами213
и4
(или тремя более ранними числами21
,3
и4
, но мы всегда используем наименьшее количество соединяющих чисел для определения оригинальности), так что это в группе :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134],[-34,213],[34]]
44449
может быть образован двумя предыдущими числами четыре раза4
и9
, таким образом, это в группе :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[-34,213],[34]]
44
может быть образован одним более ранним числом4
, повторенным два раза, так что это в группе :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
Таким образом, для ввода [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
вывода есть [[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
.
Правила вызова:
- Ввод / вывод является гибким. Вы можете вводить в виде списка / массива / потока целых чисел или строк, вводить их одну за другой через STDIN и т. Д. Выходными данными могут быть карта с группами в качестве ключа, вложенный список в качестве примера и тестовые примеры в этой задаче, напечатанные перевод строки и т. д.
- Вам разрешено принимать входной список в обратном порядке (возможно, это полезно для стековых языков). † В таком случае упомянутое слева направо, конечно, справа налево.
- Как вы можете видеть на примере для целого числа
-2134
, мы всегда группа число , которое является объединением других чисел как можно (образуемым213
и4
- два числа, а не21
,3
и4
- три числа). - Как вы можете видеть в примере для целого числа
1934499
, вы можете использовать более раннее число (9
в данном случае) несколько раз (аналогично44449
использованию четырех4
s и a9
в примере). Однако они подсчитываются только один раз для определения группы. - Вы не можете иметь пустые внутренние списки в выходных данных для пустых групп. Таким образом, тестовый случай
[1,58,85,-8,5,8585,5885,518]
может не привести к тому[[1,58,85,8,5],[518],[5885],[8585],[],[]]
, что пустыми группами являются и , а приведенный выше пример может не привести к тому[[34,9,4,19,-213,3,21],[1934499],[],[-199,94,-2134,44449],[44],[-34,213],[34]]
, что пустой группой является . - Порядок групп строгий (если только вы не используете карту, поскольку группы затем могут быть вычтены из ключей), но порядок чисел в группе может быть в любом порядке. Таким образом,
[34,9,4,19,-213,3,21]
для группы в приведенном выше примере также может быть[21,3,-213,19,4,9,34]
или[-213,4,34,19,9,21,3]
. - Вам гарантировано, что никогда не будет никаких чисел, которые могут быть сформированы более чем девятью предыдущими числами. Таким образом, у вас никогда не будет никаких групп , а наибольшее количество групп - 12:
- Можно предположить, что целые числа будут максимум 32 бита, поэтому в пределах диапазона
[−2147483648,2147483647]
.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте найти как можно более короткий ответ для «любого» языка программирования. - Стандартные правила применяются к вашему ответу с правилами ввода / вывода по умолчанию , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода (например, TIO ).
- Кроме того, добавление объяснения для вашего ответа настоятельно рекомендуется.
Тестовые случаи:
Input: [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
Output: [[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
Input: [17,21,3,-317,317,2,3,117,14,-4,-232,-43,317]
Output: [[17,21,3,2,117,14,-4],[-317,-232,-43],[317],[3,317]]
Input: [2,4,8,10,12,-12,-102,488,10824]
Output: [[2,4,8,10,12],[10824],[-102,488],[-12]]
Input: [0,100,-100,10000,-100,1001000]
Output: [[0,100],[10000,1001000],[-100],[-100]]
Input: [1,58,85,-8,5,8585,5885,518]
Output: [[1,58,85,-8,5],[518],[5885],[8585]]
Input: [4,-4,44,5,54]
Output: [[4,5],[54],[44],[-4]]
[1, 1111111111]
возможен.
X + 1
является ли специальная группа для точных копий, иX
является ли группа для других чисел, которые могут быть сформированы из копий одного числа, например его отрицания?