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]]
fuente
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?[1, 1111111111]
Respuestas:
Gelatina ,
3633 bytesPruébalo en línea!
Estoy seguro de que esto se puede jugar más al golf. Un poco de inspiración tomada de la respuesta 05AB1E de Grimy , ¡así que asegúrese de votar esa también!
fuente
Python 3 ,
565564524523500437399394393389385372 bytesImplementación de fuerza bruta usando
itertools
; no todos los casos de prueba se ejecutan dentro del límite de 60 segundos en TIO.Pruébalo en línea!
Gracias a ArBo por jugar 101 bytes, a Galen Ivanov por jugar 19 bytes, a ElPedro por jugar 5 bytes, a movatica por jugar 17 bytes, a Black Owl Kai por jugar 2 bytes, a los calamares por jugar 2 bytes y a Kevin Cruijssen por Golf 1 byte.
Explicación:
Python 2 ,
406379374373372368355 bytesEl mismo enfoque, pero más corto debido a algunos trucos de golf, Python 3 ya no es compatible. Gracias a ArBo por el backport y por jugar al golf 28 bytes, a ElPedro por jugar al golf 5 bytes, a movatica por jugar al golf 17 bytes y al calamar por jugar al golf 1 byte más.
Pruébalo en línea!
fuente
str(abs(x))
(o abs (x) con backticks en Python 2) a la llamada a la función y cambiando x en la definición de la función a y eliminando y = str (abs (x)). Lo siento, no puedo hacer que TIO funcione en este momento.len
para eliminar otro byte, ¿verdad?any()
llamadas, lo que lo convierte en un generador normal, que funciona igual de bien y le ahorra 4 bytes más :)(x in sum(l,[]))
lugar deany(x in s for s in l)
para ambosx
y-x
ahorra 13 bytes más!Python 2 ,
235234232246245244241240238237236 bytesPruébalo en línea!
-1 byte gracias al comentario de Squid sobre la otra respuesta de Python
Esta respuesta no tiene esperanzas de resolver ninguno de los casos de prueba más triviales. En el enlace TIO,
s*11
ha sido sustituido pors*2
, sacrificando en algunos casos la corrección rápida para er tiempo de ejecución, pero por lo que puedo ver, la versión en este post siempre se obtiene la respuesta correcta, en teoría.Explicación
fuente
int
incluso en la versión de 64 bits).05AB1E ,
4341383527 bytesPruébalo en línea!
Explicación:
Dado que los números de grupo no son parte de la salida, somos libres de usar los números que queramos, siempre y cuando el orden sea correcto. Utiliza 0 para los números originales, 2 ^ -N para el grupo XN, 1 para el grupo X, 2 para el grupo X + 1.
fuente
Python 2, 195 bytes
El caso de prueba más lento no puede completarse en TIO , pero solo toma alrededor de 10 segundos en mi máquina.
Se puede acortar en 2 bytes en las compilaciones LP64 Python reemplazándolas
'%s-%%s'%a%n
por`a`+'-'+`n`
.fuente
JavaScript (Node.js) ,
211205 bytesPruébalo en línea!
Usando el supuesto de que hay como máximo 12 grupos.
JavaScript (Node.js) ,
267226221218211 bytesPruébalo en línea!
... o 193 bytes si devolver un diccionario está bien:
Pruébalo en línea!
En este caso, clave
-Infinity
significa Grupo 1 y otras claves significa GrupoX+key
.fuente