Dos listas A
y B
son congruentes si tienen la misma longitud, y elementos que se comparan igual en A
comparar igual en B
.
En otras palabras, dados dos índices válidos x
y y
:
- Si
A[x] = A[y]
, entoncesB[x] = B[y]
. - Si
A[x] != A[y]
, entoncesB[x] != B[y]
.
Por ejemplo, las listas [1, 2, 1, 4, 5]
y [0, 1, 0, 2, 3]
son congruentes.
La tarea
Dada una lista no vacía de enteros no negativos A
, devuelve una nueva lista de enteros no negativos B
tal que sea congruente con A
, mientras minimiza la suma de los enteros en B
.
Hay potencialmente muchas salidas válidas posibles. Por ejemplo, en la lista [12, 700, 3]
, cualquier permutación de [0, 1, 2]
se consideraría salida válida.
Casos de prueba
Format:
input ->
one possible valid output
[1 2 1 4 5] ->
[0 1 0 2 3] (this is the example given above)
[3 2 2 1 5 7 2] ->
[1 0 0 2 3 4 0]
[8 8 8 8 8] ->
[0 0 0 0 0]
[2] ->
[0]
[8 6 8 4 6 8 2 4 6 8 0 2 4 6 8] ->
[0 1 0 2 1 0 3 2 1 0 4 3 2 1 0]
[14 1] ->
[1 0]
[19 6 4 9 14 17 10 9 6 14 8 14 6 15] ->
[8 0 3 2 1 7 5 2 0 1 4 1 0 6]
[15] ->
[0]
[1 18 4 8 6 19 12 17 6 13 7 6 8 1 6] ->
[1 8 3 2 0 9 5 7 0 6 4 0 2 1 0]
[9 10 11 9 7 11 16 17 11 8 7] ->
[2 4 0 2 1 0 5 6 0 3 1]
[1 3 16 19 14] ->
[0 1 3 4 2]
[18 8] ->
[1 0]
[13 4 9 6] ->
[3 0 2 1]
[16 16 18 6 12 10 4 6] ->
[1 1 5 0 4 3 2 0]
[11 18] ->
[0 1]
[14 18 18 11 9 8 13 3 3 4] ->
[7 1 1 5 4 3 6 0 0 2]
[20 19 1 1 13] ->
[3 2 0 0 1]
[12] ->
[0]
[1 14 20 4 18 15 19] ->
[0 2 6 1 4 3 5]
[13 18 20] ->
[0 1 2]
[9 1 12 2] ->
[2 0 3 1]
[15 11 2 9 10 19 17 10 19 11 16 5 13 2] ->
[7 2 0 5 1 3 9 1 3 2 8 4 6 0]
[5 4 2 2 19 14 18 11 3 12 20 14 2 19 7] ->
[5 4 0 0 2 1 9 7 3 8 10 1 0 2 6]
[9 11 13 13 13 12 17 8 4] ->
[3 4 0 0 0 5 6 2 1]
[10 14 16 17 7 4 3] ->
[3 4 5 6 2 1 0]
[2 4 8 7 8 19 16 11 10 19 4 7 8] ->
[4 1 0 2 0 3 7 6 5 3 1 2 0]
[15 17 20 18 20 13 6 10 4 19 9 15 18 17 5] ->
[0 1 3 2 3 9 6 8 4 10 7 0 2 1 5]
[15 14 4 5 5 5 3 3 19 12 4] ->
[5 4 2 0 0 0 1 1 6 3 2]
[7 12] ->
[0 1]
[18 5 18 2 5 20 8 8] ->
[2 0 2 3 0 4 1 1]
[4 6 10 7 3 1] ->
[2 3 5 4 1 0]
[5] ->
[0]
[6 12 14 18] ->
[0 1 2 3]
[7 15 13 3 4 7 20] ->
[0 4 3 1 2 0 5]
[10 15 19 14] ->
[0 2 3 1]
[14] ->
[0]
[19 10 20 12 17 3 6 16] ->
[6 2 7 3 5 0 1 4]
[9 4 7 18 18 15 3] ->
[4 2 3 0 0 5 1]
[7 4 13 7] ->
[0 1 2 0]
[19 1 10 3 1] ->
[3 0 2 1 0]
[8 14 20 4] ->
[1 2 3 0]
[17 20 18 11 1 15 7 2] ->
[5 7 6 3 0 4 2 1]
[11 4 3 17] ->
[2 1 0 3]
[1 9 15 1 20 8 6] ->
[0 3 4 0 5 2 1]
[16 13 10] ->
[2 1 0]
[17 20 20 12 19 10 19 7 8 5 12 19] ->
[7 2 2 1 0 6 0 4 5 3 1 0]
[18 11] ->
[1 0]
[2 16 7 12 10 18 4 14 14 7 15 4 8 3 14] ->
[3 9 2 7 6 10 1 0 0 2 8 1 5 4 0]
[5 7 2 2 16 14 7 7 18 19 16] ->
[3 0 1 1 2 4 0 0 5 6 2]
[8 6 17 5 10 2 14] ->
[3 2 6 1 4 0 5]
Este es el código de golf , por lo que gana el envío válido más corto (contado en bytes).
code-golf
array-manipulation
Fruta Esolanging
fuente
fuente
Respuestas:
Python 2 ,
6254 bytesPruébalo en línea!
Editar: guardado 8 bytes a través del mapa gracias a Maltysen
fuente
lambda L:map(sorted(set(L),key=L.count)[::-1].index,L)
Pyth -
121110 bytesTest Suite .
fuente
mx_o/QN{Q
.Japt , 11 bytes
¡Pruébalo en línea!
Explicación
fuente
J , 11 bytes
Pruébalo en línea!
Explicación
fuente
Röda , 55 bytes
Pruébalo en línea!
fuente
Haskell ,
939185 bytesPruébalo en línea!
EDITAR: ¡Gracias a @Laikoni por sacar 6 bytes!
No muy corto pero no se me ocurre nada más. La idea es iterar sobre la matriz (
x<-a
) y realizar una búsqueda en una lista de tuplas ((i,y:_)<-
...,x==y
) que asigna un número entero no negativo a cada elemento único en la entrada según lo común que sea. Esa lista de tuplas se genera primerosort
ingresando la entrada,group
incorporándola en sublistas de elementos iguales, clasificando esa lista por la longitud de las sublistas (sortOn((0-).length)
; la longitud se niega para ordenar en orden "descendente"), luego finalmente comprimirla con una lista infinita incrementando de 0. patrón de uso a juego para extraer el elemento Fromm real la sublista eny
.fuente
(i,y:_)
y soltar lahead<$>
parte y reemplazar el paréntesis por$
.Mathematica, 94 bytes
Pruébalo en línea!
fuente
CJam,
1714 bytes-3 bytes gracias a Peter Taylor
Esta es una versión de golf del programa que utilicé para generar los casos de prueba.
Este es un bloque anónimo que espera entrada como una matriz en la parte superior de la pila y genera una matriz en la parte superior de la pila.
Explicación:
fuente
$W%
.TI-BASIC, 66 bytes
Explicación
fuente
Perl 5 , 77 + 1 (-a) = 78 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 91 bytes
Usando una lista de valores únicos, ordenados por frecuencia.
Prueba
fuente
PHP , 92 bytes
Pruébalo en línea!
fuente
R , 58 bytes
Pruébalo en línea!
La respuesta de Python del puerto de Chas Brown .
table
calcula los recuentos de cada elemento enx
(almacenando los valores como elnames
atributo),order
devuelve una permutación de los índices enz
ymatch
devuelve el índice de la primera coincidencia dex
innames(z)
. Luego resta1
porque los índices R están basados en 1.fuente