Sea una lista de enteros positivos sin un orden particular, y que puede contener duplicados. Escriba un programa o función que genere una lista de enteros positivos M (cuyo orden no es importante) de modo que la fusión de L y M dé como resultado la lista más pequeña que puede dividirse por completo en rangos idénticos de enteros [ 1 .. i ] , donde i es el elemento más grande en L
Ejemplo
Dejar L = [5,3,3,2,7]
. El elemento máximo de L
es 7
. La mayoría de las veces que ocurre un número entero específico es 2
( 3
aparece 2 veces). Por lo tanto, necesitamos generar la lista M
que permitirá completar L
para poder construir 2
rangos de enteros desde 1
hasta 7
.
Por lo tanto, necesitamos salida M = [1,1,2,4,4,5,6,6,7]
, para que cada número entero de 1
a 7
aparezca 2
veces.
Entradas y salidas
- Use cualquier cosa en su idioma que sea similar a las listas. La estructura de datos utilizada para la entrada y la salida debe ser la misma.
- La lista de entrada contendrá solo enteros positivos.
- La lista de entrada no estará vacía.
- No puede asumir que la lista de entrada está ordenada.
- El orden en la lista de salida no es importante.
Casos de prueba
Input Output
[1] []
[7] [1, 2, 3, 4, 5, 6]
[1, 1, 1] []
[1, 8] [2, 3, 4, 5, 6, 7]
[3, 3, 3, 3] [1, 1, 1, 1, 2, 2, 2, 2]
[5, 2, 4, 5, 2] [1, 1, 3, 3, 4]
[5, 2, 4, 5, 5] [1, 1, 1, 2, 2, 3, 3, 3, 4, 4]
[5, 3, 3, 2, 7] [1, 1, 2, 4, 4, 5, 6, 6, 7]
Puntuación
Este es el código de golf , por lo que gana la respuesta más corta en bytes.
fuente
i
el elemento más importante deL
oM
?i
es el elemento más importante deL
, fue un error tipográfico en las especificaciones.M=[1,1,2,2,3]
aL=[3]
mientras que "la fusión de L y M resultados en una lista que en su totalidad se puede dividir en rangos de números enteros idénticos [1..i]"?[1,2]
. Lo aclararé para que quede claro que debería dar como resultado el número mínimo de rangos.Respuestas:
Jalea , 9 bytes
Guardado 1 byte gracias a Jonathan Allan . El pie de página llama al enlace principal, ordena el resultado para que coincida con los casos de prueba y formatea la salida como una cuadrícula.
Pruébalo en línea! o echa un vistazo a una suite de prueba!
Alternativas
¡Prueba uno de ellos en línea!
Explicación
fuente
Perl 6 ,
3733 bytes-4 bytes gracias a nwellnhof!
Pruébalo en línea!
Bloque de código anónimo que toma una bolsa y devuelve una bolsa de valores.
Explicación:
fuente
{^.max+1 xx.Bag.values.max∖.Bag}
{^.keys.max+1 xx.values.max∖$_}
guarda otro byte.R ,
594948 bytesPruébalo en línea!
fuente
rep
diferente, pero por lo demás es el mismo que el tuyo. Podría publicarlo yo mismo, pero no creo que lo hubiera pensado a menos que hubiera visto el tuyo primero. ¡Te reto a que lo encuentres!split
perotabulate
es mucho mejor!x=max(L<-scan());rep(1:x,1:x-lengths(split(L,c(L,1:x))))
que después de más pruebas no funciona para casos de prueba como7
...Python 2 ,
86838072 bytesPruébalo en línea!
fuente
05AB1E ,
171617 bytes-1 byte gracias a @ Mr.Xcoder .
+1 byte después de la corrección de errores de la solución temporal ...
Tal vez miro completamente más allá, pero 05AB1E incluso tiene una eliminación de todos los elementos de la lista b de la lista a ... (EDITAR: De hecho no ...) Sé cómo eliminar todas las veces múltiples, pero no una vez cada una ... (diferencia de varios conjuntos)
Definitivamente se puede jugar al golf. No estoy muy contento con eso, tbh ... Veré
si puedo jugar un poco más antes de agregar una explicación.EDITAR: Se agregó una explicación.Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
K a,b Push a without b's
:? Oh, espera, "una vez cada uno" ... hmm[1,2,3,4,5,6,7,1,2,3,4,5,6,7]
y[5,3,3,2,7]
conK
resultados[1,4,6,1,4,6]
desafortunadamente. Elimina todos los elementos en lugar de hacer una diferencia de múltiples conjuntos.¢ZIZLŠŠи
debería guardar 1 byteR ,
5955 bytesUsando el
vecsets
paquete podemos reducir la longitud de la respuesta. Congl
podemos obtener la salida ordenada. Esto no funciona en TIO. Siguiendo el estilo de @ digEmAll de solución (bastante inteligente) sin una definición de función, esto puede considerarse una solución de 55 bytes.fuente
f(c(5,3,3,2,7))
JavaScript (ES6), 98 bytes
Esto resultó ser bastante difícil de jugar por debajo de los 100 bytes. Puede haber un mejor enfoque.
Pruébalo en línea!
¿Cómo?
Primero recorremos la matriz de entrada
a[]
para recopilar los siguientes datos:M
= elemento más alto encontrado en la matriz de entradam
= mayor número de ocurrencias del mismo elementoo[n]
= número de ocurrencias den
Tenga en cuenta que
o
se define principalmente como una función, pero el objeto subyacente también se utiliza para almacenar el número de ocurrencias.Luego usamos la función recursiva
g()
para construir la salida.fuente
Haskell, 72 bytes
Pruébalo en línea!
fuente
Brachylog ,
1817 bytesPruébalo en línea!
Guardado 1 byte gracias a @Kroppeb.
Explicación
fuente
⌉
lugar deot
Java 10, 186 bytes
Pruébalo en línea.
Explicación:
fuente
Casco , 12 bytes
Guardado 1 byte gracias a BWO .
Pruébalo en línea!
fuente
MATL ,
2421 bytesPruébalo en línea!
fuente
MATL , 14 bytes
La entrada es un vector de columna, con un
;
separador.Pruébalo en línea! O verifique todos los casos de prueba (esto se muestra
--
después de cada salida para poder identificar la salida vacía).Explicación
Considere la entrada
[5; 2; 4; 5; 5]
como un ejemplo.fuente
Pyth , 13 bytes
Pruébalo aquí! o echa un vistazo a una suite de prueba!
fuente
Carbón de leña , 19 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Hubiera sido de 16 bytes si los enteros hubieran sido no negativos en lugar de positivos. Explicación:
fuente
APL (Dyalog Classic) ,
1817 bytesPruébalo en línea!
usos
⎕io←1
fuente
Prólogo (SWI) , 211 bytes
Ha pasado un tiempo desde que programé en Prolog. Definitivamente se puede jugar más golf, pero tengo un examen para estudiar jajaja.
Código
Pruébalo en línea!
Versión sin golf
fuente
Clojure, 94 bytes
fuente
C ++, 234 bytes
(Las nuevas líneas en el cuerpo de la función son para facilitar la lectura).
La función toma y devuelve un vector de entradas. Utiliza
std::map
para encontrar el elemento máximo de la lista de entrada y también para contar las ocurrencias de cada elemento distinto.Explicación:
fuente
Gaia , 12 bytes
Pruébalo en línea!
fuente
C (gcc) , 177 bytes
La entrada y salida se realizan a través de stdin y stdout. Ambas matrices tienen un límite de 2 ^ 15 elementos, pero podrían ser tan grandes como 2 ^ 99 elementos.
Con algo de formato:
Pruébalo en línea!
fuente