Теперь мой начальник хочет, чтобы я внедрил механизм, который позволяет ему искать элемент в массиве, и дает ему индекс / индексы, где это значение встречается.
Твое задание:
Напишите программу или функцию, которая получает массив и значение (String, Integer, Float или Boolean) и возвращает индексы массива, в котором встречается значение (либо 0, либо 1 индексированное, в зависимости от того, что вы предпочитаете). Если значение отсутствует в массиве, вернуть пустой массив.
Входные данные:
Массив A и значение V, которые могут присутствовать или не присутствовать в A.
Выход:
Массив, содержащий индекс (ы), в котором V встречается в A, или, если V не встречается в A, пустой массив.
Тестовые случаи:
Обратите внимание, что тестовые случаи основаны на 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]
Подсчет очков:
Это код-гольф , поэтому выигрывает самая низкая оценка в байтах.
источник
Ответы:
Pyth , 2 байта
0 индексированные.
Попробуйте онлайн! или проверьте все тестовые случаи
объяснение
источник
MATL , 2 байта
В
m
Потребляет два аргумента, и проверяют каждый элемент в массиве, равно ли другой аргумент,f
возвращают индексы записей truthy массива.Попробуйте онлайн!
источник
ismember
вместо того,=
чтобы правильно обрабатывать массивы строк.mf
Python 3 , 45 байт
-3 байта благодаря @EriktheOutgolfer и @Chris_Rands
Тестирование.
Сегодня я узнал
enumerate(x) == zip(range(len(x)),x)
.Python 3 , 47 байт
Попробуйте онлайн! или проверьте все тестовые случаи
источник
enumerate()
чтобы сбить пару байтовlambda n,l:[x for x,y in enumerate(l)if y==n]
R (+ pryr), 20 байтов
Который оценивает функцию
Где либо
a
может быть значение для поиска иb
вектор, либо наоборот. Когда представлено два вектора неравной длины (одно значение считается вектором длины-1 в R), R обернет более короткий, чтобы соответствовать длине более длинного. Тогда равенство проверяется. Это создает логический вектор.which
обеспечивает индексы, где этот вектор является истинным.Попробуйте онлайн!
источник
JavaScript, 39 байт
Вышеприведенный фрагмент может работать не во всех браузерах, поэтому вот ссылка TIO .
источник
JavaScript (ES6),
4443 байтаВычеркнуто 44 все еще регулярно 44; (
Сохранено 1 байт благодаря @Arnauld
источник
===
нормаль==
на один байт меньше? Я придумал буквально то же самое, имена переменных и все, хаха.===
необходимо отличать12
от"12"
05AB1E , 4 байта
Попробуйте онлайн!
1-индексироваться.
источник
12
и[12,'12']
, если он не сказал, что это просто для языков, которые на самом деле не конкретный тип, чтобы не заботиться о типах.12
≠'12'
в 05AB1E , потому что иногда они ведут себя по- разному ... не уверен , если есть какая - либо проверка на равенство , которое может поддерживать такую вещь , хотя.is_alpha (a)
иis_number (d)
, но я думаю, мы можем предположить, что наши ответы действительны, пока не будет сказано иначе.C #,
8872 байтаСохранено 16 байт благодаря @LiefdeWen.
Попробуйте онлайн!
источник
i==o
не работает.using System.Linq;a=>b=>a.Select((x,i)=>x.Equals(b)?i:-1).Where(x=>x>=0)
Jelly, 3 bytes
Try it online!
-1 thanks to Mr. Xcoder. (dyadic chains)
источник
Haskell,
4139 bytesTry it online!
Saved two bytes thanks to @flawr
Haskell is statically typed, so I had to use a little workaround to run the test cases.
источник
v#l=...
instead off v l=...
, will save you two bytes:)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
источник
Ruby,
46 4039 bytesSaved 7 bytes!!! thanks to Eric Duminil.
Try it online.
источник
!1
forfalse
.Ruby, 38 bytes
Try it online!
источник
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.источник
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!
источник
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источник
⍸
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).источник
Python 2, 49 bytes
Try it online!
Not short enough, but I thought it was cool. ¯\_(ツ)_/¯
источник
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!
источник
Haskell,
3733 bytesThanks @Laikoni for -4 bytes!
Try it online!
источник
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.
источник
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:
источник
Mathematica, 12 bytes
1-Indexed
input [Array,Value]
output
источник
Position
?Haskell, 29 bytes
Try it online!
источник
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!
источник
¶
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
.источник
eqv
might be better than===
depending on what you want to consider equivalent values.Common Lisp, 66 bytes
Try it online!
источник
TXR Lisp, 26 bytes
In other words, "Where is argument 2 equal to argument 1?"
Run:
источник
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.источник
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
источник
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