Introducción:
Colecciono rompecabezas retorcidos. La mayoría de los rompecabezas retorcidos son producidos y vendidos por compañías chinas. La mayoría de las compañías conocidas solicitan permiso de los diseñadores de rompecabezas para producir sus diseños y trabajar juntos para lograr un producto en el mercado. En este caso, los diseñadores de rompecabezas están muy contentos y orgullosos de que uno de sus rompecabezas llegue al mercado.
Sin embargo, también hay empresas chinas que hacen rompecabezas. Estas imitaciones son diseños utilizados sin el permiso del creador original, o son copias de menor calidad de rompecabezas ya existentes.
Desafío:
Vamos a determinar la originalidad de los números que se 'liberan' en un orden específico (de izquierda a derecha † ).
Dada una lista de enteros, agrúpelos y expórtelos por su originalidad.
¿Cómo se determina la originalidad de los números?
- ¿Es un número un duplicado exacto de un número anterior? Grupo (menos original), donde el grupo está detrás, después de todos los otros grupos.
- ¿Es un número un duplicado de un número anterior, pero es negativo en su lugar (es decir, el número original era , pero ahora ; o viceversa)? Grupo .
- ¿Se puede formar el valor absoluto del número concatenando uno o más números absolutos anteriores, y no forma parte de los grupos o mencionados anteriormente ? Grupo , donde es la cantidad de números distintos utilizados en la concatenación (y ).
- ¿El número no cabe en ninguno de los grupos anteriores, por lo que es completamente único hasta ahora? Grupo (el más original), que lidera antes que todos los demás grupos.
Esto puede sonar bastante vago, así que aquí hay un ejemplo paso a paso :
Lista de entrada: [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
34
es el primer número, que siempre es original y en el grupo . Salida hasta ahora:[[34]]
9
también es original:[[34,9]]
4
también es original:[[34,9,4]]
-34
es el negativo del número anterior34
, por lo que está en el grupo :[[34,9,4],[-34]]
19
es original:[[34,9,4,19],[-34]]
-199
puede estar formado por los dos números anteriores19
y9
, por lo tanto, está en el grupo :[[34,9,4,19],[-199],[-34]]
34
es una copia exacta de un número anterior, por lo que está en el grupo :[[34,9,4,19],[-199],[-34],[34]]
-213
es original:[[34,9,4,19,-213],[-199],[-34],[34]]
94
puede estar formado por los dos números anteriores9
y4
, por lo tanto, está en el grupo :[[34,9,4,19,-213],[-199,94],[-34],[34]]
1934499
puede estar formado por los cuatro números anteriores19
,34
,4
, y dos veces9
, por lo que es en el grupo :[[34,9,4,19,-213],[19499],[-199,94],[-34],[34]]
213
es el negativo del número anterior-213
, por lo que está en el grupo :[[34,9,4,19,-213],[1934499],[-199,94],[-34,213],[34]]
3
es original:[[34,9,4,19,-213,3],[1934499],[-199,94],[-34,213],[34]]
21
es original:[[34,9,4,19,-213,3,21],[1934499],[-199,94],[-34,213],[34]]
-2134
puede estar formado por los dos números anteriores213
y4
(o los tres números anteriores21
,3
y4
, pero siempre utilizamos la menor cantidad de la concatenación de números para determinar la originalidad), por lo que es en el grupo :[[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]]
Entonces, para la entrada, [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
la salida es [[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
.
Reglas de desafío:
- I / O es flexible. Puede ingresar como una lista / matriz / secuencia de enteros o cadenas, ingresarlos uno por uno a través de STDIN, etc. La salida puede ser un mapa con los grupos como clave, una lista anidada como ejemplo y casos de prueba en este desafío, impresos nueva línea separada, etc.
- Se le permite tomar la lista de entrada en orden inverso (tal vez útil para idiomas basados en pila). † En cuyo caso, el mencionado de izquierda a derecha es, por supuesto, de derecha a izquierda.
- Como se puede ver en el ejemplo de número entero
-2134
, siempre agrupar un número que es una concatenación de otros números con el menor número posible (formado por213
y4
- dos números; y no por21
,3
y4
- tres números). - Como puede ver en el ejemplo de entero
1934499
, puede usar un número anterior (el9
en este caso) varias veces (similar al44449
uso de cuatro4
sy a9
en el ejemplo). Sin embargo, solo se cuentan una vez para determinar el grupo. [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]
- Puede suponer que los enteros serán de 32 bits como máximo, por lo que están dentro del rango
[−2147483648,2147483647]
.
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Las reglas estándar se aplican a su respuesta con las reglas de E / S predeterminadas , por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código (es decir, TIO ).
- Además, se recomienda agregar una explicación para su respuesta.
Casos de prueba:
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
es un grupo especial para copias exactas, yX
es un grupo para otros números que se pueden formar a partir de copias de un solo número, como su negación?