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 funcionalesfyg,Mapdevuelve una funciónf => g[x]másx. Es decir, el RHS se aplica a la entrada, luego se asigna el LHS.El builtin
Positionsgenera una matriz que representa la agrupación de entradas por índices. Por defecto, cuando no se le proporciona un segundo argumento,Positionsutilizará el primer argumento.Flatluego 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.
MapArgses 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 losUniqueelementos de la entrada y a la entrada misma. Esto se traduce enConcat[_, Indices[_2, _]](con los argumentos deIndicesswapped 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?
{+ VQxRQ - Programa completo. RQ - Para cada elemento ... x - Obtenga todos sus índices. + V - Y aplica la concatenación vectorizada. Q - Con la entrada. {- Deduplicar.fuente
MATL , 8 bytes
Pruébalo en MATL Online
Explicación
fuente
&fpero 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 usamosscano definimos una función. Además, tiene que salir, por lo que tendría que envolver esto en aprinto acat.Wolfram Language (Mathematica) , 40 bytes
Salvó un byte gracias a Martin Ender.
Pruébalo en línea!
fuente
@*PositionIndexfunciona@*es composición de funciones.PositionIndexbá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
]yforpara -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.iniarchivo (short_open_tag = Onyregister_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
$_GETclave 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
iesté 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
nilNo es un entero positivo.