Вступление:
Я собираю извилистые головоломки. Большинство извилистых головоломок производятся и продаются китайскими компаниями. Большинство известных компаний запрашивают разрешение у разработчиков пазлов на разработку своих проектов и совместную работу над созданием продукта на рынке. В этом случае дизайнеры головоломок, конечно же, очень счастливы и горды тем, что одна из их головоломок появилась на рынке.
Есть, однако, и китайские компании, которые выпускают загадочные пазлы. Эти подделки являются либо дизайнами, использованными без разрешения оригинального создателя, либо просто более дешевыми копиями уже низкого качества уже существующих головоломок.
Вызов:
Мы собираемся определить оригинальность чисел, которые «выпущены» в определенном порядке (слева направо † ).
Дайте список целых чисел, сгруппируйте и выведите их по оригинальности.
Как определяется оригинальность номеров?
- Является ли число точной копией более раннего числа? Группа (наименее оригинальная), где группа идет за всеми остальными группами.
- Является ли число дубликатом более раннего числа, но вместо этого оно отрицательное (т. Е. Исходное число было , а теперь или наоборот)? Группа .
- Можно ли сформировать абсолютное значение числа путем объединения одного или нескольких более ранних абсолютных чисел, и не является ли оно частью ранее упомянутых групп или ? Группа , где - количество различных чисел, используемых в конкатенации (и ).
- Разве число не подходит ни к одной из вышеперечисленных групп, поэтому пока оно полностью уникально? Группа (самая оригинальная), которая опережает все остальные группы.
Это может звучать довольно расплывчато, так что пошаговый пример :
Ввод-лист: [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]]
источник
X + 1
является ли специальная группа для точных копий, иX
является ли группа для других чисел, которые могут быть сформированы из копий одного числа, например его отрицания?[1, 1111111111]
возможен.Ответы:
Желе ,
3633 байтаПопробуйте онлайн!
Я уверен, что это может быть в гольфе больше. Некоторое вдохновение было взято из ответа 05AB1E Грими , так что не забудьте высказать это тоже!
источник
Python 3 ,
565564524523500437399394393389385372 байтИспользование грубой силы
itertools
; не все тестовые случаи выполняются в течение 60 секунд на TIO.Попробуйте онлайн!
Спасибо ArBo за игру в гольф 101 байт, Галену Иванову за игру в гольф 19 байтов, ElPedro за игру в гольф 5 байтов, movatica для игры в гольф 17 байтов, Black Owl Kai за игру в гольф 2 байта, кальмару за игру в гольф 2 байта и Кевину Круйссену за игра в гольф 1 байт.
Объяснение:
Python 2 ,
406379374373372368355 байтТот же подход, но короче из-за некоторых уловок игры в гольф, Python 3 больше не поддерживает. Спасибо ArBo за бэкпорт и гольф 28 байтов, ElPedro за гольф 5 байтов, movatica за гольф 17 байтов и кальмарам за гольф еще 1 байт.
Попробуйте онлайн!
источник
str(abs(x))
(или abs (x) с обратными галочками в Python 2) к вызову функции и изменив x в определении функции на y, удалив y = str (abs (x)). Извините, не могу заставить TIO работать в данный момент.len
чтобы сбрить другой байт, верно?any()
вызовов, что делает его обычным генератором, который работает так же хорошо и экономит вам еще 4 байта :)(x in sum(l,[]))
вместо того,any(x in s for s in l)
чтобы и то,x
и другое-x
экономит еще 13 байтов!Python 2 ,
235234232246245244241240238237236 байтПопробуйте онлайн!
-1 байт благодаря комментарию Squid к другому ответу Python
Этот ответ не имеет надежды на решение каких-либо, кроме самых тривиальных тестовых случаев. В связи TIO,
s*11
было замененоs*2
, жертвуя правильность в некоторых случаях для быстрого эр времени выполнения, но, насколько я могу видеть, версия в этом посте всегда дает правильный ответ, в теории.объяснение
источник
int
даже в 64-битной версии).05AB1E ,
4341383527 байтовПопробуйте онлайн!
Объяснение:
Так как номера групп не являются частью вывода, мы можем использовать любые числа, которые захотим, если порядок правильный. При этом используются 0 для исходных чисел, 2 ^ -N для группы XN, 1 для группы X, 2 для группы X + 1.
источник
Python 2, 195 байт
Самый медленный тестовый пример не может быть выполнен на TIO , но на моей машине он занимает всего около 10 секунд.
Его можно сократить на 2 байта в сборках Python LP64, заменив
'%s-%%s'%a%n
на`a`+'-'+`n`
.источник
JavaScript (Node.js) ,
211205 байтПопробуйте онлайн!
Используя предположение, что существует не более 12 групп.
JavaScript (Node.js) ,
267226221218211 байтПопробуйте онлайн!
... или 193 байта, если возвращение словаря в порядке:
Попробуйте онлайн!
В этом случае ключ
-Infinity
означает Группу 1, а другие ключи означает ГруппуX+key
.источник