L'objectif de ce défi est de prendre un tableau d'entiers positifs et d'énumérer ses indices, en les regroupant comme des éléments.
Une énumération sans doublons se fait en sortant simplement un tableau de paires (value, index)
, par exemple, [3, 4, 13, 9, 2]
=> [[3,1],[4,2],[13,3],[9,4],[2,5]]
.
Cependant, si un élément donné apparaît une deuxième fois, il ne reçoit pas sa propre paire, mais est plutôt ajouté au groupe de sa première occurrence. Si dans notre exemple ci-dessus, nous avons remplacé le 9 par 3, alors dans la sortie, nous supprimerions [9,4]
et remplacerions [3,1]
par [3,1,4]
.
Dans la sortie, les groupes doivent être classés par leur première occurrence et les indices doivent être en ordre croissant. L'élément doit être le premier d'un groupe, avant ses indices. La sortie peut être indexée 0 ou 1. Vous pouvez supposer que le tableau contient au moins un élément.
Cas de test:
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]]
C'est du code-golf , le moins d'octets gagne!
[[17,"1"]]
? (Je ne sais pas encore si je peux enregistrer des octets de cette façon, en travaillant toujours dessus!)[[3, [1, 4]], [2, [2, 3]]]
place?Réponses:
Dyalog APL, 5 octets
Essayez-le en ligne!
,⌸
pour 2 octets fonctionne presque , mais a des zéros de fin: /la source
⌸
?,⌸
des zéros de fin et que les zéros ne seront jamais en entrée, serait-il possible de supprimer tous les zéros en moins de 3 octets?J , 12 octets
Zéro indexé.
Essayez-le en ligne!
Si vous pouvez supprimer tout le travail que je fais avec les boîtes, vous pouvez probablement réduire considérablement le nombre de bytecount. Je vais voir si je peux comprendre cela.
Explication
C'est probablement trop tôt pour l'expliquer (il devrait y avoir plus de golfs).
la source
05AB1E , 10 octets
Essayez-le en ligne!
Explication
la source
Python 3 ,
8382 octets-1 octet grâce à Mego
Essayez-le en ligne!
la source
j+1
->j
(les indices peuvent être indexés à zéro)Haskell , 48 octets
Essayez-le en ligne!
la source
Attaché , 15 octets
Essayez-le en ligne!
Ceci est un cas intéressant de
=>
, la forme opérateur deMap
. Administré deux arguments fonctionnelsf
etg
,Map
renvoie une fonctionf => g[x]
plusx
. Autrement dit, le RHS est appliqué à l'entrée, puis le LHS est mappé.La fonction intégrée
Positions
génère un tableau représentant le regroupement des entrées par index. Par défaut, lorsqu'il n'est pas fourni avec un deuxième argument,Positions
utilise le premier argument.Flat
est ensuite mappé sur chaque élément, car c'est ce que la question requiert.Solutions alternatives
31 octets
Essayez-le en ligne!
Une alternative assez courte et intégrée.
MapArgs
est une fonction commeMap
, sauf que vous pouvez y ajouter des arguments supplémentaires. Par exemple,MapArgs[{_1 + _2}, 1..3, 3]
est[4, 5, 6]
. CommeMap
, il devient curry lorsqu'il est fourni avec deux arguments fonctionnels. La fonction à mapper estConcat#~Indices
, qui est une fourchette. Cette fourchette est appliquée auxUnique
éléments de l'entrée et à l'entrée elle-même. Cela se traduit parConcat[_, Indices[_2, _]]
(avec les arguments deIndices
swapped through~
), qui associe l'élément en cours de mappage (_
) avec les indices dudit élément_
dans le tableau d'entrée, qui est_2
(tel que ffed throughMapArgs
).43 octets
Essayez-le en ligne!
C'est vraiment juste une combinaison plus verbeuse (mais un peu plus lisible) des solutions # 1 et # 2.
la source
Gelée , 6 octets
Essayez-le en ligne!
Explication:
la source
Pyth , 7 octets
0 indexé.
Essayez-le ici! Alternative.
Comment?
la source
MATL , 8 octets
Essayez-le sur MATL Online
Explication
la source
&f
mais je ne l'ai jamais fait fonctionner.En fait , 24 octets
Essayez-le en ligne!
Explication:
la source
R , 56 octets
Essayez-le en ligne!
Ceci est ma première tentative de codegolf, donc tout commentaire est le bienvenu!
la source
x
, mais il doit y avoir un moyen de lire l'entrée - généralement, nous utilisonsscan
ou définissons une fonction. De plus, il doit sortir, donc il faudrait envelopper cela dans unprint
ou uncat
.Wolfram Language (Mathematica) , 40 octets
Un octet enregistré grâce à Martin Ender.
Essayez-le en ligne!
la source
@*PositionIndex
marche?@*
est la composition des fonctions.PositionIndex
fait essentiellement tout le travail, mais renvoie une association au lieu d'une liste.{#,##&@@#2}&
enregistre un octet.JavaScript (ES6), 64 octets
0 indexé
Notez que cela suppose que les nombres d'entrée sont positifs, donc v> 0
Test légèrement modifié (1 indexé) pour correspondre aux cas de test
la source
APL NARS, 24 octets, 12 caractères
-4 octets grâce au test Adam:
la source
{∪⍵,¨⍸¨⍵=⊂⍵}
SWI-Prolog ,
165117octets-48 octets grâce aux conseils de golf Prolog .
Essayez-le en ligne!
Explication
la source
K (oK) , 10 octets
Solution:
Essayez-le en ligne!
Exemples:
Explication:
L'évaluation se fait de droite à gauche. Je pense toujours que c'est plus pratique pour le golf ...
Remarques:
x
,(,/)'+(!;.)@'=
, a renoncé à cette approche ...la source
1+
.Julia 0,6 , 37 octets
Merci à Pavel pour 1 octet de moins.
Essayez-le en ligne!
la source
]
etfor
pour -1 octet.JavaScript (ES6), 68 octets
0 indexé.
Cas de test
Afficher l'extrait de code
la source
PHP 4.1, 88 octets
Ouais, c'est assez long.
Cela suppose un fichier par défaut
php.ini
(short_open_tag = On
etregister_globals = On
).Cela présente le tableau d'une manière lisible par l'homme.
Les valeurs peuvent être passées par POST, GET et COOKIE, à l'intérieur de la clé "A".
Pour une version moderne, on peut utiliser (90 octets):
Le résultat est le même, sauf que toutes les valeurs doivent être passées sur les paramètres GET à l'intérieur de la clé "A".
la source
Perl 6 ,
6361 octetsTestez-le (basé sur 0)
Testez-le (même algorithme basé sur 0)
Étendu:
la source
Japt ,
149 octets0 indexé.
Essayez-le
la source
PHP 7.4+ , 71 octets
* 73 octets pour citer la
$_GET
clé et éviter les avertissements.Extrait: ( Démo )
Basé sur le représentant, je suppose qu'IsmaelMiguel connaît la meilleure façon de publier du code php dans cette communauté, donc je construis à partir de sa fondation . Il n'est pas clair pour moi s'il
<?
doit être inclus / compté dans mon extrait de code . Comme c'est mon premier billet, je suis heureux que quiconque explique s'il y a une syntaxe inutile. ps J'ai également lu des conseils pour jouer au golf en PHP qui me semble être un excellent candidat pour la migration vers Meta .Les améliorations apportées à l'extrait d'Ismael sont les suivantes:
array_values()
réindexer la sortie.la source
Nettoyer ,
6160 octetsEssayez-le en ligne!
La sortie est indexée 0
la source
Kotlin , 83 octets
Embellie
Tester
TIO
TryItOnline
la source
i
soit prédéfinie. Vous pouvez le rendre valide en le convertissant en un lambda qui prend un paramètrei
.Swift 4, 107 octets
... Ouais.
Non golfé:
Il est dommage que le dictionnaire ne soit plus ordonné, ce qui m'oblige à gaspiller autant de caractères lors d'un nouveau tri. Ce genre d'abus d'arguments implicites de fermeture (
$0
,$1
...) et les membres de tuple implicites (.0
,.1
...) est uhhhhh pas joli.la source
Perl 5 , 63 + 1 (
-a
) = 64 octetsEssayez-le en ligne!
la source
Rubis ,
5452 octetsCette version autorise nil (53 octets):
Essayez-le en ligne!
la source
nil
n'est pas un entier positif.