Mon patron veut maintenant que j'implémente un mécanisme qui lui permette de rechercher un élément dans un tableau et lui donne le ou les index où se trouve cette valeur.
Ta tâche:
Écrivez un programme ou une fonction qui reçoit un tableau et une valeur (String, Integer, Float ou Boolean) et retourne les indices du tableau auquel la valeur se produit (soit 0 soit 1 indexé, selon votre préférence). Si la valeur n'est pas dans le tableau, renvoyez un tableau vide.
Contribution:
Un tableau A et une valeur V, qui peuvent ou non être présents dans A.
Production:
Un tableau contenant le ou les indices auxquels le V se produit dans A ou, si V ne se produit pas dans A, un tableau vide.
Cas de test:
Veuillez noter que les cas de test sont basés sur 0.
12, [12,14,14,2,"Hello World!",3,12,12] -> [0,6,7]
"Hello World", ["Hi", "Hi World!", 12,2,3,True] -> []
"a", ["A",True,False,"aa","a"] -> [4]
12, [12,"12",12] -> [0,2]
Notation:
C'est le code-golf , donc le score le plus bas en octets l'emporte.
la source
Réponses:
Pyth , 2 octets
0 indexé.
Essayez-le en ligne! ou Vérifiez tous les cas de test
Explication
la source
MATL , 2 octets
Le
m
consomme deux arguments, et vérifie si chaque élément du tableau est égal à l'autre argument,f
renvoie les indices des entrées véridiques d'un tableau.Essayez-le en ligne!
la source
ismember
au lieu de=
pour gérer correctement les tableaux de chaînes.mf
Python 3 , 45 octets
-3 octets grâce à @EriktheOutgolfer et @Chris_Rands
Suite de tests.
Aujourd'hui, j'ai appris
enumerate(x) == zip(range(len(x)),x)
.Python 3 , 47 octets
Essayez-le en ligne! ou Vérifiez tous les cas de test
la source
enumerate()
pour le réduire de quelques octetslambda n,l:[x for x,y in enumerate(l)if y==n]
R (+ pryr), 20 octets
Qui évalue à la fonction
Où soit
a
la valeur à rechercher etb
le vecteur, ou l'inverse. Lorsqu'il est présenté avec deux vecteurs de longueurs inégales (une seule valeur compte comme un vecteur de longueur 1 dans R), R enveloppera le plus court pour correspondre à la longueur du plus long. Ensuite, l'égalité est vérifiée. Cela génère un vecteur logique.which
fournit les indices où ce vecteur est vrai.Essayez-le en ligne!
la source
JavaScript, 39 octets
L'extrait ci-dessus peut ne pas fonctionner sur tous les navigateurs, voici donc un lien TIO .
la source
JavaScript (ES6),
4443 octetsBiffé 44 est toujours régulier 44; (
1 octets enregistrés grâce à @Arnauld
la source
===
normale==
pour un octet de moins? Je suis venu avec littéralement la même chose, les noms de variables et tout haha.===
est nécessaire de distinguer12
de"12"
05AB1E , 4 octets
Essayez-le en ligne!
1 indexé.
la source
12
et[12,'12']
, à moins qu'il ne dise que c'est cool pour les langages qui ne sont pas vraiment concrets de ne pas se soucier des types.12
≠'12'
dans 05AB1E parce que parfois ils se comportent différemment ... je ne sais pas s'il y a un test d'égalité qui peut supporter une telle chose.is_alpha (a)
etis_number (d)
, mais je suppose que nous pouvons supposer que les nôtres sont valides jusqu'à indication contraire.C #,
8872 octets16 octets enregistrés grâce à @LiefdeWen.
Essayez-le en ligne!
la source
i==o
cela ne fonctionnait pas.using System.Linq;a=>b=>a.Select((x,i)=>x.Equals(b)?i:-1).Where(x=>x>=0)
Gelée , 3 octets
Essayez-le en ligne!
-1 merci à M. Xcoder . (chaînes dyadiques)
la source
Haskell ,
4139 octetsEssayez-le en ligne!
Sauvegardé deux octets grâce à @flawr
Haskell est typé statiquement, j'ai donc dû utiliser une petite solution de contournement pour exécuter les cas de test.
la source
v#l=...
au lieu def v l=...
, vous économiserez deux octets :)v!l=...
, mais je ne savais pas si c'était accepté. Je vais modifier la réponse. Merci!map
sur unefilter
expression est souvent un indicateur qu'une compréhension de la liste peut être plus courte:v!l=[i|(i,x)<-zip[1..]l,x==v]
.Husk , 5 octets
Essayez-le en ligne! 1 indexé.
Explication
la source
Rubis,
46 4039 octetsEnregistré 7 octets !!! merci à Eric Duminil.
Essayez-le en ligne.
la source
!1
pourfalse
.Rubis, 38 octets
Essayez-le en ligne!
la source
Google Sheets, 101 octets
La valeur
V
dansA1
et réseauA
dansB1
chaque entrée séparés par une virgule. Les entrées nulles ne sont pas autorisées (la ligne 5 ci-dessous montre ce qui se passe).Explication:
Offset(A1,0,0,1,Counta(Split(B1,",")))
renvoie une plage qui est d'une ligne de hauteur et autant de colonnes de large qu'il y a d'entréesA1
.=IfError(Join(",",Filter(Column(~),Exact(Split(B1,","),A1))),"")
filtre les numéros de colonne de cette plage selon que la valeur dansA1
est ou non exactement chacune des valeurs dansB1
et les concatène toutes dans une liste délimitée par des virgules.la source
Clojure , 40 octets
Première tentative de code golf.
keep-indexed
mappe une fonction sur une collection ici, en passant l'index en cours dans le rappel et en produisant des valeurs de retour non nulles.Essayez-le en ligne!
la source
APL (Dyalog Unicode) , 2 octets SBCS
Takes item to look for as left argument (must be scalar to find an item of the lookup array rather than a subarray) and the lookup array (which may have up to 15 dimensions) as right argument. Returns list of indices, each of which may has as many elements as the number of dimensions in the lookup array.
Try it online!
⍸
ɩndices where⍷
foundla source
⍸
n'est pas dans le jeu de caractères. Pourtant, puisque Dyalog utilise bien moins de 256 caractères uniques, il aurait pu s'agir d'un seul octet. Lorsque nous ajoutons de nouveaux glyphes, nous nous abstenons de modifier le jeu de caractères afin de maintenir la compatibilité descendante.Batch, 86 bytes
Takes input as command line parameters (value then the array elements as separate parameters). Note: String quoting is considered part of the match e.g.
"1"
won't equal1
(would cost 6 bytes).la source
Python 2, 49 bytes
Try it online!
Not short enough, but I thought it was cool. ¯\_(ツ)_/¯
la source
Perl 5, 28 bytes
Try it online!
The output is 1-indexed.
An anonymous function is quite unusual for Perl, but it happens to be the shortest I could think of.
grep ..., 1 .. @_
iterates over the indexes of the input array (actually it goes one cell beyond the last, but it doesn't matter), keeping only the index that satisfy$_[$_]eq$_[0]
, ie. the ones where the value of the element ($_[$_]
) is the same as the value we need to keep ($_[0]
).Slightly longer (31 bytes (30 +
-l
flag)), but as a full program:Try it online!
la source
Haskell,
3733 bytesThanks @Laikoni for -4 bytes!
Try it online!
la source
findIndices.(==)
elemIndices
?Java 8,
146113112111110108 bytes-2 bytes thanks to @TAsk by using
Vector
instead ofArrayList
.-1 byte by using
Stack
instead ofVector
.-2 bytes thanks to @Jakob by inputting a
ArrayList
instead of an array.0-indexed
Explanation:
Try it here.
la source
Vector
may save few bytes. :)List
+ArrayList
pretty often.List r=new Vector();
will work, too.null
, but that's fine.05AB1E, 4 bytes
Try it online!
It is 1-indexed, as shown below:
la source
Mathematica, 12 bytes
1-Indexed
input [Array,Value]
output
la source
Position
?Haskell, 29 bytes
Try it online!
la source
Japt, 9 bytes
1-indexed.
Japt input doesn't support booleans, so they have been replaced with
0
and1
in the test cases.Try it online! with the
-Q
flag to format the array output.0-indexed Solution, 11 bytes
Try it online!
la source
¶
rather than¥
comes in handy :P I was thinking of doing something along the lines ofm@Y*(X¶V} f
, but I hadn't realized that wouldn't work for index0
. 1-indexing is clever...Perl 6, 21 bytes
Try it online!
The
:k
adverb togrep
tells it to return the matching keys (indices) of the input sequence that match the predicate* === $^v
.If strings and numbers were considered equivalent, one could use a grep predicate of just
$^v
instead of* === $^v
.la source
eqv
might be better than===
depending on what you want to consider equivalent values.Common Lisp, 66 bytes
Try it online!
la source
TXR Lisp, 26 bytes
In other words, "Where is argument 2 equal to argument 1?"
Run:
la source
Clojure,
3938 bytesA bit obscure :) The first input argument is a
vec
of values and the second one is the searched value.%
maps indexes to values, and the set#{%2}
returns truthy (the input argument%2
) or falsynil
for that value. comp composes these together.la source
C
340362166115 BytesHello all. My first time here. I figured since I enjoy (attempting) to write optimized code I may as well give this a try.
@Rodney - ~39 bytes from the includes
@Zacharý - 7 bytes with implicit typing
0-indexed.
How to Run:
As per @Arnolds suggestion, the program takes arguments in a much more C friendly manner. This let me reduce the size of the file by a little more than half.
The arguments should be passed in the following order
value [element1 ...]
where braces indicate optional argumentsYou may or may not have to add escaped quotes to any strings that are provided in order to satisfy the condition of
12 != "12"
. On my system the this can be done in the following mannergolfed
ungolfed
la source
i = 0
. These can be removed. I suggest playing around with the whitespace a bit.,12
and second argument of[12,14,14,2,"Hello World!",3,12,12]
prints[5,6]
which is technically incorrect.#include
statements,strstr(h+i,n)-h ==i
has an extra space, and you can doreturn-1
instead ofreturn -1
.#include
statements