Mój szef chce teraz, abym wdrożył mechanizm, który pozwala mu szukać elementu w tablicy i daje mu indeks / indeksy, w których występuje ta wartość.
Twoje zadanie:
Napisz program lub funkcję, która odbiera tablicę i wartość (String, Integer, Float lub Boolean) i zwraca indeksy tablicy, w której występuje wartość (0 lub 1 indeksowane, w zależności od tego, co wolisz). Jeśli wartości nie ma w tablicy, zwróć pustą tablicę.
Wkład:
Tablica A i wartość V, które mogą, ale nie muszą być obecne w A.
Wynik:
Tablica zawierająca indeksy, przy których V występuje w A, lub, jeśli V nie występuje w A, pusta tablica.
Przypadki testowe:
Należy pamiętać, że przypadki testowe są oparte na 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]
Punktacja:
To jest golf golfowy , więc wygrywa najniższy wynik w bajtach.
code-golf
array-manipulation
Gryphon - Przywróć Monikę
źródło
źródło
Odpowiedzi:
Pyth , 2 bajty
0-indeksowane.
Wypróbuj online! lub Sprawdź wszystkie przypadki testowe
Wyjaśnienie
źródło
MATL , 2 bajty
The
m
zużywa dwa argumenty i sprawdza każdy element tablicy, czy jest równa drugiej argumentuf
zwraca indeksy wpisów truthy tablicy.Wypróbuj online!
źródło
ismember
zamiast=
poprawnie obsługiwać tablice ciągów.mf
Python 3 , 45 bajtów
-3 bajty dzięki @EriktheOutgolfer i @Chris_Rands
Pakiet testowy.
Dzisiaj się nauczyłem
enumerate(x) == zip(range(len(x)),x)
.Python 3 , 47 bajtów
Wypróbuj online! lub Sprawdź wszystkie przypadki testowe
źródło
enumerate()
aby obniżyć o kilka bajtówlambda n,l:[x for x,y in enumerate(l)if y==n]
R (+ pryr), 20 bajtów
Który ocenia się na funkcję
Gdzie albo
a
może być wartością, której należy szukać, ab
wektorem lub na odwrót. W przypadku przedstawienia dwóch wektorów o nierównych długościach (pojedyncza wartość liczy się jako wektor długości-1 w R), R zawinie krótszy, aby pasował do długości dłuższego. Następnie sprawdzana jest równość. To generuje logiczny wektor.which
zapewnia indeksy, w których ten wektor jest prawdziwy.Wypróbuj online!
źródło
JavaScript, 39 bajtów
Powyższy fragment kodu może nie działać we wszystkich przeglądarkach, więc oto link do TIO .
źródło
JavaScript (ES6),
4443 bajtyPrzekreślone 44 jest nadal regularne 44; (
Zaoszczędzono 1 bajt dzięki @Arnauld
źródło
===
normalny==
za jeden bajt mniej? Wymyśliłem dosłownie to samo, nazwy zmiennych i całą haha.===
należy odróżnić12
od"12"
05AB1E , 4 bajty
Wypróbuj online!
1-indeksowany.
źródło
12
i[12,'12']
, chyba że powiedział, że jest chłodny dla języków, które nie są konkretnymi typami, nie dbając o typy.12
≠'12'
w 05AB1E, ponieważ czasami zachowują się inaczej ... nie jestem pewien, czy istnieje jakikolwiek test równości, który mógłby poprzeć taką rzecz.is_alpha (a)
iis_number (d)
, ale sądzę, że możemy założyć, że nasze są poprawne, dopóki nie zostanie podane inaczej.C #,
8872 bajtówZaoszczędź 16 bajtów dzięki @LiefdeWen.
Wypróbuj online!
źródło
i==o
to nie działa.using System.Linq;a=>b=>a.Select((x,i)=>x.Equals(b)?i:-1).Where(x=>x>=0)
Galaretka , 3 bajty
Wypróbuj online!
-1 dzięki Mr. Xcoder . (łańcuchy dyadyczne)
źródło
Haskell ,
4139 bajtówWypróbuj online!
Zaoszczędzono dwa bajty dzięki @flawr
Haskell jest wpisany statycznie, więc musiałem użyć małego obejścia, aby uruchomić przypadki testowe.
źródło
v#l=...
zamiastf v l=...
, pozwoli Ci zaoszczędzić dwa bajty :)v!l=...
, but didn't kow if it was accepted. I'll edit the answer. Thanks!map
on somefilter
expression is often an indicator that a list comprehension might be shorter:v!l=[i|(i,x)<-zip[1..]l,x==v]
.Husk, 5 bytes
Try it online! 1-indexed.
Explanation
źródło
Ruby,
46 4039 bytesSaved 7 bytes!!! thanks to Eric Duminil.
Try it online.
źródło
!1
forfalse
.Ruby, 38 bytes
Try it online!
źródło
Google Sheets, 101 bytes
Value
V
inA1
and arrayA
inB1
with each entry separated by a comma. Null entires are not allowed (row 5 below shows what happens).Explanation:
Offset(A1,0,0,1,Counta(Split(B1,",")))
returns a range that is one row tall and as many columns wide as there are entries inA1
.=IfError(Join(",",Filter(Column(~),Exact(Split(B1,","),A1))),"")
filters the column numbers of that range based on whether or not the value inA1
is exactly each of the values inB1
and concatenates them all in a comma-delineated list.źródło
Clojure, 40 bytes
First attempt at code golf.
keep-indexed
maps a function over a collection here, passing the current index into the callback and yielding any non-nil return values.Try it online!
źródło
APL (Dyalog Unicode), 2 bytesSBCS
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⍷
foundźródło
⍸
isn't in the character set. Still, since Dyalog uses way less than 256 unique chars, it could have been a single byte. When we add new glyphs, we refrain from changing the character set so that backwards compatibility is maintained.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).źródło
Python 2, 49 bytes
Try it online!
Not short enough, but I thought it was cool. ¯\_(ツ)_/¯
źródło
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!
źródło
Haskell,
3733 bytesThanks @Laikoni for -4 bytes!
Try it online!
źródło
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.
źródło
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:
źródło
Mathematica, 12 bytes
1-Indexed
input [Array,Value]
output
źródło
Position
?Haskell, 29 bytes
Try it online!
źródło
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!
źródło
¶
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
.źródło
eqv
might be better than===
depending on what you want to consider equivalent values.Common Lisp, 66 bytes
Try it online!
źródło
TXR Lisp, 26 bytes
In other words, "Where is argument 2 equal to argument 1?"
Run:
źródło
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.źródło
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
źródło
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