El objetivo de este desafío es tomar una serie de enteros positivos y enumerar sus índices, agrupando elementos similares.
Una enumeración sin duplicados se realiza simplemente generando una matriz de pares (value, index)
, por ejemplo, [3, 4, 13, 9, 2]
=> [[3,1],[4,2],[13,3],[9,4],[2,5]]
.
Sin embargo, si un elemento dado aparece por segunda vez, no se le da su propio par, sino que se agrega al grupo de su primera aparición. Si en nuestro ejemplo anterior reemplazamos el 9 con 3, entonces en la salida eliminaríamos [9,4]
y reemplazaríamos [3,1]
con [3,1,4]
.
En la salida, los grupos deben ordenarse por su primera aparición, y los índices deben estar en orden ascendente. El elemento debe estar primero en un grupo, antes de sus índices. La salida puede ser 0 o 1 indexada. Puede suponer que la matriz tiene al menos un elemento.
Casos de prueba:
Input | Output (One-indexed)
[3, 2, 2, 3] | [[3, 1, 4], [2, 2, 3]]
[17] | [[17, 1]]
[1, 1] | [[1, 1, 2]]
[1, 1, 2] | [[1, 1, 2], [2, 3]]
[1, 2, 3, 4] | [[1, 1], [2, 2], [3, 3], [4, 4]]
[1, 1, 1, 1] | [[1, 1, 2, 3, 4]]
Este es el código de golf , ¡la menor cantidad de bytes gana!
[[17,"1"]]
? (¡Aún no sé si puedo guardar los bytes de esa manera, aún trabajando en ello!)[[3, [1, 4]], [2, [2, 3]]]
lugar?Respuestas:
Dyalog APL, 5 bytes
Pruébalo en línea!
,⌸
para 2 bytes casi funciona, pero tiene ceros al final: /fuente
⌸
?,⌸
es ceros finales, y los ceros nunca estarán en la entrada, ¿sería posible eliminar todos los ceros en menos de 3 bytes?J , 12 bytes
Indexado a cero.
Pruébalo en línea!
Si puede eliminar todo el trabajo que estoy haciendo con las cajas, probablemente pueda reducir bastante el bytecount. Voy a ver si puedo resolver eso.
Explicación
Probablemente sea demasiado pronto para explicarlo (debería haber más campos de golf).
fuente
05AB1E , 10 bytes
Pruébalo en línea!
Explicación
fuente
Pitón 3 ,
8382 bytes-1 byte gracias a Mego
Pruébalo en línea!
fuente
j+1
->j
(los índices pueden estar indexados a cero)Haskell , 48 bytes
Pruébalo en línea!
fuente
Adjunto , 15 bytes
Pruébalo en línea!
Este es un caso interesante de
=>
la forma del operador deMap
. Cuando se administra dos argumentos funcionalesf
yg
,Map
devuelve una funciónf => g[x]
másx
. Es decir, el RHS se aplica a la entrada, luego se asigna el LHS.El builtin
Positions
genera una matriz que representa la agrupación de entradas por índices. Por defecto, cuando no se le proporciona un segundo argumento,Positions
utilizará el primer argumento.Flat
luego se asigna sobre cada elemento, ya que eso es lo que requiere la pregunta.Soluciones alternativas
31 bytes
Pruébalo en línea!
Una alternativa bastante corta, sin construcción.
MapArgs
es una función comoMap
, excepto que puede alimentar argumentos adicionales en ella. Por ejemplo,MapArgs[{_1 + _2}, 1..3, 3]
es[4, 5, 6]
. Al igualMap
, se convierte en curry cuando se le proporcionan dos argumentos funcionales. La función que se mapeará esConcat#~Indices
, que es una bifurcación. Esta bifurcación se aplica a losUnique
elementos de la entrada y a la entrada misma. Esto se traduce enConcat[_, Indices[_2, _]]
(con los argumentos deIndices
swapped through~
), que empareja el elemento que se está mapeando (_
) con los índices de dicho elemento_
en la matriz de entrada, que es_2
(como ffed throughMapArgs
).43 bytes
Pruébalo en línea!
Esta es realmente una combinación más detallada (aunque un poco más legible) de las soluciones n. ° 1 y n. ° 2.
fuente
Jalea , 6 bytes
Pruébalo en línea!
Explicación:
fuente
Pyth , 7 bytes
0 indexado.
Pruébalo aquí! Alternativa.
¿Cómo?
fuente
MATL , 8 bytes
Pruébalo en MATL Online
Explicación
fuente
&f
pero nunca lo hice funcionar.En realidad , 24 bytes
Pruébalo en línea!
Explicación:
fuente
R , 56 bytes
Pruébalo en línea!
Este es mi primer intento de codegolf, por lo que cualquier comentario es bienvenido.
fuente
x
, pero tiene que haber una forma de leer la entrada, generalmente usamosscan
o definimos una función. Además, tiene que salir, por lo que tendría que envolver esto en aprint
o acat
.Wolfram Language (Mathematica) , 40 bytes
Salvó un byte gracias a Martin Ender.
Pruébalo en línea!
fuente
@*PositionIndex
funciona@*
es composición de funciones.PositionIndex
básicamente hace todo el trabajo, pero devuelve una asociación en lugar de una lista.{#,##&@@#2}&
Guarda un byte.JavaScript (ES6), 64 bytes
0 indexado
Tenga en cuenta que esto supone que los números de entrada son positivos, entonces v> 0
Prueba ligeramente modificada (1 indexada) para que coincida con los casos de prueba
fuente
NARS APL, 24 bytes, 12 caracteres
-4 bytes gracias a la prueba de Adam:
fuente
{∪⍵,¨⍸¨⍵=⊂⍵}
SWI-Prolog ,
165117bytes-48 bytes gracias a los consejos de golf Prolog .
Pruébalo en línea!
Explicación
fuente
K (oK) , 10 bytes
Solución:
Pruébalo en línea!
Ejemplos:
Explicación:
La evaluación se realiza de derecha a izquierda. Todavía creo que esto es más apto para el golf ...
Notas:
x
,(,/)'+(!;.)@'=
abandonó este enfoque ...fuente
1+
.Julia 0.6 , 37 bytes
Gracias a Pavel por 1 byte de descuento.
Pruébalo en línea!
fuente
]
yfor
para -1 byte.JavaScript (ES6), 68 bytes
0 indexado.
Casos de prueba
Mostrar fragmento de código
fuente
PHP 4.1, 88 bytes
Si, es bastante largo.
Esto supone un valor predeterminado
php.ini
archivo (short_open_tag = On
yregister_globals = On
).Esto presenta la matriz de una manera legible para los humanos.
Los valores se pueden pasar por POST, GET y COOKIE, dentro de la clave "A".
Para una versión moderna, uno puede usar (90 bytes):
El resultado es el mismo, excepto que todos los valores deben pasarse sobre los parámetros GET dentro de la clave "A".
fuente
Perl 6 ,
6361 bytesPruébelo (basado en 0)
Pruébalo (mismo algoritmo basado en 0)
Expandido:
fuente
Japt ,
149 bytes0 indexado.
Intentalo
fuente
PHP 7.4+ , 71 bytes
* 73 bytes para citar la
$_GET
clave y evitar advertencias.Fragmento: ( Demo )
Según el representante, supongo que IsmaelMiguel conoce la mejor manera de publicar código php en esta comunidad, así que estoy construyendo desde su fundación . No me queda claro si
<?
se debe incluir / contar en mi fragmento . Como esta es mi primera publicación, me alegra que alguien me explique si hay una sintaxis innecesaria. ps También leí Consejos para jugar al golf en PHP, que me parece un excelente candidato para la migración a Meta .Las mejoras realizadas al fragmento de Ismael son:
array_values()
reindexar la salida.fuente
Limpio ,
6160 bytesPruébalo en línea!
La salida está indexada a 0
fuente
Kotlin , 83 bytes
Embellecido
Prueba
TIO
TryItOnline
fuente
i
esté predefinida. Puede hacer esto válido convirtiéndolo en una lambda que tome un parámetroi
.Swift 4, 107 bytes
... Dios mío.
Sin golf:
Es una pena que el diccionario pierda el orden, lo que me obliga a desperdiciar tantos caracteres en la clasificación de nuevo. Este tipo de abuso de los argumentos de cierre implícitos (
$0
,$1
, ...) y los miembros de tupla implícitos (.0
,.1
, ...) es uhhhhh no es bonito.fuente
Perl 5 , 63 + 1 (
-a
) = 64 bytesPruébalo en línea!
fuente
Ruby ,
5452 bytesEsta versión permite nil (53 bytes):
Pruébalo en línea!
fuente
nil
No es un entero positivo.